Don't wait till the message is completely saved to show the 'Saved to drafts' banner
[modest] / src / modest-ui-actions.c
index 8c2d36f..9708e5c 100644 (file)
@@ -2197,7 +2197,18 @@ on_save_to_drafts_cb (ModestMailOperation *mail_op,
                      gpointer user_data)
 {
        ModestMsgEditWindow *edit_window;
-       char *info_text;
+       ModestMainWindow *win;
+
+       /* FIXME. Make the header view sensitive again. This is a
+        * temporary hack. See modest_ui_actions_on_save_to_drafts()
+        * for details */
+       win = MODEST_MAIN_WINDOW(modest_window_mgr_get_main_window(
+                                        modest_runtime_get_window_mgr(), FALSE));
+       if (win != NULL) {
+               GtkWidget *hdrview = modest_main_window_get_child_widget(
+                       win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+               if (hdrview) gtk_widget_set_sensitive(hdrview, TRUE);
+       }
 
        edit_window = MODEST_MSG_EDIT_WINDOW (user_data);
 
@@ -2206,9 +2217,6 @@ on_save_to_drafts_cb (ModestMailOperation *mail_op,
                return;
 
        modest_msg_edit_window_set_draft (edit_window, saved_draft);
-       info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts"));
-       modest_platform_information_banner (NULL, NULL, info_text);
-       g_free (info_text);
 }
 
 void
@@ -2219,6 +2227,7 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
        MsgData *data;
        gchar *account_name, *from;
        ModestAccountMgr *account_mgr;
+       char *info_text;
 
        g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW(edit_window));
        
@@ -2272,7 +2281,11 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
                                              data->priority_flags,
                                              on_save_to_drafts_cb,
                                              edit_window);
+       info_text = g_strdup_printf (_("mail_va_saved_to_drafts"), _("mcen_me_folder_drafts"));
+       modest_platform_information_banner (NULL, NULL, info_text);
+
        /* Frees */
+       g_free (info_text);
        g_free (from);
        g_free (account_name);
        g_object_unref (G_OBJECT (transport_account));
@@ -2280,6 +2293,43 @@ modest_ui_actions_on_save_to_drafts (GtkWidget *widget, ModestMsgEditWindow *edi
 
        modest_msg_edit_window_free_msg_data (edit_window, data);
        modest_msg_edit_window_reset_modified (edit_window);
+
+       /* ** FIXME **
+        * If the drafts folder is selected then make the header view
+        * insensitive while the message is being saved to drafts
+        * (it'll be sensitive again in on_save_to_drafts_cb()). This
+        * is not very clean but it avoids letting the drafts folder
+        * in an inconsistent state: the user could edit the message
+        * being saved and undesirable things would happen.
+        * In the average case the user won't notice anything at
+        * all. In the worst case (the user is editing a really big
+        * file from Drafts) the header view will be insensitive
+        * during the saving process (10 or 20 seconds, depending on
+        * the message). Anyway this is just a quick workaround: once
+        * we find a better solution it should be removed
+        * See NB#65125 (commend #18) for details.
+        */
+       ModestMainWindow *win = MODEST_MAIN_WINDOW(modest_window_mgr_get_main_window(
+               modest_runtime_get_window_mgr(), FALSE));
+       if (win != NULL) {
+               ModestFolderView *view = MODEST_FOLDER_VIEW(modest_main_window_get_child_widget(
+                       win, MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW));
+               if (view != NULL) {
+                       TnyFolder *folder = TNY_FOLDER(modest_folder_view_get_selected(view));
+                       if (folder) {
+                               if (modest_tny_folder_is_local_folder(folder)) {
+                                       TnyFolderType folder_type;
+                                       folder_type = modest_tny_folder_get_local_or_mmc_folder_type(folder);
+                                       if (folder_type == TNY_FOLDER_TYPE_DRAFTS) {
+                                               GtkWidget *hdrview = modest_main_window_get_child_widget(
+                                                       win, MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+                                               if (hdrview) gtk_widget_set_sensitive(hdrview, FALSE);
+                                       }
+                               }
+                       }
+                       if (folder != NULL) g_object_unref(folder);
+               }
+       }
 }
 
 /* For instance, when clicking the Send toolbar button when editing a message: */