* Fixes NB#99187, don't wait for a connection to show the new folder dialog
[modest] / src / modest-ui-actions.c
index 277b9f6..9519be0 100644 (file)
@@ -1007,6 +1007,15 @@ get_info_from_header (TnyHeader *header, gboolean *is_draft, gboolean *can_open)
                *is_draft = TRUE; /* Open in editor if the message is in the Drafts folder */
        }
 
+       if (!account) {
+               TnyAccount *acc = tny_folder_get_account (folder);
+               if (acc) {
+                       account =
+                               g_strdup (modest_tny_account_get_parent_modest_account_name_for_server_account (acc));
+                       g_object_unref (acc);
+               }
+       }
+
        g_object_unref (folder);
 
        return account;
@@ -1244,7 +1253,6 @@ get_account_from_header (TnyHeader *header)
                account = tny_folder_get_account (folder);
                g_object_unref (folder);
        }
-               
        return account;
 }
 
@@ -1284,7 +1292,6 @@ open_msg_performer(gboolean canceled,
        gchar *error_msg;
        ModestProtocolType proto;
        TnyConnectionStatus status;
-       gboolean show_open_draft = FALSE;
        OpenMsgHelper *helper = NULL;
        ModestProtocol *protocol;
        ModestProtocolRegistry *protocol_registry;
@@ -1322,6 +1329,8 @@ open_msg_performer(gboolean canceled,
                error_msg = g_strdup (_("mail_ni_ui_folder_get_msg_folder_error"));
        }
 
+#ifndef MODEST_TOOLKIT_HILDON2
+       gboolean show_open_draft = FALSE;
        if (modest_protocol_registry_protocol_type_has_tag (protocol_registry,
                                                            proto,
                                                            MODEST_PROTOCOL_REGISTRY_LOCAL_STORE_PROTOCOLS)) { 
@@ -1333,6 +1342,7 @@ open_msg_performer(gboolean canceled,
                show_open_draft = (folder_type == TNY_FOLDER_TYPE_DRAFTS);
                g_object_unref (folder);
        }
+#endif
 
 #ifdef MODEST_TOOLKIT_HILDON2
        gboolean is_draft;
@@ -1380,17 +1390,17 @@ open_msg_performer(gboolean canceled,
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (),
                                         mail_op);
 
+
+#ifndef MODEST_TOOLKIT_HILDON2
        if (show_open_draft) {
                helper->banner_info = g_slice_new (OpenMsgBannerInfo);
-#ifdef MODEST_TOOLKIT_HILDON2
-               helper->banner_info->message = g_strdup (_("mail_me_opening"));
-#else
                helper->banner_info->message = g_strdup (_("mail_ib_opening_draft_message"));
-#endif
                helper->banner_info->banner = NULL;
                helper->banner_info->idle_handler = g_timeout_add (500, open_msg_banner_idle, 
                                                                   helper->banner_info);
        }
+#endif
+
 
        TnyList *headers;
        headers = TNY_LIST (tny_simple_list_new ());
@@ -3267,6 +3277,46 @@ do_create_folder_cb (ModestMailOperation *mail_op,
        g_object_unref (source_win);
 }
 
+typedef struct {
+       gchar *folder_name;
+       TnyFolderStore *parent;
+} CreateFolderConnect;
+
+static void
+do_create_folder_performer (gboolean canceled, 
+                        GError *err,
+                        GtkWindow *parent_window, 
+                        TnyAccount *account, 
+                        gpointer user_data)
+{
+       CreateFolderConnect *helper = (CreateFolderConnect *) user_data;
+       ModestMailOperation *mail_op;
+
+       if (canceled || err) {
+               /* In memory full conditions we could get this error here */
+               check_memory_full_error ((GtkWidget *) parent_window, err);
+               goto frees;
+       }
+
+       mail_op  = modest_mail_operation_new ((GObject *) parent_window);
+       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
+                                        mail_op);
+       modest_mail_operation_create_folder (mail_op,
+                                            helper->parent,
+                                            (const gchar *) helper->folder_name,
+                                            do_create_folder_cb,
+                                            g_strdup (helper->folder_name));
+       g_object_unref (mail_op);
+
+ frees:
+       if (helper->parent)
+               g_object_unref (helper->parent);
+       if (helper->folder_name)
+               g_free (helper->folder_name);
+       g_slice_free (CreateFolderConnect, helper);
+}
+
+
 static void
 do_create_folder (GtkWindow *parent_window, 
                  TnyFolderStore *suggested_parent, 
@@ -3283,46 +3333,24 @@ do_create_folder (GtkWindow *parent_window,
                                                        &parent_folder);
 
        if (result == GTK_RESPONSE_ACCEPT && parent_folder) {
-               ModestMailOperation *mail_op;
+               CreateFolderConnect *helper = (CreateFolderConnect *) g_slice_new0 (CreateFolderHelper);
+               helper->folder_name = g_strdup (folder_name);
+               helper->parent = g_object_ref (parent_folder);
 
-               mail_op  = modest_mail_operation_new ((GObject *) parent_window);
-               modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), 
-                                                mail_op);
-               modest_mail_operation_create_folder (mail_op,
-                                                    parent_folder,
-                                                    (const gchar *) folder_name,
-                                                    do_create_folder_cb,
-                                                    folder_name);
-               g_object_unref (mail_op);
+               modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window),
+                                                              TRUE,
+                                                              parent_folder,
+                                                              do_create_folder_performer,
+                                                              helper);
        }
 
