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