From 8851083b87e5c361877461d5b65cdfb866d3b443 Mon Sep 17 00:00:00 2001 From: Murray Cumming Date: Wed, 18 Apr 2007 12:41:31 +0000 Subject: [PATCH] 2007-04-18 Murray Cumming * src/maemo/modest-account-settings-dialog.h: * src/maemo/modest-account-settings-dialog.c: Added connect_for_modified() utility function to mark the new modified boolean. (create_page_account_details), (create_page_user_details), (create_page_incoming), (create_page_outgoing), (on_response), (modest_account_settings_dialog_init), (modest_account_settings_dialog_set_account_name): Only warn about unsaved changes when there are actually unsaved changes. * src/modest-account-mgr-helpers.c: * src/modest-account-mgr-helpers.h: Put the port, secure-auth, and security information into the ModestServerAccountData struct. I do not use it yet, but someone might expect to get the data from there in future. pmo-trunk-r1585 --- ChangeLog2 | 17 +++++++ src/maemo/modest-account-settings-dialog.c | 68 ++++++++++++++++++++++++++-- src/maemo/modest-account-settings-dialog.h | 1 + src/modest-account-mgr-helpers.c | 55 ++++++++++++++++++---- src/modest-account-mgr-helpers.h | 2 + 5 files changed, 129 insertions(+), 14 deletions(-) diff --git a/ChangeLog2 b/ChangeLog2 index 70319b0..89b9469 100644 --- a/ChangeLog2 +++ b/ChangeLog2 @@ -1,5 +1,22 @@ 2007-04-18 Murray Cumming + * src/maemo/modest-account-settings-dialog.h: + * src/maemo/modest-account-settings-dialog.c: + Added connect_for_modified() utility function to mark the new modified boolean. + + (create_page_account_details), (create_page_user_details), + (create_page_incoming), (create_page_outgoing), (on_response), + (modest_account_settings_dialog_init), + (modest_account_settings_dialog_set_account_name): + Only warn about unsaved changes when there are actually unsaved changes. + + * src/modest-account-mgr-helpers.c: + * src/modest-account-mgr-helpers.h: Put the port, secure-auth, and security information + into the ModestServerAccountData struct. I do not use it yet, but someone might expect + to get the data from there in future. + +2007-04-18 Murray Cumming + * src/modest-defs.h: * src/modest-account-mgr-helpers.h: diff --git a/src/maemo/modest-account-settings-dialog.c b/src/maemo/modest-account-settings-dialog.c index e270231..9223814 100644 --- a/src/maemo/modest-account-settings-dialog.c +++ b/src/maemo/modest-account-settings-dialog.c @@ -112,6 +112,44 @@ on_combo_incoming_security_changed (GtkComboBox *widget, gpointer user_data); static void on_combo_outgoing_security_changed (GtkComboBox *widget, gpointer user_data); +static void +on_modified_combobox_changed (GtkComboBox *widget, gpointer user_data) +{ + ModestAccountSettingsDialog *self = MODEST_ACCOUNT_SETTINGS_DIALOG (user_data); + self->modified = TRUE; +} + +static void +on_modified_entry_changed (GtkEditable *editable, gpointer user_data) +{ + ModestAccountSettingsDialog *self = MODEST_ACCOUNT_SETTINGS_DIALOG (user_data); + self->modified = TRUE; +} + +static void +on_modified_checkbox_toggled (GtkToggleButton *togglebutton, gpointer user_data) +{ + ModestAccountSettingsDialog *self = MODEST_ACCOUNT_SETTINGS_DIALOG (user_data); + self->modified = TRUE; +} + +/* Set a modified boolean whenever the widget is changed, + * so we can check for it later. + */ +static void +connect_for_modified (ModestAccountSettingsDialog *self, GtkWidget *widget) +{ + if (GTK_IS_ENTRY (widget)) { + g_signal_connect (G_OBJECT (widget), "changed", + G_CALLBACK (on_modified_entry_changed), self); + } else if (GTK_IS_COMBO_BOX (widget)) { + g_signal_connect (G_OBJECT (widget), "changed", + G_CALLBACK (on_modified_combobox_changed), self); + } else if (GTK_IS_TOGGLE_BUTTON (widget)) { + g_signal_connect (G_OBJECT (widget), "toggled", + G_CALLBACK (on_modified_checkbox_toggled), self); + } +} static void on_caption_entry_changed (GtkEditable *editable, gpointer user_data) @@ -190,6 +228,7 @@ create_page_account_details (ModestAccountSettingsDialog *self) GtkWidget *caption = create_caption_new_with_asterix (self, sizegroup, _("mcen_fi_account_title"), self->entry_account_title, NULL, HILDON_CAPTION_MANDATORY); gtk_widget_show (self->entry_account_title); + connect_for_modified (self, self->entry_account_title); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -220,6 +259,7 @@ create_page_account_details (ModestAccountSettingsDialog *self) caption = create_caption_new_with_asterix (self, sizegroup, _("mcen_fi_advsetup_retrievetype"), self->combo_retrieve, NULL, HILDON_CAPTION_MANDATORY); gtk_widget_show (self->combo_retrieve); + connect_for_modified (self, self->combo_retrieve); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -228,6 +268,7 @@ create_page_account_details (ModestAccountSettingsDialog *self) caption = create_caption_new_with_asterix (self, sizegroup, _("mcen_fi_advsetup_limit_retrieve"), self->combo_limit_retrieve, NULL, HILDON_CAPTION_MANDATORY); gtk_widget_show (self->combo_limit_retrieve); + connect_for_modified (self, self->combo_limit_retrieve); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -237,7 +278,7 @@ create_page_account_details (ModestAccountSettingsDialog *self) gtk_check_button_new_with_label (_("mcen_fi_advsetup_leave_on_server")); gtk_box_pack_start (GTK_BOX (box), self->checkbox_leave_messages, FALSE, FALSE, 2); gtk_widget_show (self->checkbox_leave_messages); - + connect_for_modified (self, self->checkbox_leave_messages); gtk_widget_show (GTK_WIDGET (box)); @@ -268,6 +309,7 @@ create_page_user_details (ModestAccountSettingsDialog *self) GtkWidget *caption = create_caption_new_with_asterix (self, sizegroup, _("mcen_li_emailsetup_name"), self->entry_user_name, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->entry_user_name); + connect_for_modified (self, self->entry_user_name); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -285,6 +327,7 @@ create_page_user_details (ModestAccountSettingsDialog *self) caption = create_caption_new_with_asterix (self, sizegroup, _("mail_fi_username"), self->entry_user_username, NULL, HILDON_CAPTION_MANDATORY); gtk_widget_show (self->entry_user_username); + connect_for_modified (self, self->entry_user_username); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -304,6 +347,7 @@ create_page_user_details (ModestAccountSettingsDialog *self) caption = create_caption_new_with_asterix (self, sizegroup, _("mail_fi_password"), self->entry_user_password, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->entry_user_password); + connect_for_modified (self, self->entry_user_password); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -313,6 +357,7 @@ create_page_user_details (ModestAccountSettingsDialog *self) _("mcen_li_emailsetup_email_address"), self->entry_user_email, NULL, HILDON_CAPTION_MANDATORY); gtk_entry_set_text (GTK_ENTRY (self->entry_user_email), EXAMPLE_EMAIL_ADDRESS); /* Default text. */ gtk_widget_show (self->entry_user_email); + connect_for_modified (self, self->entry_user_email); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -390,6 +435,7 @@ static GtkWidget* create_page_incoming (ModestAccountSettingsDialog *self) self->caption_incoming = create_caption_new_with_asterix (self, sizegroup, "Incoming Server", self->entry_incomingserver, NULL, HILDON_CAPTION_MANDATORY); gtk_widget_show (self->entry_incomingserver); + connect_for_modified (self, self->entry_incomingserver); gtk_box_pack_start (GTK_BOX (box), self->caption_incoming, FALSE, FALSE, 2); gtk_widget_show (self->caption_incoming); @@ -400,6 +446,7 @@ static GtkWidget* create_page_incoming (ModestAccountSettingsDialog *self) GtkWidget *caption = hildon_caption_new (sizegroup, _("mcen_li_emailsetup_secure_connection"), self->combo_incoming_security, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->combo_incoming_security); + connect_for_modified (self, self->combo_incoming_security); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -414,6 +461,7 @@ static GtkWidget* create_page_incoming (ModestAccountSettingsDialog *self) caption = hildon_caption_new (sizegroup, _("mcen_fi_emailsetup_port"), self->entry_incoming_port, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->entry_incoming_port); + connect_for_modified (self, self->entry_incoming_port); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -423,6 +471,7 @@ static GtkWidget* create_page_incoming (ModestAccountSettingsDialog *self) gtk_check_button_new_with_label (_("mcen_li_emailsetup_secure_authentication")); gtk_box_pack_start (GTK_BOX (box), self->checkbox_incoming_auth, FALSE, FALSE, 2); gtk_widget_show (self->checkbox_incoming_auth); + connect_for_modified (self, self->checkbox_incoming_auth); gtk_widget_show (GTK_WIDGET (box)); @@ -537,6 +586,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) GtkWidget *caption = create_caption_new_with_asterix (self, sizegroup, _("mcen_li_emailsetup_smtp"), self->entry_outgoingserver, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->entry_outgoingserver); + connect_for_modified (self, self->entry_outgoingserver); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -546,6 +596,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) caption = hildon_caption_new (sizegroup, _("mcen_li_emailsetup_secure_authentication"), self->combo_outgoing_auth, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->combo_outgoing_auth); + connect_for_modified (self, self->combo_outgoing_auth); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -557,6 +608,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) self->caption_outgoing_username = create_caption_new_with_asterix (self, sizegroup, _("mail_fi_username"), self->entry_outgoing_username, NULL, HILDON_CAPTION_MANDATORY); gtk_widget_show (self->entry_outgoing_username); + connect_for_modified (self, self->entry_outgoing_username); gtk_box_pack_start (GTK_BOX (box), self->caption_outgoing_username, FALSE, FALSE, 2); gtk_widget_show (self->caption_outgoing_username); @@ -576,6 +628,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) self->caption_outgoing_password = create_caption_new_with_asterix (self, sizegroup, _("mail_fi_password"), self->entry_outgoing_password, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->entry_outgoing_password); + connect_for_modified (self, self->entry_outgoing_password); gtk_box_pack_start (GTK_BOX (box), self->caption_outgoing_password, FALSE, FALSE, 2); gtk_widget_show (self->caption_outgoing_password); @@ -588,6 +641,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) caption = hildon_caption_new (sizegroup, _("mcen_li_emailsetup_secure_connection"), self->combo_outgoing_security, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->combo_outgoing_security); + connect_for_modified (self, self->combo_outgoing_security); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -600,6 +654,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) caption = hildon_caption_new (sizegroup, _("mcen_fi_emailsetup_port"), self->entry_outgoing_port, NULL, HILDON_CAPTION_OPTIONAL); gtk_widget_show (self->entry_outgoing_port); + connect_for_modified (self, self->entry_outgoing_port); gtk_box_pack_start (GTK_BOX (box), caption, FALSE, FALSE, 2); gtk_widget_show (caption); @@ -611,6 +666,7 @@ static GtkWidget* create_page_outgoing (ModestAccountSettingsDialog *self) } gtk_box_pack_start (GTK_BOX (box), self->checkbox_outgoing_smtp_specific, FALSE, FALSE, 2); gtk_widget_show (self->checkbox_outgoing_smtp_specific); + connect_for_modified (self, self->checkbox_outgoing_smtp_specific); /* Connection-specific SMTP-Severs Edit button: */ if (!self->button_outgoing_smtp_servers) @@ -689,8 +745,7 @@ on_response (GtkDialog *wizard_dialog, gboolean prevent_response = FALSE; /* Warn about unsaved changes: */ - /* TODO: Actually detect whether changes were made. */ - if (response_id == GTK_RESPONSE_CANCEL) { + if (response_id == GTK_RESPONSE_CANCEL && self->modified) { GtkDialog *dialog = GTK_DIALOG (gtk_message_dialog_new (GTK_WINDOW (self), (GtkDialogFlags)0, GTK_MESSAGE_INFO, @@ -774,7 +829,9 @@ modest_account_settings_dialog_init (ModestAccountSettingsDialog *self) * to stop the default signal handler from closing the dialog. */ g_signal_connect (G_OBJECT (self), "response", - G_CALLBACK (on_response), self); + G_CALLBACK (on_response), self); + + self->modified = FALSE; } ModestAccountSettingsDialog* @@ -935,6 +992,9 @@ void modest_account_settings_dialog_set_account_name (ModestAccountSettingsDialo /* account_data->store_account->proto */ modest_account_mgr_free_account_data (dialog->account_manager, account_data); + + /* Unset the modified flag so we can detect changes later: */ + dialog->modified = FALSE; } static gboolean diff --git a/src/maemo/modest-account-settings-dialog.h b/src/maemo/modest-account-settings-dialog.h index 769d622..ba4e734 100644 --- a/src/maemo/modest-account-settings-dialog.h +++ b/src/maemo/modest-account-settings-dialog.h @@ -41,6 +41,7 @@ typedef struct { * and to create new accounts: */ ModestAccountMgr *account_manager; + gboolean modified; gchar * account_name; /* This may not change. It is not user visible. */ gchar * original_account_title; diff --git a/src/modest-account-mgr-helpers.c b/src/modest-account-mgr-helpers.c index 9a71436..16b9506 100644 --- a/src/modest-account-mgr-helpers.c +++ b/src/modest-account-mgr-helpers.c @@ -121,13 +121,10 @@ modest_server_account_data_get_option_bool (GSList* options_list, const gchar* o } #endif -ModestProtocol -modest_server_account_get_secure_auth (ModestAccountMgr *self, - const gchar* account_name) +static ModestProtocol +get_secure_auth_for_conf_string(const gchar* value) { ModestProtocol result = MODEST_PROTOCOL_AUTH_NONE; - gchar* value = modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_AUTH_MECH, - TRUE /* server account */); if (value) { if (strcmp(value, MODEST_ACCOUNT_AUTH_MECH_VALUE_NONE) == 0) result = MODEST_PROTOCOL_AUTH_NONE; @@ -135,6 +132,20 @@ modest_server_account_get_secure_auth (ModestAccountMgr *self, result = MODEST_PROTOCOL_AUTH_PASSWORD; else if (strcmp(value, MODEST_ACCOUNT_AUTH_MECH_VALUE_CRAMMD5) == 0) result = MODEST_PROTOCOL_AUTH_CRAMMD5; + } + + return result; +} + +ModestProtocol +modest_server_account_get_secure_auth (ModestAccountMgr *self, + const gchar* account_name) +{ + ModestProtocol result = MODEST_PROTOCOL_AUTH_NONE; + gchar* value = modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_AUTH_MECH, + TRUE /* server account */); + if (value) { + result = get_secure_auth_for_conf_string (value); g_free (value); } @@ -142,6 +153,7 @@ modest_server_account_get_secure_auth (ModestAccountMgr *self, return result; } + void modest_server_account_set_secure_auth (ModestAccountMgr *self, const gchar* account_name, ModestProtocol secure_auth) @@ -159,13 +171,10 @@ modest_server_account_set_secure_auth (ModestAccountMgr *self, modest_account_mgr_set_string (self, account_name, MODEST_ACCOUNT_AUTH_MECH, str_value, TRUE); } -ModestProtocol -modest_server_account_get_security (ModestAccountMgr *self, - const gchar* account_name) +static ModestProtocol +get_security_for_conf_string(const gchar* value) { ModestProtocol result = MODEST_PROTOCOL_SECURITY_NONE; - gchar* value = modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_SECURITY, - TRUE /* server account */); if (value) { if (strcmp(value, MODEST_ACCOUNT_SECURITY_VALUE_NONE) == 0) result = MODEST_PROTOCOL_SECURITY_NONE; @@ -173,6 +182,20 @@ modest_server_account_get_security (ModestAccountMgr *self, result = MODEST_PROTOCOL_SECURITY_TLS; else if (strcmp(value, MODEST_ACCOUNT_SECURITY_VALUE_SSL) == 0) result = MODEST_PROTOCOL_SECURITY_SSL; + } + + return result; +} + +ModestProtocol +modest_server_account_get_security (ModestAccountMgr *self, + const gchar* account_name) +{ + ModestProtocol result = MODEST_PROTOCOL_SECURITY_NONE; + gchar* value = modest_account_mgr_get_string (self, account_name, MODEST_ACCOUNT_SECURITY, + TRUE /* server account */); + if (value) { + result = get_security_for_conf_string (value); g_free (value); } @@ -232,12 +255,24 @@ modest_account_mgr_get_server_account_data (ModestAccountMgr *self, const gchar* data->proto = modest_protocol_info_get_protocol (proto); g_free (proto); + data->port = modest_account_mgr_get_int (self, name, MODEST_ACCOUNT_PORT, TRUE); + + gchar *secure_auth_str = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_AUTH_MECH, TRUE); + data->secure_auth = get_secure_auth_for_conf_string(secure_auth_str); + g_free (secure_auth_str); + + gchar *security_str = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_SECURITY, TRUE); + data->security = get_security_for_conf_string(security_str); + g_free (security_str); + data->last_updated = modest_account_mgr_get_int (self, name, MODEST_ACCOUNT_LAST_UPDATED,TRUE); data->password = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_PASSWORD, TRUE); data->uri = modest_account_mgr_get_string (self, name, MODEST_ACCOUNT_URI,TRUE); data->options = modest_account_mgr_get_list (self, name, MODEST_ACCOUNT_OPTIONS, MODEST_CONF_VALUE_STRING, TRUE); + + return data; } diff --git a/src/modest-account-mgr-helpers.h b/src/modest-account-mgr-helpers.h index 4833182..7bc86d4 100644 --- a/src/modest-account-mgr-helpers.h +++ b/src/modest-account-mgr-helpers.h @@ -49,6 +49,8 @@ typedef struct { gchar *password; time_t last_updated; gint port; /* Or 0, if the default should be used. */ + ModestProtocol secure_auth; + ModestProtocol security; GSList *options; } ModestServerAccountData; -- 1.7.9.5