* Fixes NB#74075, app hanging/crashing while creating new accounts
[modest] / src / modest-ui-actions.c
index 8c2d36f..32af30d 100644 (file)
@@ -1704,7 +1704,8 @@ do_send_receive_performer (gboolean canceled,
 
        /* Send & receive. */
        modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
-       modest_mail_operation_update_account (mail_op, info->account_name, new_messages_arrived, info->win);
+       modest_mail_operation_update_account (mail_op, info->account_name, (info->win) ? FALSE : TRUE,
+                                             new_messages_arrived, info->win);
        g_object_unref (G_OBJECT (mail_op));
        
  clean:
@@ -2197,7 +2198,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 +2218,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 +2228,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 +2282,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 +2294,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: */
@@ -2349,6 +2400,10 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
                                             data->attachments,
                                             data->images,
                                             data->priority_flags);
+
+       if (modest_mail_operation_get_status (mail_operation) == MODEST_MAIL_OPERATION_STATUS_IN_PROGRESS)
+               modest_platform_information_banner (NULL, NULL, _("mcen_ib_outbox_waiting_to_be_sent"));
+
                                             
        /* Free data: */
        g_free (from);