Fixes NB#78602
[modest] / src / maemo / modest-msg-view-window.c
index 2b15dab..7246417 100644 (file)
@@ -35,6 +35,7 @@
 #include <tny-vfs-stream.h>
 #include "modest-marshal.h"
 #include "modest-platform.h"
+#include <modest-utils.h>
 #include <modest-maemo-utils.h>
 #include <modest-tny-msg.h>
 #include <modest-msg-view-window.h>
@@ -153,6 +154,8 @@ static void update_window_title (ModestMsgViewWindow *window);
 static gboolean set_toolbar_transfer_mode     (ModestMsgViewWindow *self); 
 static void init_window (ModestMsgViewWindow *obj);
 
+static gboolean msg_is_visible (TnyHeader *header, gboolean check_outbox);
+
 
 /* list my signals */
 enum {
@@ -198,6 +201,9 @@ struct _ModestMsgViewWindowPrivate {
 
        /* Whether this was created via the *_new_for_search_result() function. */
        gboolean is_search_result;
+
+       /* Whether the message is in outbox */
+       gboolean is_outbox;
        
        /* A reference to the @model of the header view 
         * to allow selecting previous/next messages,
@@ -392,6 +398,7 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
                                    gtk_ui_manager_get_accel_group (parent_priv->ui_manager));
        
        priv->is_search_result = FALSE;
+       priv->is_outbox = FALSE;
 
        priv->msg_view      = NULL;
        priv->header_model  = NULL;
@@ -415,13 +422,16 @@ modest_msg_view_window_init (ModestMsgViewWindow *obj)
        
        /* Init window */
        init_window (MODEST_MSG_VIEW_WINDOW(obj));
+       
        /* Set window icon */
-       window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON); 
+       window_icon = modest_platform_get_icon (MODEST_APP_MSG_VIEW_ICON, MODEST_ICON_SIZE_BIG); 
        if (window_icon) {
                gtk_window_set_icon (GTK_WINDOW (obj), window_icon);
                g_object_unref (window_icon);
-       }
-
+       }       
+       
+       hildon_program_add_window (hildon_program_get_instance(),
+                                  HILDON_WINDOW(obj));
 
        modest_window_mgr_register_help_id (modest_runtime_get_window_mgr(),
                                            GTK_WINDOW(obj),"applications_email_viewer");
@@ -524,17 +534,6 @@ set_toolbar_mode (ModestMsgViewWindow *self,
 }
 
 
