|
Thank you. This time, I have insert an entry in ChangLog. And modified some places in file mail-account-editor.c mail-account-gui.c and mail-account-gui.h. The whole thing looks better now, but I have to alter some exist function declaration and defination to use this simplest way I can found. Please see and tell me if there is anything wrong. Best Regards Charles Zhang Not Zed wrote: first, this should include a ChangeLog entry. second, there are a few places that already hook onto some form of changed event, you should just call a function from there rather than hooking a signal onto every possible widget. last, i'm not sure if this breaks abstraction somewhat - you're poking about the internals of the dialog->editor directly (i.e. by changing the button sensitivity), perhaps you should have a 'changed' method on it instead. On Mon, 2003-10-13 at 00:44, Charles Zhang wrote: |
Index: mail/ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.2761.2.32
diff -u -p -r1.2761.2.32 ChangeLog
--- mail/ChangeLog 8 Oct 2003 16:06:08 -0000 1.2761.2.32
+++ mail/ChangeLog 13 Oct 2003 14:56:06 -0000
@@ 0,0 +,16 @@
+2003-10-13 Charles Zhang <charles zhang sun com>
+
+ * mail-account-gui.h: alter the declaration of function mail_
+ account_gui_build_extra_conf to add necessary argument.
+
+ * mail-account-gui.c (mail_config_change): enable apply button.
+ (mail_account_gui_connect_change_signal): connect change signal.
+ (mail_account_gui_setup): call function mail_account_gui_connect_
+ change_signal.
+ (mail_account_gui_build_extra_conf): connect "changed" signal.
+ (source_type_changed): transfer neccesary argument to function
+ (default_folders_clicked): call function mail_config_change
+
+ * mail-account-editor.c (apply_changes): disable apply button
+ (construct): disable apply button
+
2003-10-08 Frederic Crozat <fcrozat mandrakesoft com>
* mail-display.c: (pixbuf_gen_idle):
Index: mail/mail-account-editor.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/mail-account-editor.c,v
retrieving revision 1.57
diff -u -p -r1.57 mail-account-editor.c
--- mail/mail-account-editor.c 25 Mar 2003 15:49:19 -0000 1.57
+++ mail/mail-account-editor.c 13 Oct 2003 14:56:07 -0000
@@ -109,6 +109,9 @@ apply_changes (MailAccountEditor *editor
/* save any changes we may have */
mail_config_write ();
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (editor),
+ GTK_RESPONSE_APPLY, FALSE);
+
/* FIXME: #1549: if the account was a remote store, delete it from the folder-tree and re-add it */
/* FIXME: preferably, we'd only do this if there were changes... oh well */
@@ -156,9 +159,12 @@ construct (MailAccountEditor *editor, EA
mail_account_gui_setup (editor->gui, GTK_WIDGET (editor));
- mail_account_gui_build_extra_conf (editor->gui, source->url);
+ mail_account_gui_build_extra_conf (editor->gui, GTK_WIDGET (editor), source->url);
gtk_widget_grab_focus (GTK_WIDGET (editor->gui->account_name));
+
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (editor),
+ GTK_RESPONSE_APPLY, FALSE);
}
MailAccountEditor *
Index: mail/mail-account-gui.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/mail-account-gui.c,v
retrieving revision 1.133.4.3
diff -u -p -r1.133.4.3 mail-account-gui.c
--- mail/mail-account-gui.c 29 Sep 2003 15:43:30 -0000 1.133.4.3
+++ mail/mail-account-gui.c 13 Oct 2003 14:56:17 -0000
@@ -475,7 +475,9 @@ transport_provider_set_available (MailAc
static void
source_type_changed (GtkWidget *widget, gpointer user_data)
{
- MailAccountGui *gui = user_data;
+ MailAccountEditor *editor = (MailAccountEditor *) user_data;
+ GtkWidget *top = GTK_WIDGET (editor);
+ MailAccountGui *gui = (MailAccountGui *) editor->gui;
GtkWidget *file_entry, *label, *frame, *dwidget = NULL;
CamelProvider *provider;
@@ -570,7 +572,7 @@ source_type_changed (GtkWidget *widget,
if (dwidget)
gtk_widget_grab_focus (dwidget);
- mail_account_gui_build_extra_conf (gui, gui && gui->account && gui->account->source ? gui->account->source->url : NULL);
+ mail_account_gui_build_extra_conf (gui, top, gui && gui->account && gui->account->source ? gui->account->source->url : NULL);
if (provider && CAMEL_PROVIDER_IS_STORE_AND_TRANSPORT (provider))
transport_provider_set_available (gui, provider, TRUE);
@@ -730,8 +732,14 @@ setup_toggle (GtkWidget *widget, const c
toggle_sensitivity (toggle, widget);
}
+static void
+mail_config_changed (GtkWidget *widget, gpointer user_data)
+{
+ gtk_dialog_set_response_sensitive (GTK_DIALOG (user_data), GTK_RESPONSE_APPLY, TRUE);
+}
+
void
-mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url_string)
+mail_account_gui_build_extra_conf (MailAccountGui *gui, GtkWidget *top, const char *url_string)
{
CamelURL *url;
GtkWidget *mailcheck_frame, *mailcheck_hbox;
@@ -874,6 +882,9 @@ mail_account_gui_build_extra_conf (MailA
GTK_EXPAND | GTK_FILL, 0, 0, 0);
rows++;
g_hash_table_insert (gui->extra_config, entries[i].name, checkbox);
+
+ g_signal_connect (checkbox, "toggled", G_CALLBACK (mail_config_changed), top);
+
if (entries[i].depname)
setup_toggle (checkbox, entries[i].depname, gui);
break;
@@ -923,7 +934,9 @@ mail_account_gui_build_extra_conf (MailA
}
g_hash_table_insert (gui->extra_config, entries[i].name, entry);
-
+
+ g_signal_connect (entry, "changed", G_CALLBACK (mail_config_changed), top);
+
break;
}
@@ -1076,6 +1089,7 @@ static void
default_folders_clicked (GtkButton *button, gpointer user_data)
{
MailAccountGui *gui = user_data;
+ MailAccountsTab *dialog = (MailAccountsTab *) gui->dialog;
/* Drafts folder */
g_free (gui->drafts_folder_uri);
@@ -1088,6 +1102,8 @@ default_folders_clicked (GtkButton *butt
gui->sent_folder_uri = g_strdup (default_sent_folder_uri);
evolution_folder_selector_button_set_uri (EVOLUTION_FOLDER_SELECTOR_BUTTON (gui->sent_folder_button),
gui->sent_folder_uri);
+
+ mail_config_changed (GTK_WIDGET (button), dialog->editor);
}
GtkWidget *mail_account_gui_folder_selector_button_new (char *widget_name, char *string1, char *string2, int int1, int int2);
@@ -1578,6 +1594,50 @@ mail_account_gui_new (EAccount *account,
}
void
+mail_account_gui_connect_change_signal (MailAccountGui *gui, GtkWidget *top)
+{
+ g_signal_connect (gui->account_name, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->default_account, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->full_name, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->email_address, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->reply_to, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->organization, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->sig_option_menu, "changed", G_CALLBACK (mail_config_changed), top);
+
+ g_signal_connect (gui->source.type, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->source.hostname, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->source.username, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->source.path, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->source.use_ssl, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->source.authtype, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->source.remember, "toggled", G_CALLBACK (mail_config_changed), top);
+
+ g_signal_connect (gui->source_auto_check, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->source_auto_check_min, "value-changed", G_CALLBACK (mail_config_changed), top);
+
+ g_signal_connect (gui->transport.type, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->transport.hostname, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->transport.username, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->transport_needs_auth, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->transport.use_ssl, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->transport.authtype, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->transport.remember, "toggled", G_CALLBACK (mail_config_changed), top);
+
+ g_signal_connect (gui->drafts_folder_button, "clicked", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->sent_folder_button, "clicked", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->always_cc, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->cc_addrs, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->always_bcc, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->bcc_addrs, "changed", G_CALLBACK (mail_config_changed), top);
+
+ g_signal_connect (gui->pgp_key, "changed", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->pgp_encrypt_to_self, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->pgp_always_sign, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->pgp_no_imip_sign, "toggled", G_CALLBACK (mail_config_changed), top);
+ g_signal_connect (gui->pgp_always_trust, "toggled", G_CALLBACK (mail_config_changed), top);
+}
+
+void
mail_account_gui_setup (MailAccountGui *gui, GtkWidget *top)
{
GtkWidget *stores, *transports, *item;
@@ -1620,7 +1680,7 @@ mail_account_gui_setup (MailAccountGui *
g_object_set_data ((GObject *) gui->source.type, provider->protocol, item);
g_object_set_data ((GObject *) item, "provider", provider);
g_object_set_data ((GObject *) item, "number", GUINT_TO_POINTER (si));
- g_signal_connect (item, "activate", G_CALLBACK (source_type_changed), gui);
+ g_signal_connect (item, "activate", G_CALLBACK (source_type_changed), top);
gtk_menu_shell_append(GTK_MENU_SHELL(stores), item);
@@ -1691,7 +1751,7 @@ mail_account_gui_setup (MailAccountGui *
/* add a "None" option to the stores menu */
item = gtk_menu_item_new_with_label (_("None"));
g_object_set_data ((GObject *) item, "provider", NULL);
- g_signal_connect (item, "activate", G_CALLBACK (source_type_changed), gui);
+ g_signal_connect (item, "activate", G_CALLBACK (source_type_changed), top);
gtk_menu_shell_append(GTK_MENU_SHELL(stores), item);
@@ -1760,6 +1820,8 @@ mail_account_gui_setup (MailAccountGui *
gui->transport.provider_type = CAMEL_PROVIDER_TRANSPORT;
g_free (transport_proto);
}
+
+ mail_account_gui_connect_change_signal (gui, top);
}
static void
Index: mail/mail-account-gui.h
===================================================================
RCS file: /cvs/gnome/evolution/mail/mail-account-gui.h,v
retrieving revision 1.24
diff -u -p -r1.24 mail-account-gui.h
--- mail/mail-account-gui.h 25 Mar 2003 15:49:19 -0000 1.24
+++ mail/mail-account-gui.h 13 Oct 2003 14:56:17 -0000
@@ -124,7 +124,7 @@ gboolean mail_account_gui_source_complet
gboolean mail_account_gui_transport_complete (MailAccountGui *gui, GtkWidget **incomplete);
gboolean mail_account_gui_management_complete (MailAccountGui *gui, GtkWidget **incomplete);
-void mail_account_gui_build_extra_conf (MailAccountGui *gui, const char *url);
+void mail_account_gui_build_extra_conf (MailAccountGui *gui, GtkWidget *top, const char *url);
void mail_account_gui_auto_detect_extra_conf (MailAccountGui *gui);