Mercurial > pidgin.yaz
comparison src/gtkaccount.c @ 9308:b3bda982996b
[gaim-migrate @ 10116]
Yikes.
committer: Tailor Script <tailor@pidgin.im>
author | Sean Egan <seanegan@gmail.com> |
---|---|
date | Sat, 19 Jun 2004 04:57:43 +0000 |
parents | 96c481da57ea |
children | ade6b9c0dc8a |
comparison
equal
deleted
inserted
replaced
9307:2138b3a07cb8 | 9308:b3bda982996b |
---|---|
20 * | 20 * |
21 * You should have received a copy of the GNU General Public License | 21 * You should have received a copy of the GNU General Public License |
22 * along with this program; if not, write to the Free Software | 22 * along with this program; if not, write to the Free Software |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 */ | 24 */ |
25 | |
25 #include "gtkinternal.h" | 26 #include "gtkinternal.h" |
26 | 27 |
27 #include "account.h" | 28 #include "account.h" |
28 #include "accountopt.h" | 29 #include "accountopt.h" |
29 #include "core.h" | 30 #include "core.h" |
30 #include "debug.h" | 31 #include "debug.h" |
31 #include "notify.h" | 32 #include "notify.h" |
32 #include "plugin.h" | 33 #include "plugin.h" |
33 #include "prefs.h" | 34 #include "prefs.h" |
35 #include "prpl.h" | |
34 #include "request.h" | 36 #include "request.h" |
35 #include "signals.h" | 37 #include "signals.h" |
36 #include "util.h" | 38 #include "util.h" |
37 | 39 |
38 #include "gaim-disclosure.h" | 40 #include "gaim-disclosure.h" |
115 /* User Options */ | 117 /* User Options */ |
116 GtkWidget *user_frame; | 118 GtkWidget *user_frame; |
117 GtkWidget *new_mail_check; | 119 GtkWidget *new_mail_check; |
118 GtkWidget *buddy_icon_hbox; | 120 GtkWidget *buddy_icon_hbox; |
119 GtkWidget *buddy_icon_entry; | 121 GtkWidget *buddy_icon_entry; |
122 char *buddy_icon_path; | |
120 GtkWidget *buddy_icon_filesel; | 123 GtkWidget *buddy_icon_filesel; |
121 GtkWidget *buddy_icon_preview; | 124 GtkWidget *buddy_icon_preview; |
122 GtkWidget *buddy_icon_text; | 125 GtkWidget *buddy_icon_text; |
123 | 126 |
124 /* Protocol Options */ | 127 /* Protocol Options */ |
267 GTK_FILE_SELECTION(dialog->buddy_icon_filesel))) | 270 GTK_FILE_SELECTION(dialog->buddy_icon_filesel))) |
268 { | 271 { |
269 return; | 272 return; |
270 } | 273 } |
271 | 274 |
272 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), filename); | 275 if (dialog->buddy_icon_path) |
276 g_free(dialog->buddy_icon_path); | |
277 dialog->buddy_icon_path = g_strdup(filename); | |
278 gtk_image_set_from_file(GTK_IMAGE(dialog->buddy_icon_entry), filename); | |
273 gtk_widget_destroy(dialog->buddy_icon_filesel); | 279 gtk_widget_destroy(dialog->buddy_icon_filesel); |
274 } | 280 } |
275 | 281 |
276 static void | 282 static void |
277 buddy_icon_preview_change_cb(GtkTreeSelection *sel, AccountPrefsDialog *dialog) | 283 buddy_icon_preview_change_cb(GtkTreeSelection *sel, AccountPrefsDialog *dialog) |
375 } | 381 } |
376 | 382 |
377 static void | 383 static void |
378 buddy_icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog) | 384 buddy_icon_reset_cb(GtkWidget *button, AccountPrefsDialog *dialog) |
379 { | 385 { |
380 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), ""); | 386 if (dialog->buddy_icon_path) |
387 g_free(dialog->buddy_icon_path); | |
388 dialog->buddy_icon_path = NULL; | |
389 gtk_image_set_from_file(GTK_IMAGE(dialog->buddy_icon_entry), ""); | |
390 } | |
391 | |
392 gboolean str_array_match(char **a, char **b) | |
393 { | |
394 int i, j; | |
395 for (i = 0; a[i] != NULL; i++) | |
396 for (j = 0; b[j] != NULL; j++) | |
397 if (!g_ascii_strcasecmp(a[i], b[j])) | |
398 return TRUE; | |
399 return FALSE; | |
400 } | |
401 | |
402 static void | |
403 convert_and_set_buddy_icon(GaimAccount *account, const char *path) | |
404 { | |
405 int width, height; | |
406 GaimPluginProtocolInfo *prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(gaim_find_prpl(account->protocol_id)); | |
407 char **prpl_formats = g_strsplit (prpl_info->icon_spec.format,",",0); | |
408 GdkPixbufFormat *format = gdk_pixbuf_get_file_info (path, &width, &height); | |
409 char **pixbuf_formats = gdk_pixbuf_format_get_extensions(format); | |
410 | |
411 if (str_array_match(pixbuf_formats, prpl_formats)) { | |
412 gaim_account_set_buddy_icon(account, path); | |
413 } else { | |
414 int i; | |
415 GError *error = NULL; | |
416 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path, &error); | |
417 GdkPixbuf *scale; | |
418 char *random = g_strdup_printf("%x", g_random_int()); | |
419 const char *dirname = gaim_buddy_icons_get_cache_dir(); | |
420 char *filename = g_build_filename(dirname, random, NULL); | |
421 if (prpl_info->icon_spec.width > 0 && prpl_info->icon_spec.height > 0) { | |
422 scale = gdk_pixbuf_scale_simple (pixbuf, prpl_info->icon_spec.width, prpl_info->icon_spec.height, GDK_INTERP_HYPER); | |
423 gdk_pixbuf_unref(pixbuf); | |
424 pixbuf = scale; | |
425 } | |
426 if (error) { | |
427 g_free(filename); | |
428 g_free(random); | |
429 gaim_debug_error("buddyicon", "Could not open icon for conversion: %s\n", error->message); | |
430 return; | |
431 } | |
432 for (i = 0; prpl_formats[i]; i++) { | |
433 gaim_debug_info("buddyicon", "Converting buddy icon to %s as %s\n", prpl_formats[i], filename); | |
434 if (gdk_pixbuf_save (pixbuf, filename, prpl_formats[i], &error, NULL) == FALSE) | |
435 break; | |
436 } | |
437 if (!error) { | |
438 gaim_account_set_buddy_icon(account, filename); | |
439 } else { | |
440 gaim_debug_error("buddyicon", "Could not convert icon to usable format: %s\n", error->message); | |
441 } | |
442 g_free(filename); | |
443 g_free(random); | |
444 g_object_unref(pixbuf); | |
445 } | |
381 } | 446 } |
382 | 447 |
383 static void | 448 static void |
384 add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) | 449 add_login_options(AccountPrefsDialog *dialog, GtkWidget *parent) |
385 { | 450 { |
576 | 641 |
577 label = gtk_label_new(_("Buddy icon file:")); | 642 label = gtk_label_new(_("Buddy icon file:")); |
578 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); | 643 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); |
579 gtk_widget_show(label); | 644 gtk_widget_show(label); |
580 | 645 |
581 dialog->buddy_icon_entry = gtk_entry_new(); | 646 dialog->buddy_icon_entry = gtk_image_new(); |
582 gtk_editable_set_editable(GTK_EDITABLE(dialog->buddy_icon_entry), FALSE); | |
583 gtk_box_pack_start(GTK_BOX(hbox), dialog->buddy_icon_entry, TRUE, TRUE, 0); | 647 gtk_box_pack_start(GTK_BOX(hbox), dialog->buddy_icon_entry, TRUE, TRUE, 0); |
584 gtk_widget_show(dialog->buddy_icon_entry); | 648 gtk_widget_show(dialog->buddy_icon_entry); |
585 gaim_set_accessible_label (dialog->buddy_icon_entry, label); | 649 gaim_set_accessible_label (dialog->buddy_icon_entry, label); |
586 | 650 |
587 button = gtk_button_new_with_mnemonic(_("_Browse")); | 651 button = gtk_button_new_with_mnemonic(_("_Browse")); |
598 | 662 |
599 if (dialog->prpl_info != NULL) { | 663 if (dialog->prpl_info != NULL) { |
600 if (!(dialog->prpl_info->options & OPT_PROTO_MAIL_CHECK)) | 664 if (!(dialog->prpl_info->options & OPT_PROTO_MAIL_CHECK)) |
601 gtk_widget_hide(dialog->new_mail_check); | 665 gtk_widget_hide(dialog->new_mail_check); |
602 | 666 |
603 if (!(dialog->prpl_info->options & OPT_PROTO_BUDDY_ICON)) | 667 if (!(dialog->prpl_info->icon_spec.format != NULL)) |
604 gtk_widget_hide(dialog->buddy_icon_hbox); | 668 gtk_widget_hide(dialog->buddy_icon_hbox); |
605 } | 669 } |
606 | 670 |
607 if (dialog->account != NULL) { | 671 if (dialog->account != NULL) { |
608 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->new_mail_check), | 672 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(dialog->new_mail_check), |
609 gaim_account_get_check_mail(dialog->account)); | 673 gaim_account_get_check_mail(dialog->account)); |
610 | 674 |
611 if (gaim_account_get_buddy_icon(dialog->account) != NULL) | 675 if (gaim_account_get_buddy_icon(dialog->account) != NULL) { |
612 gtk_entry_set_text(GTK_ENTRY(dialog->buddy_icon_entry), | 676 dialog->buddy_icon_path = g_strdup(gaim_account_get_buddy_icon(dialog->account)); |
613 gaim_account_get_buddy_icon(dialog->account)); | 677 gtk_image_set_from_file(GTK_IMAGE(dialog->buddy_icon_entry),dialog->buddy_icon_path); |
678 } | |
614 } | 679 } |
615 | 680 |
616 if (!dialog->prpl_info || | 681 if (!dialog->prpl_info || |
617 (!(dialog->prpl_info->options & OPT_PROTO_MAIL_CHECK) && | 682 (!(dialog->prpl_info->options & OPT_PROTO_MAIL_CHECK) && |
618 !(dialog->prpl_info->options & OPT_PROTO_BUDDY_ICON))) { | 683 (dialog->prpl_info->icon_spec.format == NULL))) { |
619 | 684 |
620 /* Nothing to see :( aww. */ | 685 /* Nothing to see :( aww. */ |
621 gtk_widget_hide(dialog->user_frame); | 686 gtk_widget_hide(dialog->user_frame); |
622 } | 687 } |
623 } | 688 } |
1097 gaim_account_set_alias(dialog->account, value); | 1162 gaim_account_set_alias(dialog->account, value); |
1098 else | 1163 else |
1099 gaim_account_set_alias(dialog->account, NULL); | 1164 gaim_account_set_alias(dialog->account, NULL); |
1100 | 1165 |
1101 /* Buddy Icon */ | 1166 /* Buddy Icon */ |
1102 value = gtk_entry_get_text(GTK_ENTRY(dialog->buddy_icon_entry)); | 1167 value = dialog->buddy_icon_path; |
1103 | 1168 |
1104 if (dialog->prpl_info && | 1169 if (dialog->prpl_info && |
1105 (dialog->prpl_info->options & OPT_PROTO_BUDDY_ICON) && | 1170 (dialog->prpl_info->icon_spec.format) && |
1106 *value != '\0') | 1171 *value != '\0') { |
1107 gaim_account_set_buddy_icon(dialog->account, value); | 1172 convert_and_set_buddy_icon(dialog->account, value); |
1108 else | 1173 } else { |
1109 gaim_account_set_buddy_icon(dialog->account, NULL); | 1174 gaim_account_set_buddy_icon(dialog->account, NULL); |
1110 | 1175 } |
1111 /* Remember Password */ | 1176 /* Remember Password */ |
1112 gaim_account_set_remember_password(dialog->account, | 1177 gaim_account_set_remember_password(dialog->account, |
1113 gtk_toggle_button_get_active( | 1178 gtk_toggle_button_get_active( |
1114 GTK_TOGGLE_BUTTON(dialog->remember_pass_check))); | 1179 GTK_TOGGLE_BUTTON(dialog->remember_pass_check))); |
1115 | 1180 |