From e2eb1f58b2cc13425c6e5a03baa7cf84071f3149 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Tue, 16 Oct 2007 15:50:24 +0000 Subject: [PATCH] * The account dialog is now modal (registered as modal in the window manager) this prevents the application "hang" when the dialog is shown bellow any other * The accounts are now really disconnected when edited and reconnected before finishing the edition pmo-trunk-r3514 --- debian/modest.install | 1 - src/maemo/easysetup/modest-easysetup-wizard.c | 2 +- src/maemo/modest-account-settings-dialog.c | 3 +- src/maemo/modest-account-view-window.c | 53 +++++++++++++++++++++++-- src/modest-tny-account-store.c | 4 +- 5 files changed, 54 insertions(+), 9 deletions(-) diff --git a/debian/modest.install b/debian/modest.install index 118bfaa..8e24a10 100644 --- a/debian/modest.install +++ b/debian/modest.install @@ -6,7 +6,6 @@ usr/share/doc/modest/* usr/share/mime/packages/* usr/share/locale/en_GB/LC_MESSAGES/* usr/share/modest/ui/* -usr/share/modest/provider-data/mcc_mapping usr/share/pixmaps/modest/* usr/share/man/man1/* etc/osso-backup/applications/modest.conf diff --git a/src/maemo/easysetup/modest-easysetup-wizard.c b/src/maemo/easysetup/modest-easysetup-wizard.c index f2d77bc..db1fb73 100644 --- a/src/maemo/easysetup/modest-easysetup-wizard.c +++ b/src/maemo/easysetup/modest-easysetup-wizard.c @@ -993,7 +993,7 @@ show_advanced_edit(gpointer user_data) ModestAccountSettingsDialog *dialog = modest_account_settings_dialog_new (); modest_account_settings_dialog_set_account_name (dialog, self->saved_account_name); - gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (self)); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog)); gtk_dialog_run (GTK_DIALOG (dialog)); diff --git a/src/maemo/modest-account-settings-dialog.c b/src/maemo/modest-account-settings-dialog.c index 875aea0..da42c8f 100644 --- a/src/maemo/modest-account-settings-dialog.c +++ b/src/maemo/modest-account-settings-dialog.c @@ -1151,8 +1151,7 @@ on_response (GtkDialog *wizard_dialog, hildon_banner_show_information(NULL, NULL, _("mcen_ib_advsetup_settings_saved")); } - } - else { + } else { hildon_banner_show_information (NULL, NULL, _("mail_ib_setting_failed")); } } diff --git a/src/maemo/modest-account-view-window.c b/src/maemo/modest-account-view-window.c index f6cb3d3..57ebd91 100644 --- a/src/maemo/modest-account-view-window.c +++ b/src/maemo/modest-account-view-window.c @@ -165,7 +165,7 @@ check_for_active_account (ModestAccountViewWindow *self, const gchar* account_na transport_account = modest_tny_account_store_get_server_account (acc_store, account_name, - TNY_ACCOUNT_TYPE_STORE); + TNY_ACCOUNT_TYPE_TRANSPORT); store_conn_status = tny_account_get_connection_status (store_account); transport_conn_status = tny_account_get_connection_status (transport_account); @@ -183,6 +183,18 @@ check_for_active_account (ModestAccountViewWindow *self, const gchar* account_na if (response == GTK_RESPONSE_OK) { /* FIXME: We should only cancel those of this account */ modest_mail_operation_queue_cancel_all (queue); + + /* Also disconnect the account */ + if (tny_account_get_connection_status (store_account) == TNY_CONNECTION_STATUS_CONNECTED) { + tny_account_cancel (store_account); + tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (store_account), + FALSE, NULL, NULL); + } + if (tny_account_get_connection_status (transport_account) == TNY_CONNECTION_STATUS_CONNECTED) { + tny_account_cancel (transport_account); + tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (transport_account), + FALSE, NULL, NULL); + } retval = TRUE; } else { retval = FALSE; @@ -260,9 +272,38 @@ on_delete_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) } static void +on_account_settings_dialog_response (GtkDialog *dialog, + gint response, + gpointer user_data) +{ + TnyAccount *store_account = NULL; + gchar* account_name = NULL; + ModestAccountViewWindowPrivate *priv = NULL; + + priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (user_data); + account_name = modest_account_view_get_selected_account (priv->account_view); + store_account = modest_tny_account_store_get_server_account (modest_runtime_get_account_store (), + account_name, + TNY_ACCOUNT_TYPE_STORE); + + /* Reconnect the store account, no need to reconnect the + transport account because it will connect when needed */ + if (tny_account_get_connection_status (store_account) == + TNY_CONNECTION_STATUS_DISCONNECTED) + tny_camel_account_set_online (TNY_CAMEL_ACCOUNT (store_account), + TRUE, NULL, NULL); + + /* Disconnect this handler */ + g_signal_handlers_disconnect_by_func (dialog, on_account_settings_dialog_response, user_data); + + /* Free */ + g_free (account_name); +} + +static void on_edit_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) { - ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self); + ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (self); gchar* account_name = modest_account_view_get_selected_account (priv->account_view); if (!account_name) @@ -277,7 +318,13 @@ on_edit_button_clicked (GtkWidget *button, ModestAccountViewWindow *self) ModestAccountSettingsDialog *dialog = modest_account_settings_dialog_new (); modest_account_settings_dialog_set_account_name (dialog, account_name); - gtk_window_set_modal (GTK_WINDOW (dialog), TRUE); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog)); + + /* When the dialog is closed, reconnect */ + g_signal_connect (dialog, "response", + G_CALLBACK (on_account_settings_dialog_response), + self); + modest_maemo_show_dialog_and_forget (GTK_WINDOW (self), GTK_DIALOG (dialog)); } diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index 41a924b..3a08292 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -539,6 +539,7 @@ show_wrong_password_dialog (TnyAccount *account) dialog = modest_account_settings_dialog_new (); modest_account_settings_dialog_set_account_name (dialog, modest_account_name); modest_account_settings_dialog_switch_to_user_info (dialog); + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog)); g_hash_table_insert (priv->account_settings_dialog_hash, g_strdup (modest_account_name), dialog); @@ -546,8 +547,7 @@ show_wrong_password_dialog (TnyAccount *account) } /* Show an explanatory temporary banner: */ - hildon_banner_show_information ( - GTK_WIDGET(dialog), NULL, _("mcen_ib_username_pw_incorrect")); + hildon_banner_show_information (GTK_WIDGET(dialog), NULL, _("mcen_ib_username_pw_incorrect")); if (created_dialog) { /* Forget it when it closes: */ -- 1.7.9.5