Do not assume that account protocols will always return a settings dialog
authorSergio Villar Senín <svillar@igalia.com>
Thu, 26 Nov 2009 16:43:11 +0000 (17:43 +0100)
committerSergio Villar Senín <svillar@igalia.com>
Thu, 26 Nov 2009 16:48:09 +0000 (17:48 +0100)
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/modest-account-protocol.c
src/modest-tny-account-store.c
src/widgets/modest-account-view-window.c
src/widgets/modest-folder-window.c

index afeaaba..a995db2 100644 (file)
@@ -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",
index f78d7bb..26543a6 100644 (file)
@@ -478,17 +478,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: */
index 0ca4eab..61d0f31 100644 (file)
@@ -164,12 +164,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)) {
@@ -177,19 +177,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);
index bb56f71..edbd791 100644 (file)
@@ -550,11 +550,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));
+                       }
                }
        }
 }