| 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 |