-static GtkWidget *
-menubar_to_menu (GtkUIManager *ui_manager)
-{
-       GtkWidget *main_menu;
-
-       /* Get the menubar from the UI manager */
-       main_menu = gtk_ui_manager_get_widget (ui_manager, "/MenuBar");
-
-       return main_menu;
-}
-
 static void
 init_window (ModestMsgViewWindow *obj)
 {
@@ -742,7 +741,7 @@ modest_msg_view_window_construct (ModestMsgViewWindow *self,
        priv->msg_uid = g_strdup (msg_uid);
 
        /* Menubar */
-       parent_priv->menubar = menubar_to_menu (parent_priv->ui_manager);
+       parent_priv->menubar = modest_maemo_utils_get_manager_menubar_as_menu (parent_priv->ui_manager, "/MenuBar");
        hildon_window_set_menu    (HILDON_WINDOW(obj), GTK_MENU(parent_priv->menubar));
        gtk_widget_show (parent_priv->menubar);
        parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
@@ -860,16 +859,15 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
         * and change the list selection when necessary: */
 
        main_window = modest_window_mgr_get_main_window(mgr, FALSE); /* don't create */
-       if (!main_window) {
-               g_warning ("%s: BUG: no main window", __FUNCTION__);
-               return NULL;
+       if (main_window) {
+               header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget(
+                                                        MODEST_MAIN_WINDOW(main_window),
+                                                        MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
        }
        
-       header_view = MODEST_HEADER_VIEW(modest_main_window_get_child_widget(
-                                                MODEST_MAIN_WINDOW(main_window),
-                                                MODEST_MAIN_WINDOW_WIDGET_TYPE_HEADER_VIEW));
        if (header_view != NULL){
                header_folder = modest_header_view_get_folder(header_view);
+               priv->is_outbox = (modest_tny_folder_guess_folder_type (header_folder) == TNY_FOLDER_TYPE_OUTBOX);
                g_assert(header_folder != NULL);
                priv->header_folder_id = tny_folder_get_id(header_folder);
                g_assert(priv->header_folder_id != NULL);
@@ -877,9 +875,14 @@ modest_msg_view_window_new_with_header_model (TnyMsg *msg,
        }
 
        priv->header_model = g_object_ref(model);
-       priv->row_reference = gtk_tree_row_reference_copy (row_reference);
-       priv->next_row_reference = gtk_tree_row_reference_copy (row_reference);
-       select_next_valid_row (model, &(priv->next_row_reference), TRUE);
+       if (row_reference) {
+               priv->row_reference = gtk_tree_row_reference_copy (row_reference);
+               priv->next_row_reference = gtk_tree_row_reference_copy (row_reference);
+               select_next_valid_row (model, &(priv->next_row_reference), TRUE);
+       } else {
+               priv->row_reference = NULL;
+               priv->next_row_reference = NULL;
+       }
 
        priv->row_changed_handler = g_signal_connect(
                        GTK_TREE_MODEL(model), "row-changed",
@@ -936,7 +939,9 @@ modest_msg_view_window_new_for_search_result (TnyMsg *msg,
        priv->is_search_result = TRUE;
 
        tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+       
        update_window_title (window);
+       modest_msg_view_window_update_priority (window);
 
        return MODEST_WINDOW(window);
 }
@@ -1006,11 +1011,13 @@ void modest_msg_view_window_on_row_inserted(
         * msg-view is in it, and thus we do not need any actions but
         * to check the dimming rules.*/
        if(priv->header_model != NULL){
-               gtk_tree_row_reference_free(priv->next_row_reference);
-               priv->next_row_reference = gtk_tree_row_reference_copy(
+               if (priv->row_reference) {
+                       gtk_tree_row_reference_free(priv->next_row_reference);
+                       priv->next_row_reference = gtk_tree_row_reference_copy(
                                priv->row_reference);
-               select_next_valid_row (priv->header_model,
-                               &(priv->next_row_reference), FALSE);
+                       select_next_valid_row (priv->header_model,
+                                              &(priv->next_row_reference), FALSE);
+               }
                modest_ui_actions_check_toolbar_dimming_rules (
                                MODEST_WINDOW (window));
                return;
@@ -1022,12 +1029,16 @@ void modest_msg_view_window_on_row_inserted(
        gtk_tree_model_get (new_model, tree_iter, 
                        TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, &header, -1);
        uid = modest_tny_folder_get_header_unique_id(header);
-       g_object_unref(G_OBJECT(header));
-       header = NULL;
        if(!g_str_equal(priv->msg_uid, uid)){
                g_free(uid);
+               g_object_unref(G_OBJECT(header));
+               header = NULL;
                return;
        }
+       if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
+               tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
+       g_object_unref(G_OBJECT(header));
+       header = NULL;
        g_free(uid);
 
        /* Setup row_reference for the actual msg. */
@@ -1124,9 +1135,11 @@ void modest_msg_view_window_update_model_replaced(
        priv->rows_reordered_handler = 0;
        g_object_unref(priv->header_model);
        priv->header_model = NULL;
-       g_object_unref(priv->row_reference);
+       if (priv->row_reference)
+               g_object_unref(priv->row_reference);
        priv->row_reference = NULL;
-       g_object_unref(priv->next_row_reference);
+       if (priv->next_row_reference)
+               g_object_unref(priv->next_row_reference);
        priv->next_row_reference = NULL;
 
        modest_ui_actions_check_toolbar_dimming_rules(MODEST_WINDOW(window));
@@ -1168,7 +1181,7 @@ modest_msg_view_window_get_header (ModestMsgViewWindow *self)
        /* If the message was not obtained from a treemodel,
         * for instance if it was opened directly by the search UI:
         */
-       if (priv->header_model == NULL) {
+       if (priv->header_model == NULL || priv->row_reference == NULL) {
                msg = modest_msg_view_window_get_message (self);
                if (msg) {
                        header = tny_msg_get_header (msg);
@@ -1244,9 +1257,9 @@ modest_msg_view_window_toggle_find_toolbar (GtkToggleAction *toggle,
 
        /* update the toggle buttons status */
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/ToolBar/FindInMessage");
-       modest_maemo_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
+       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, "/MenuBar/ToolsMenu/ToolsFindInMessageMenu");
-       modest_maemo_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
+       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action), is_active);
        
 }
 
@@ -1459,7 +1472,7 @@ modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
        /*if no model (so no rows at all), then virtually we are the last*/
-       if (!priv->header_model)
+       if (!priv->header_model || !priv->row_reference)
                return TRUE;
 
        path = gtk_tree_row_reference_get_path (priv->row_reference);
@@ -1476,7 +1489,7 @@ modest_msg_view_window_last_message_selected (ModestMsgViewWindow *window)
                                TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                &header, -1);
                if (header) {
-                       if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
+                       if (msg_is_visible (header, priv->is_outbox))
                                is_last_selected = FALSE;
                        g_object_unref(G_OBJECT(header));
                }
@@ -1507,6 +1520,14 @@ modest_msg_view_window_is_search_result (ModestMsgViewWindow *window)
        return priv->is_search_result;
 }
 
+static gboolean
+msg_is_visible (TnyHeader *header, gboolean check_outbox)
+{
+       return (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED)) &&
+               ( (!check_outbox) || (modest_tny_all_send_queues_get_msg_status (header) != MODEST_TNY_SEND_QUEUE_FAILED)) ;
+       
+}
+
 gboolean
 modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
 {
@@ -1520,7 +1541,7 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
        /*if no model (so no rows at all), then virtually we are the first*/
-       if (!priv->header_model)
+       if (!priv->header_model || !priv->row_reference)
                return TRUE;
 
        path = gtk_tree_row_reference_get_path (priv->row_reference);
@@ -1548,7 +1569,7 @@ modest_msg_view_window_first_message_selected (ModestMsgViewWindow *window)
                                TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                &header, -1);
                if (header) {
-                       if (!(tny_header_get_flags(header) & TNY_HEADER_FLAG_DELETED))
+                       if (msg_is_visible (header, priv->is_outbox))
                                is_first_selected = FALSE;
                        g_object_unref(G_OBJECT(header));
                }
@@ -1646,6 +1667,9 @@ modest_msg_view_window_select_next_message (ModestMsgViewWindow *window)
        g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), FALSE);
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
+       if (!priv->row_reference)
+               return FALSE;
+
        /* Update the next row reference if it's not valid. This could
           happen if for example the header which it was pointing to,
           was deleted. The best place to do it is in the row-deleted
@@ -1708,7 +1732,7 @@ modest_msg_view_window_select_first_message (ModestMsgViewWindow *self)
                            TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                            &header, -1);
        g_return_val_if_fail (TNY_IS_HEADER (header), FALSE);
-       if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED) {
+       if (!msg_is_visible (header, priv->is_outbox)) {
                g_object_unref (header);
                return modest_msg_view_window_select_next_message (self);
        }
@@ -1737,7 +1761,7 @@ modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
        /* Return inmediatly if there is no header model */
-       if (!priv->header_model)
+       if (!priv->header_model || !priv->row_reference)
                return FALSE;
 
        path = gtk_tree_row_reference_get_path (priv->row_reference);
@@ -1751,7 +1775,7 @@ modest_msg_view_window_select_previous_message (ModestMsgViewWindow *window)
                                    &header, -1);
                if (!header)
                        break;
-               if (tny_header_get_flags (header) & TNY_HEADER_FLAG_DELETED) {
+               if (!msg_is_visible (header, priv->is_outbox)) {
                        g_object_unref (header);
                        continue;
                }
@@ -1786,6 +1810,11 @@ view_msg_cb (ModestMailOperation *mail_op,
        ModestMsgViewWindowPrivate *priv = NULL;
        GtkTreeRowReference *row_reference = NULL;
 
+       if (canceled) {
+               g_object_unref (self);
+               return;
+       }
+       
        /* If there was any error */
        row_reference = (GtkTreeRowReference *) user_data;
        if (!modest_ui_actions_msg_retrieval_check (mail_op, header, msg)) {
@@ -1799,21 +1828,25 @@ view_msg_cb (ModestMailOperation *mail_op,
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
 
        /* Update the row reference */
-       gtk_tree_row_reference_free (priv->row_reference);
-       priv->row_reference = gtk_tree_row_reference_copy (row_reference);
-       priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference);
-       select_next_valid_row (priv->header_model, &(priv->next_row_reference), TRUE);
-       gtk_tree_row_reference_free (row_reference);
+       if (priv->row_reference != NULL) {
+               gtk_tree_row_reference_free (priv->row_reference);
+               priv->row_reference = gtk_tree_row_reference_copy (row_reference);
+               priv->next_row_reference = gtk_tree_row_reference_copy (priv->row_reference);
+               select_next_valid_row (priv->header_model, &(priv->next_row_reference), TRUE);
+               gtk_tree_row_reference_free (row_reference);
+       }
 
        /* Mark header as read */
        if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_SEEN))
                tny_header_set_flag (header, TNY_HEADER_FLAG_SEEN);
 
        /* Set new message */
-       tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
-       modest_msg_view_window_update_priority (self);
-       update_window_title (MODEST_MSG_VIEW_WINDOW (self));
-       modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
+       if (priv->msg_view != NULL && TNY_IS_MSG_VIEW (priv->msg_view)) {
+               tny_msg_view_set_msg (TNY_MSG_VIEW (priv->msg_view), msg);
+               modest_msg_view_window_update_priority (self);
+               update_window_title (MODEST_MSG_VIEW_WINDOW (self));
+               modest_msg_view_grab_focus (MODEST_MSG_VIEW (priv->msg_view));
+       }
 
        /* Set the new message uid of the window  */
        if (priv->msg_uid) {
@@ -1860,12 +1893,12 @@ static void
 modest_msg_view_window_update_priority (ModestMsgViewWindow *window)
 {
        ModestMsgViewWindowPrivate *priv;
+       TnyHeader *header = NULL;
        TnyHeaderFlags flags = 0;
 
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
 
-       if (priv->header_model) {
-               TnyHeader *header;
+       if (priv->header_model && priv->row_reference) {
                GtkTreeIter iter;
                GtkTreePath *path = NULL;
 
@@ -1877,17 +1910,72 @@ modest_msg_view_window_update_priority (ModestMsgViewWindow *window)
 
                gtk_tree_model_get (priv->header_model, &iter, TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN,
                                    &header, -1);
-               if (header) {
-                       flags = tny_header_get_flags (header);
-                       g_object_unref(G_OBJECT(header));
-               }
                gtk_tree_path_free (path);
+       } else {
+               TnyMsg *msg;
+               msg = tny_msg_view_get_msg (TNY_MSG_VIEW (priv->msg_view));
+               if (msg) {
+                       header = tny_msg_get_header (msg);
+                       g_object_unref (msg);
+               }
+       }
+
+       if (header) {
+               flags = tny_header_get_flags (header);
+               g_object_unref(G_OBJECT(header));
        }
 
        modest_msg_view_set_priority (MODEST_MSG_VIEW(priv->msg_view), flags);
 
 }
 
+static void
+toolbar_resize (ModestMsgViewWindow *self)
+{
+       ModestMsgViewWindowPrivate *priv = NULL;
+       ModestWindowPrivate *parent_priv = NULL;
+       GtkWidget *widget;
+       gint static_button_size;
+       ModestWindowMgr *mgr;
+
+       g_return_if_fail (MODEST_IS_MSG_VIEW_WINDOW (self));
+       priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+       parent_priv = MODEST_WINDOW_GET_PRIVATE(self);
+
+       mgr = modest_runtime_get_window_mgr ();
+       static_button_size = modest_window_mgr_get_fullscreen_mode (mgr)?118:108;
+
+       if (parent_priv->toolbar) {
+               /* left size buttons */
+               widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageReply");
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+               widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageMoveTo");
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+               widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarDeleteMessage");
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+               widget = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/FindInMessage");
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), FALSE);
+               gtk_widget_set_size_request (GTK_WIDGET (widget), static_button_size, -1);
+               
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), FALSE);
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->next_toolitem), TRUE);
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->next_toolitem), TRUE);
+               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->prev_toolitem), TRUE);
+               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->prev_toolitem), TRUE);
+       }
+               
+}
+
 static gboolean
 modest_msg_view_window_window_state_event (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata)
 {
@@ -1908,6 +1996,7 @@ modest_msg_view_window_window_state_event (GtkWidget *widget, GdkEventWindowStat
                if (is_fullscreen != active) {
                        gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (fs_toggle_action), is_fullscreen);
                }
+               toolbar_resize (MODEST_MSG_VIEW_WINDOW (widget));
        }
 
        return FALSE;
