From 117832661e004779dd794aa1b3ac9ed146ab3867 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sergio=20Villar=20Sen=C3=ADn?= Date: Thu, 26 Nov 2009 17:43:11 +0100 Subject: [PATCH] Do not assume that account protocols will always return a settings dialog In some cases the account protocols could return NULL, for example if the dialog is already opened by other application Helps to fix NB#129366 --- src/hildon2/modest-account-view-window.c | 21 +++++++++++++-------- src/hildon2/modest-folder-window.c | 13 ++++++++----- src/modest-account-protocol.c | 10 +++++++--- src/modest-tny-account-store.c | 15 ++++++++------- 4 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/hildon2/modest-account-view-window.c b/src/hildon2/modest-account-view-window.c index 5f3eeb0..3403b67 100644 --- a/src/hildon2/modest-account-view-window.c +++ b/src/hildon2/modest-account-view-window.c @@ -163,12 +163,12 @@ on_account_activated (GtkTreeView *account_view, ModestAccountViewWindow *self) { ModestAccountViewWindowPrivate *priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE (self); - + gchar* account_name = modest_account_view_get_path_account (priv->account_view, path); if (!account_name) return; - - /* Check whether any connections are active, and cancel them if + + /* Check whether any connections are active, and cancel them if * the user wishes. */ if (modest_ui_actions_check_for_active_account ((ModestWindow *) self, account_name)) { @@ -176,19 +176,24 @@ on_account_activated (GtkTreeView *account_view, ModestProtocolType proto_type; /* Get proto */ - proto_type = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (), + proto_type = modest_account_mgr_get_store_protocol (modest_runtime_get_account_mgr (), account_name); proto = (ModestAccountProtocol *) - modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), + modest_protocol_registry_get_protocol_by_type (modest_runtime_get_protocol_registry (), proto_type); /* Create and show the dialog */ if (proto && MODEST_IS_ACCOUNT_PROTOCOL (proto)) { ModestAccountSettingsDialog *dialog = modest_account_protocol_get_account_settings_dialog (proto, account_name); - modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), GTK_WINDOW (self)); - gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), FALSE); - gtk_widget_show (GTK_WIDGET (dialog)); + + if (dialog) { + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), + (GtkWindow *) dialog, + (GtkWindow *) self); + gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), FALSE); + gtk_widget_show (GTK_WIDGET (dialog)); + } } } g_free (account_name); diff --git a/src/hildon2/modest-folder-window.c b/src/hildon2/modest-folder-window.c index c95123d..c4a283a 100644 --- a/src/hildon2/modest-folder-window.c +++ b/src/hildon2/modest-folder-window.c @@ -531,11 +531,14 @@ edit_account (GtkButton *button, if (proto && MODEST_IS_ACCOUNT_PROTOCOL (proto)) { ModestAccountSettingsDialog *dialog = modest_account_protocol_get_account_settings_dialog (proto, account_name); - modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), - (GtkWindow *) dialog, - (GtkWindow *) self); - gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), FALSE); - gtk_widget_show (GTK_WIDGET (dialog)); + + if (dialog) { + modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), + (GtkWindow *) dialog, + (GtkWindow *) self); + gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), FALSE); + gtk_widget_show (GTK_WIDGET (dialog)); + } } } } diff --git a/src/modest-account-protocol.c b/src/modest-account-protocol.c index afeaaba..a995db2 100644 --- a/src/modest-account-protocol.c +++ b/src/modest-account-protocol.c @@ -555,12 +555,16 @@ modest_account_protocol_get_account_settings_dialog (ModestAccountProtocol *self if (dialog == NULL) { dialog = MODEST_ACCOUNT_PROTOCOL_GET_CLASS (self)->create_account_settings_dialog (self); - + + /* Check existence of dialog */ + if (dialog == NULL) + return NULL; + /* Load settings */ - settings = modest_account_mgr_load_account_settings (modest_runtime_get_account_mgr (), + settings = modest_account_mgr_load_account_settings (modest_runtime_get_account_mgr (), account_name); modest_account_settings_dialog_load_settings (dialog, settings); - + /* Close dialog on response */ g_signal_connect_swapped (dialog, "response", diff --git a/src/modest-tny-account-store.c b/src/modest-tny-account-store.c index 2dfa781..22c28fb 100644 --- a/src/modest-tny-account-store.c +++ b/src/modest-tny-account-store.c @@ -479,17 +479,18 @@ show_wrong_password_dialog (TnyAccount *account, /* Create and show the dialog */ if (proto && MODEST_IS_ACCOUNT_PROTOCOL (proto)) { - GtkWindow *parent; - ModestWindowMgr *mgr = modest_runtime_get_window_mgr (); ModestAccountSettingsDialog *dialog = modest_account_protocol_get_account_settings_dialog (proto, modest_account_name); - parent = modest_window_mgr_get_modal (mgr); - if (!parent) - parent = (GtkWindow *) modest_window_mgr_get_current_top (mgr); + if (dialog) { + ModestWindowMgr *mgr = modest_runtime_get_window_mgr (); + GtkWindow *parent = modest_window_mgr_get_modal (mgr); + if (!parent) + parent = (GtkWindow *) modest_window_mgr_get_current_top (mgr); - modest_window_mgr_set_modal (mgr, GTK_WINDOW (dialog), parent); - gtk_widget_show (GTK_WIDGET (dialog)); + modest_window_mgr_set_modal (mgr, GTK_WINDOW (dialog), parent); + gtk_widget_show (GTK_WIDGET (dialog)); + } } } /* Show an explanatory temporary banner: */ -- 1.7.9.5