+       if (folder_name)
+               g_free (folder_name);
        if (parent_folder)
                g_object_unref (parent_folder);
 }
 
 static void
-create_folder_performer (gboolean canceled, 
-                        GError *err,
-                        GtkWindow *parent_window, 
-                        TnyAccount *account, 
-                        gpointer user_data)
-{
-       TnyFolderStore *parent_folder = TNY_FOLDER_STORE (user_data);
-
-       if (canceled || err) {
-               /* In memory full conditions we could get this error here */
-               check_memory_full_error ((GtkWidget *) parent_window, err);
-               goto frees;
-       }
-
-       /* Run the new folder dialog */
-       do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
-
- frees:
-       g_object_unref (parent_folder);
-}
-
-static void
 modest_ui_actions_create_folder(GtkWidget *parent_window,
                                 GtkWidget *folder_view)
 {
@@ -3349,14 +3377,8 @@ modest_ui_actions_create_folder(GtkWidget *parent_window,
        parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view));
 #endif
 
-       if (parent_folder) {
-               /* The parent folder will be freed in the callback */
-               modest_platform_connect_if_remote_and_perform (GTK_WINDOW (parent_window),
-                                                              TRUE,
-                                                              parent_folder,
-                                                              create_folder_performer,
-                                                              parent_folder);
-       }
+       if (parent_folder)
+               do_create_folder (GTK_WINDOW (parent_window), parent_folder, NULL);
 }
 
 void
@@ -5094,32 +5116,34 @@ void
 modest_ui_actions_move_folder_error_handler (ModestMailOperation *mail_op, 
                                             gpointer user_data)
 {
+       GObject *win = NULL;
+
+#ifndef MODEST_TOOLKIT_HILDON2
        ModestWindow *main_window = NULL;
-       
+
        /* Disable next automatic folder selection */
        main_window = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (),
                                                         FALSE); /* don't create */
        if (main_window) {
-               GObject *win = NULL;
                GtkWidget *folder_view = NULL;
-       
+
                folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (main_window),
                                                                   MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); 
                modest_folder_view_disable_next_folder_selection (MODEST_FOLDER_VIEW(folder_view));
-               
+
                if (user_data && TNY_IS_FOLDER (user_data)) {
                        modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), 
                                                          TNY_FOLDER (user_data), FALSE);
                }
-
-               /* Show notification dialog only if the main window exists */
-               win = modest_mail_operation_get_source (mail_op);
-               modest_platform_run_information_dialog ((GtkWindow *) win, 
-                                                       _("mail_in_ui_folder_move_target_error"), 
-                                                       FALSE);
-               if (win)
-                       g_object_unref (win);
        }
+#endif
+       /* Show notification dialog only if the main window exists */
+       win = modest_mail_operation_get_source (mail_op);
+       modest_platform_run_information_dialog ((GtkWindow *) win, 
+                                               _("mail_in_ui_folder_move_target_error"), 
+                                               FALSE);
+       if (win)
+               g_object_unref (win);
 }
 
 static void
@@ -5768,6 +5792,10 @@ modest_ui_actions_on_edit_mode_move_to (ModestWindow *win)
                folder_view = NULL;
 
        list_to_move = modest_platform_get_list_to_move (MODEST_WINDOW (win));
+
+       if (!list_to_move)
+               return FALSE;
+
        if (tny_list_get_length (list_to_move) < 1) {
                g_object_unref (list_to_move);
                return FALSE;