@@ -1915,16 +2004,6 @@ modest_msg_view_window_window_state_event (GtkWidget *widget, GdkEventWindowStat
 }
 
 static void
-set_homogeneous (GtkWidget *widget,
-                gpointer data)
-{
-       if (GTK_IS_TOOL_ITEM (widget)) {
-               gtk_tool_item_set_expand (GTK_TOOL_ITEM (widget), TRUE);
-               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (widget), TRUE);
-       }
-}
-
-static void
 modest_msg_view_window_show_toolbar (ModestWindow *self,
                                     gboolean show_toolbar)
 {
@@ -1947,18 +2026,11 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
                                                                  "/ToolBar");
                gtk_widget_set_no_show_all (parent_priv->toolbar, TRUE);
 
-               /* Set homogeneous toolbar */
-               gtk_container_foreach (GTK_CONTAINER (parent_priv->toolbar), 
-                                      set_homogeneous, NULL);
-
                priv->progress_toolitem = GTK_WIDGET (gtk_tool_item_new ());
                priv->cancel_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarCancel");
                priv->next_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageNext");
                priv->prev_toolitem = gtk_ui_manager_get_widget (parent_priv->ui_manager, "/ToolBar/ToolbarMessageBack");
-               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
-               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->progress_toolitem), TRUE);
-               gtk_tool_item_set_homogeneous (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
-               gtk_tool_item_set_expand (GTK_TOOL_ITEM (priv->cancel_toolitem), FALSE);
+               toolbar_resize (MODEST_MSG_VIEW_WINDOW (self));
 
                /* Add ProgressBar (Transfer toolbar) */ 
                priv->progress_bar = modest_progress_bar_widget_new ();
@@ -2015,7 +2087,7 @@ modest_msg_view_window_show_toolbar (ModestWindow *self,
                action_name = "/MenuBar/ViewMenu/ViewShowToolbarMenu/ViewShowToolbarNormalScreenMenu";
 
        action = gtk_ui_manager_get_action (parent_priv->ui_manager, action_name);
-       modest_maemo_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action),
+       modest_utils_toggle_action_set_active_block_notify (GTK_TOGGLE_ACTION (action),
                                                            show_toolbar);
 }
 
