Mercurial > pidgin.yaz
comparison src/gtkaccount.c @ 5696:0a20c8e1d2ca
[gaim-migrate @ 6117]
Account saving and (probably) modification works now, mostly.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Tue, 03 Jun 2003 08:51:07 +0000 |
parents | 0b5318235562 |
children | fc659d75fcf7 |
comparison
equal
deleted
inserted
replaced
5695:e42535701e25 | 5696:0a20c8e1d2ca |
---|---|
78 GaimPlugin *plugin; | 78 GaimPlugin *plugin; |
79 GaimPluginProtocolInfo *prpl_info; | 79 GaimPluginProtocolInfo *prpl_info; |
80 | 80 |
81 GaimProxyType new_proxy_type; | 81 GaimProxyType new_proxy_type; |
82 | 82 |
83 GList *user_split_entries; | |
84 GList *protocol_opt_entries; | |
85 | |
83 GtkSizeGroup *sg; | 86 GtkSizeGroup *sg; |
84 GtkWidget *window; | 87 GtkWidget *window; |
85 | 88 |
86 GtkWidget *top_vbox; | 89 GtkWidget *top_vbox; |
87 GtkWidget *bottom_vbox; | 90 GtkWidget *bottom_vbox; |
181 { | 184 { |
182 GtkWidget *frame; | 185 GtkWidget *frame; |
183 GtkWidget *vbox; | 186 GtkWidget *vbox; |
184 GtkWidget *entry; | 187 GtkWidget *entry; |
185 GList *user_splits; | 188 GList *user_splits; |
186 GList *split_entries = NULL; | |
187 GList *l, *l2; | 189 GList *l, *l2; |
188 char *username = NULL; | 190 char *username = NULL; |
189 | 191 |
190 if (dialog->login_frame != NULL) | 192 if (dialog->login_frame != NULL) |
191 gtk_widget_destroy(dialog->login_frame); | 193 gtk_widget_destroy(dialog->login_frame); |
222 user_splits = dialog->prpl_info->user_splits; | 224 user_splits = dialog->prpl_info->user_splits; |
223 | 225 |
224 if (dialog->account != NULL) | 226 if (dialog->account != NULL) |
225 username = g_strdup(gaim_account_get_username(dialog->account)); | 227 username = g_strdup(gaim_account_get_username(dialog->account)); |
226 | 228 |
229 if (dialog->user_split_entries != NULL) { | |
230 g_list_free(dialog->user_split_entries); | |
231 dialog->user_split_entries = NULL; | |
232 } | |
233 | |
227 for (l = user_splits; l != NULL; l = l->next) { | 234 for (l = user_splits; l != NULL; l = l->next) { |
228 GaimAccountUserSplit *split = l->data; | 235 GaimAccountUserSplit *split = l->data; |
229 char *buf; | 236 char *buf; |
230 | 237 |
231 buf = g_strdup_printf("%s:", gaim_account_user_split_get_text(split)); | 238 buf = g_strdup_printf("%s:", gaim_account_user_split_get_text(split)); |
234 | 241 |
235 __add_pref_box(dialog, vbox, buf, entry); | 242 __add_pref_box(dialog, vbox, buf, entry); |
236 | 243 |
237 g_free(buf); | 244 g_free(buf); |
238 | 245 |
239 split_entries = g_list_append(split_entries, entry); | 246 dialog->user_split_entries = |
240 } | 247 g_list_append(dialog->user_split_entries, entry); |
241 | 248 } |
242 for (l = g_list_last(split_entries), l2 = g_list_last(user_splits); | 249 |
250 for (l = g_list_last(dialog->user_split_entries), | |
251 l2 = g_list_last(user_splits); | |
243 l != NULL && l2 != NULL; | 252 l != NULL && l2 != NULL; |
244 l = l->prev, l2 = l2->prev) { | 253 l = l->prev, l2 = l2->prev) { |
245 | 254 |
246 GaimAccountUserSplit *split = l2->data; | 255 GaimAccountUserSplit *split = l2->data; |
247 GtkWidget *entry = l->data; | 256 GtkWidget *entry = l->data; |
270 if (username != NULL) | 279 if (username != NULL) |
271 gtk_entry_set_text(GTK_ENTRY(dialog->screenname_entry), username); | 280 gtk_entry_set_text(GTK_ENTRY(dialog->screenname_entry), username); |
272 | 281 |
273 g_free(username); | 282 g_free(username); |
274 | 283 |
275 g_list_free(split_entries); | |
276 | 284 |
277 /* Password */ | 285 /* Password */ |
278 dialog->password_entry = gtk_entry_new(); | 286 dialog->password_entry = gtk_entry_new(); |
279 gtk_entry_set_visibility(GTK_ENTRY(dialog->password_entry), FALSE); | 287 gtk_entry_set_visibility(GTK_ENTRY(dialog->password_entry), FALSE); |
280 dialog->password_box = __add_pref_box(dialog, vbox, _("Password:"), | 288 dialog->password_box = __add_pref_box(dialog, vbox, _("Password:"), |
442 /* Main vbox */ | 450 /* Main vbox */ |
443 vbox = gtk_vbox_new(FALSE, 6); | 451 vbox = gtk_vbox_new(FALSE, 6); |
444 gtk_container_add(GTK_CONTAINER(frame), vbox); | 452 gtk_container_add(GTK_CONTAINER(frame), vbox); |
445 gtk_widget_show(vbox); | 453 gtk_widget_show(vbox); |
446 | 454 |
455 if (dialog->protocol_opt_entries != NULL) { | |
456 g_list_free(dialog->protocol_opt_entries); | |
457 dialog->protocol_opt_entries = NULL; | |
458 } | |
459 | |
447 for (l = dialog->prpl_info->protocol_options; l != NULL; l = l->next) { | 460 for (l = dialog->prpl_info->protocol_options; l != NULL; l = l->next) { |
448 option = (GaimAccountOption *)l->data; | 461 option = (GaimAccountOption *)l->data; |
449 | 462 |
450 switch (gaim_account_option_get_type(option)) { | 463 switch (gaim_account_option_get_type(option)) { |
451 case GAIM_PREF_BOOLEAN: | 464 case GAIM_PREF_BOOLEAN: |
465 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), | 478 gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), |
466 bool_value); | 479 bool_value); |
467 | 480 |
468 gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0); | 481 gtk_box_pack_start(GTK_BOX(vbox), check, FALSE, FALSE, 0); |
469 gtk_widget_show(check); | 482 gtk_widget_show(check); |
483 | |
484 dialog->protocol_opt_entries = | |
485 g_list_append(dialog->protocol_opt_entries, check); | |
486 | |
470 break; | 487 break; |
471 | 488 |
472 case GAIM_PREF_INT: | 489 case GAIM_PREF_INT: |
473 if (account == NULL || | 490 if (account == NULL || |
474 gaim_account_get_protocol(account) != dialog->protocol) { | 491 gaim_account_get_protocol(account) != dialog->protocol) { |
489 gaim_account_option_get_text(option)); | 506 gaim_account_option_get_text(option)); |
490 | 507 |
491 __add_pref_box(dialog, vbox, title, entry); | 508 __add_pref_box(dialog, vbox, title, entry); |
492 | 509 |
493 g_free(title); | 510 g_free(title); |
511 | |
512 dialog->protocol_opt_entries = | |
513 g_list_append(dialog->protocol_opt_entries, entry); | |
514 | |
494 break; | 515 break; |
495 | 516 |
496 case GAIM_PREF_STRING: | 517 case GAIM_PREF_STRING: |
497 if (account == NULL || | 518 if (account == NULL || |
498 gaim_account_get_protocol(account) != dialog->protocol) { | 519 gaim_account_get_protocol(account) != dialog->protocol) { |
513 gaim_account_option_get_text(option)); | 534 gaim_account_option_get_text(option)); |
514 | 535 |
515 __add_pref_box(dialog, vbox, title, entry); | 536 __add_pref_box(dialog, vbox, title, entry); |
516 | 537 |
517 g_free(title); | 538 g_free(title); |
539 | |
540 dialog->protocol_opt_entries = | |
541 g_list_append(dialog->protocol_opt_entries, entry); | |
542 | |
518 break; | 543 break; |
519 | 544 |
520 default: | 545 default: |
521 break; | 546 break; |
522 } | 547 } |
689 g_signal_connect(G_OBJECT(dialog->proxy_dropdown), "changed", | 714 g_signal_connect(G_OBJECT(dialog->proxy_dropdown), "changed", |
690 G_CALLBACK(__proxy_type_changed_cb), dialog); | 715 G_CALLBACK(__proxy_type_changed_cb), dialog); |
691 } | 716 } |
692 | 717 |
693 static void | 718 static void |
694 __close_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog) | 719 __cancel_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog) |
695 { | 720 { |
721 if (dialog->user_split_entries != NULL) | |
722 g_list_free(dialog->user_split_entries); | |
723 | |
724 if (dialog->protocol_opt_entries != NULL) | |
725 g_list_free(dialog->protocol_opt_entries); | |
726 | |
696 gtk_widget_destroy(dialog->window); | 727 gtk_widget_destroy(dialog->window); |
697 | 728 |
698 g_free(dialog); | 729 g_free(dialog); |
699 } | 730 } |
700 | 731 |
701 static void | 732 static void |
702 __account_win_destroy_cb(GtkWidget *w, GdkEvent *event, | 733 __account_win_destroy_cb(GtkWidget *w, GdkEvent *event, |
703 AccountPrefsDialog *dialog) | 734 AccountPrefsDialog *dialog) |
704 { | 735 { |
705 __close_account_prefs_cb(NULL, dialog); | 736 __cancel_account_prefs_cb(NULL, dialog); |
737 } | |
738 | |
739 static void | |
740 __ok_account_prefs_cb(GtkWidget *w, AccountPrefsDialog *dialog) | |
741 { | |
742 GaimProxyInfo *proxy_info = NULL; | |
743 GList *l, *l2; | |
744 const char *value; | |
745 char *username; | |
746 char *tmp; | |
747 | |
748 if (dialog->account == NULL) { | |
749 const char *screenname; | |
750 | |
751 screenname = gtk_entry_get_text(GTK_ENTRY(dialog->screenname_entry)); | |
752 | |
753 dialog->account = gaim_account_new(screenname, dialog->protocol); | |
754 } | |
755 | |
756 if ((value = gtk_entry_get_text(GTK_ENTRY(dialog->alias_entry))) != NULL) | |
757 gaim_account_set_alias(dialog->account, value); | |
758 else | |
759 gaim_account_set_alias(dialog->account, NULL); | |
760 | |
761 gaim_account_set_remember_password(dialog->account, | |
762 gtk_toggle_button_get_active( | |
763 GTK_TOGGLE_BUTTON(dialog->remember_pass_check))); | |
764 | |
765 if (dialog->prpl_info->options & OPT_PROTO_MAIL_CHECK) | |
766 gaim_account_set_check_mail(dialog->account, | |
767 gtk_toggle_button_get_active( | |
768 GTK_TOGGLE_BUTTON(dialog->new_mail_check))); | |
769 | |
770 /* TODO: Do something about auto-login. */ | |
771 | |
772 if (gaim_account_get_remember_password(dialog->account)) | |
773 gaim_account_set_password(dialog->account, | |
774 gtk_entry_get_text(GTK_ENTRY(dialog->password_entry))); | |
775 else | |
776 gaim_account_set_password(dialog->account, NULL); | |
777 | |
778 /* Build the username string. */ | |
779 username = g_strdup(gaim_account_get_username(dialog->account)); | |
780 | |
781 for (l = dialog->prpl_info->user_splits, l2 = dialog->user_split_entries; | |
782 l != NULL && l2 != NULL; | |
783 l = l->next, l2 = l2->next) { | |
784 | |
785 GaimAccountUserSplit *split = l->data; | |
786 GtkEntry *entry = l2->data; | |
787 char sep[2] = " "; | |
788 | |
789 value = gtk_entry_get_text(entry); | |
790 | |
791 *sep = gaim_account_user_split_get_separator(split); | |
792 | |
793 tmp = g_strconcat(username, sep, | |
794 (*value ? value : | |
795 gaim_account_user_split_get_default_value(split))); | |
796 | |
797 g_free(username); | |
798 username = tmp; | |
799 } | |
800 | |
801 gaim_account_set_username(dialog->account, username); | |
802 g_free(username); | |
803 | |
804 /* Add the protocol settings */ | |
805 gaim_account_clear_settings(dialog->account); | |
806 | |
807 for (l = dialog->prpl_info->protocol_options, | |
808 l2 = dialog->protocol_opt_entries; | |
809 l != NULL && l2 != NULL; | |
810 l = l->next, l2 = l2->next) { | |
811 | |
812 GaimPrefType type; | |
813 GaimAccountOption *option = l->data; | |
814 GtkWidget *widget = l2->data; | |
815 const char *setting; | |
816 int int_value; | |
817 gboolean bool_value; | |
818 | |
819 type = gaim_account_option_get_type(option); | |
820 | |
821 setting = gaim_account_option_get_setting(option); | |
822 | |
823 switch (type) { | |
824 case GAIM_PREF_STRING: | |
825 value = gtk_entry_get_text(GTK_ENTRY(widget)); | |
826 gaim_account_set_string(dialog->account, setting, value); | |
827 break; | |
828 | |
829 case GAIM_PREF_INT: | |
830 int_value = atoi(gtk_entry_get_text(GTK_ENTRY(widget))); | |
831 gaim_account_set_int(dialog->account, setting, int_value); | |
832 break; | |
833 | |
834 case GAIM_PREF_BOOLEAN: | |
835 bool_value = | |
836 gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); | |
837 gaim_account_set_bool(dialog->account, setting, bool_value); | |
838 break; | |
839 | |
840 default: | |
841 break; | |
842 } | |
843 } | |
844 | |
845 /* Set the proxy stuff. */ | |
846 if (dialog->new_proxy_type == GAIM_PROXY_NONE) { | |
847 gaim_account_set_proxy_info(dialog->account, NULL); | |
848 } | |
849 else { | |
850 const char *port_str; | |
851 | |
852 proxy_info = gaim_account_get_proxy_info(dialog->account); | |
853 | |
854 if (proxy_info == NULL) { | |
855 proxy_info = gaim_proxy_info_new(); | |
856 gaim_account_set_proxy_info(dialog->account, proxy_info); | |
857 } | |
858 | |
859 gaim_proxy_info_set_type(proxy_info, dialog->new_proxy_type); | |
860 | |
861 gaim_proxy_info_set_host(proxy_info, | |
862 gtk_entry_get_text(GTK_ENTRY(dialog->proxy_host_entry))); | |
863 | |
864 port_str = gtk_entry_get_text(GTK_ENTRY(dialog->proxy_port_entry)); | |
865 | |
866 if (port_str != NULL) | |
867 gaim_proxy_info_set_port(proxy_info, atoi(port_str)); | |
868 else | |
869 gaim_proxy_info_set_port(proxy_info, 0); | |
870 | |
871 gaim_proxy_info_set_username(proxy_info, | |
872 gtk_entry_get_text(GTK_ENTRY(dialog->proxy_user_entry))); | |
873 | |
874 gaim_proxy_info_set_password(proxy_info, | |
875 gtk_entry_get_text(GTK_ENTRY(dialog->proxy_pass_entry))); | |
876 } | |
706 } | 877 } |
707 | 878 |
708 static void | 879 static void |
709 __show_account_prefs(AccountPrefsDialogType type, GaimAccount *account) | 880 __show_account_prefs(AccountPrefsDialogType type, GaimAccount *account) |
710 { | 881 { |
794 button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); | 965 button = gtk_button_new_from_stock(GTK_STOCK_CANCEL); |
795 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | 966 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); |
796 gtk_widget_show(button); | 967 gtk_widget_show(button); |
797 | 968 |
798 g_signal_connect(G_OBJECT(button), "clicked", | 969 g_signal_connect(G_OBJECT(button), "clicked", |
799 G_CALLBACK(__close_account_prefs_cb), dialog); | 970 G_CALLBACK(__cancel_account_prefs_cb), dialog); |
800 | 971 |
801 /* OK button */ | 972 /* OK button */ |
802 button = gtk_button_new_from_stock(GTK_STOCK_OK); | 973 button = gtk_button_new_from_stock(GTK_STOCK_OK); |
803 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); | 974 gtk_box_pack_start(GTK_BOX(bbox), button, FALSE, FALSE, 0); |
804 gtk_widget_show(button); | 975 gtk_widget_show(button); |
976 | |
977 g_signal_connect(G_OBJECT(button), "clicked", | |
978 G_CALLBACK(__ok_account_prefs_cb), dialog); | |
805 | 979 |
806 /* Show the window. */ | 980 /* Show the window. */ |
807 gtk_widget_show(win); | 981 gtk_widget_show(win); |
808 } | 982 } |
809 | 983 |