Fixes NB#78602
[modest] / src / maemo / modest-msg-view-window.c
index ddb972f..7246417 100644 (file)
@@ -1810,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)) {
@@ -1823,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) {
@@ -1920,6 +1929,53 @@ modest_msg_view_window_update_priority (ModestMsgViewWindow *window)
 
 }
 
+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)
 {
@@ -1940,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;
@@ -1947,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)
 {
@@ -1979,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 ();
@@ -2144,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);
+                       }
                }
        }
 }