@@ -2112,14 +2184,15 @@ on_mail_operation_started (ModestMailOperation *mail_op,
        priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
        op_type = modest_mail_operation_get_type_operation (mail_op);
        tmp = priv->progress_widgets;
-       
-       if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE || op_type == MODEST_MAIL_OPERATION_TYPE_OPEN ) {
-               set_toolbar_transfer_mode(self);
-               while (tmp) {
-                       modest_progress_object_add_operation (
-                                       MODEST_PROGRESS_OBJECT (tmp->data),
-                                       mail_op);
-                       tmp = g_slist_next (tmp);
+       if (G_OBJECT (self) == modest_mail_operation_get_source(mail_op)) {
+               if (op_type == MODEST_MAIL_OPERATION_TYPE_RECEIVE || op_type == MODEST_MAIL_OPERATION_TYPE_OPEN ) {
+                       set_toolbar_transfer_mode(self);
+                       while (tmp) {
+                               modest_progress_object_add_operation (
+                                               MODEST_PROGRESS_OBJECT (tmp->data),
+                                               mail_op);
+                               tmp = g_slist_next (tmp);
+                       }
                }
        }
 }
@@ -2255,8 +2328,8 @@ modest_msg_view_window_view_attachment (ModestMsgViewWindow *window, TnyMimePart
                const gchar *att_filename = tny_mime_part_get_filename (mime_part);
                const gchar *content_type;
                TnyFsStream *temp_stream = NULL;
-               temp_stream = modest_maemo_utils_create_temp_stream (att_filename, attachment_uid,
-                                                                    &filepath);
+               temp_stream = modest_utils_create_temp_stream (att_filename, attachment_uid,
+                                                              &filepath);
                
                if (temp_stream != NULL) {
                        content_type = tny_mime_part_get_content_type (mime_part);
@@ -2413,8 +2486,8 @@ save_mime_parts_to_file_with_checks (SaveMimePartInfo *info)
 
         for (iter = files; (iter != NULL) && (replaced_files < 2); iter = g_list_next(iter)) {
                 SaveMimePartPair *pair = iter->data;
-                if (modest_maemo_utils_file_exists (pair->filename)) {
-                        replaced_files++;
+                if (modest_utils_file_exists (pair->filename)) {
+                       replaced_files++;
                 }
         }
        if (replaced_files) {
@@ -2500,7 +2573,7 @@ modest_msg_view_window_save_attachments (ModestMsgViewWindow *window, GList *mim
        if (gtk_dialog_run (GTK_DIALOG (save_dialog)) == GTK_RESPONSE_OK) {
                gchar *chooser_uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (save_dialog));
 
-               if (!modest_maemo_utils_folder_writable (chooser_uri)) {
+               if (!modest_utils_folder_writable (chooser_uri)) {
                        hildon_banner_show_information 
                                (NULL, NULL, dgettext("hildon-fm", "sfil_ib_readonly_location"));
                } else {