If no header available and we have to show error fetching message, show
[modest] / src / modest-ui-actions.c
index d70586d..8c65b6c 100644 (file)
@@ -66,8 +66,8 @@
 #include "maemo/modest-hildon-includes.h"
 #include "maemo/modest-connection-specific-smtp-window.h"
 #endif /* !MODEST_TOOLKIT_GTK */
-#include <modest-utils.h>
 
+#include <modest-utils.h>
 #include "widgets/modest-ui-constants.h"
 #include <widgets/modest-main-window.h>
 #include <widgets/modest-msg-view-window.h>
@@ -639,7 +639,7 @@ modest_ui_actions_on_quit (GtkAction *action, ModestWindow *win)
        ModestWindowMgr *mgr = NULL;
 
 #ifdef MODEST_PLATFORM_MAEMO
-       modest_osso_save_state();
+       modest_window_mgr_save_state_for_all_windows (modest_runtime_get_window_mgr ());
 #endif /* MODEST_PLATFORM_MAEMO */
 
        g_debug ("closing down, clearing %d item(s) from operation queue",
@@ -686,9 +686,10 @@ modest_ui_actions_on_close_window (GtkAction *action, ModestWindow *win)
 void
 modest_ui_actions_add_to_contacts (GtkAction *action, ModestWindow *win)
 {
-       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (win));
-
-       modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+       if (MODEST_IS_MSG_VIEW_WINDOW (win))
+               modest_msg_view_window_add_to_contacts (MODEST_MSG_VIEW_WINDOW (win));
+       else if (MODEST_IS_MSG_EDIT_WINDOW (win))
+               modest_msg_edit_window_add_to_contacts (MODEST_MSG_EDIT_WINDOW (win));
 }
 
 void
@@ -1003,9 +1004,14 @@ modest_ui_actions_msg_retrieval_check (ModestMailOperation *mail_op,
                                if (protocol) {
                                        if (tny_account_get_connection_status (account) ==
                                            TNY_CONNECTION_STATUS_CONNECTED) {
-                                               format = modest_protocol_get_translation (protocol,
-                                                                                         MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE,
-                                                                                         subject);
+                                               if (header) {
+                                                       format = modest_protocol_get_translation (protocol,
+                                                                                                 MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE,
+                                                                                                 subject);
+                                               } else {
+                                                       format = modest_protocol_get_translation (protocol,
+                                                                                                 MODEST_PROTOCOL_TRANSLATION_MSG_NOT_AVAILABLE_LOST_HEADER);
+                                               }
                                        } else {
                                                format = g_strdup_printf (_("mail_ib_backend_server_invalid"),
                                                                          tny_account_get_hostname (account));
@@ -2151,6 +2157,27 @@ modest_ui_actions_on_sort (GtkAction *action,
        modest_utils_run_sort_dialog (GTK_WINDOW (window), MODEST_SORT_HEADERS);
 }
 
+static void
+sync_folder_cb (ModestMailOperation *mail_op,
+               TnyFolder *folder,
+               gpointer user_data)
+{
+       ModestHeaderView *header_view = (ModestHeaderView *) user_data;
+
+       if (modest_mail_operation_get_status (mail_op) == MODEST_MAIL_OPERATION_STATUS_SUCCESS) {
+               ModestWindow *parent = (ModestWindow *) modest_mail_operation_get_source (mail_op);
+
+               /* We must clear first, because otherwise set_folder will ignore */
+               /*    the change as the folders are the same */
+               modest_header_view_clear (header_view);
+               modest_header_view_set_folder (header_view, folder, TRUE, parent, NULL, NULL);
+
+               g_object_unref (parent);
+       }
+
+       g_object_unref (header_view);
+}
+
 static gboolean
 idle_refresh_folder (gpointer source)
 {
@@ -2167,18 +2194,18 @@ idle_refresh_folder (gpointer source)
                header_view = modest_header_window_get_header_view ((ModestHeaderWindow *) source);
 #else
        if (MODEST_IS_MAIN_WINDOW (source))
-               header_view = modest_main_window_get_child_widget ((ModestMainWindow *) source,
-                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW);
+               header_view = MODEST_HEADER_VIEW (modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (source),
+                                                                                      MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
 #endif
        if (header_view) {
                TnyFolder *folder = modest_header_view_get_folder (header_view);
                if (folder) {
-                       /* We must clear first, because otherwise set_folder will ignore
-                          the change as the folders are the same */
-                       modest_header_view_clear (header_view);
-                       modest_header_view_set_folder (header_view, folder, TRUE,
-                                                      (ModestWindow *) source, NULL, NULL);
+                       /* Sync the folder status */
+                       ModestMailOperation *mail_op = modest_mail_operation_new (source);
+                       modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op);
+                       modest_mail_operation_sync_folder (mail_op, folder, FALSE, sync_folder_cb, g_object_ref (header_view));
                        g_object_unref (folder);
+                       g_object_unref (mail_op);
                }
        }
 
@@ -2190,11 +2217,11 @@ update_account_cb (ModestMailOperation *self,
                   TnyList *new_headers,
                   gpointer user_data)
 {
-       GObject *source;
+       ModestWindow *top;
        gboolean show_visual_notifications;
 
-       source = modest_mail_operation_get_source (self);
-       show_visual_notifications = (source) ? FALSE : TRUE;
+       top = modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
+       show_visual_notifications = (top) ? FALSE : TRUE;
 
        /* Notify new messages have been downloaded. If the
           send&receive was invoked by the user then do not show any
@@ -2242,15 +2269,14 @@ update_account_cb (ModestMailOperation *self,
                g_object_unref (actually_new_list);
        }
 
-       if (source) {
+       if (top) {
                /* Refresh the current folder in an idle. We do this
                   in order to avoid refresh cancelations if the
                   currently viewed folder is the inbox */
                g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
                                 idle_refresh_folder,
-                                g_object_ref (source),
+                                g_object_ref (top),
                                 g_object_unref);
-               g_object_unref (source);
        }
 }
 
@@ -3180,7 +3206,7 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window)
        }
 
        /* Get the currently-active transport account for this modest account: */
-       if (strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
+       if (account_name && strcmp (account_name, MODEST_LOCAL_FOLDERS_ACCOUNT_ID) != 0) {
                transport_account =
                        TNY_TRANSPORT_ACCOUNT(modest_tny_account_store_get_server_account
                                              (modest_runtime_get_account_store (),