make /View/Go to/... respect the always_show_msg option, and refactor a bit
[claws.git] / src / summaryview.c
index bd622436711b634eab9453986a632a47316a5342..12c7413376fc03afa0ea73a22c5c112bc23782d4 100644 (file)
@@ -1468,7 +1468,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
                                                 item->sort_type == SORT_DESCENDING
                                                 ? 0 : GTK_CMCLIST(ctree)->rows - 1);
                                summary_unlock(summaryview);
-                               summary_select_node(summaryview, node, FALSE, TRUE);
+                               summary_select_node(summaryview, node, 0, TRUE);
                                summary_lock(summaryview);
                        }
                } else {
@@ -1547,12 +1547,8 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
                }
 
                summary_unlock(summaryview);
-               if (node) {
-                       gboolean show = (prefs_common.always_show_msg == OPENMSG_ALWAYS) ||
-                               (prefs_common.always_show_msg == OPENMSG_WHEN_VIEW_VISIBLE &&
-                                               messageview_is_visible(summaryview->messageview));
-                       summary_select_node(summaryview, node, show, TRUE);
-               }
+               if (node)
+                       summary_select_node(summaryview, node, -1, TRUE);
                summary_lock(summaryview);
        }
 
@@ -1843,7 +1839,7 @@ void summary_select_prev_unread(SummaryView *summaryview)
        if (!node)
                alertpanel_notice(_("No unread messages."));
        else
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
 }
 
 void summary_select_next_unread(SummaryView *summaryview)
@@ -1858,12 +1854,11 @@ void summary_select_next_unread(SummaryView *summaryview)
                skip_cur = TRUE;
        }
 
-
        node = summary_find_next_flagged_msg
                (summaryview, node, MSG_UNREAD, skip_cur);
        
        if (node)
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
        else {
                node = summary_find_next_flagged_msg
                        (summaryview, NULL, MSG_UNREAD, FALSE);
@@ -1891,7 +1886,7 @@ void summary_select_next_unread(SummaryView *summaryview)
                        if (val == G_ALERTALTERNATE)
                                folderview_select_next_with_flag(summaryview->folderview, MSG_UNREAD, TRUE);
                } else {
-                       summary_select_node(summaryview, node, TRUE, FALSE);
+                       summary_select_node(summaryview, node, -1, FALSE);
                }
        }
 }
@@ -1938,7 +1933,7 @@ void summary_select_prev_new(SummaryView *summaryview)
        if (!node)
                alertpanel_notice(_("No new messages."));
        else
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
 }
 
 void summary_select_next_new(SummaryView *summaryview)
@@ -1953,12 +1948,11 @@ void summary_select_next_new(SummaryView *summaryview)
                skip_cur = TRUE;
        }
 
-
        node = summary_find_next_flagged_msg
                (summaryview, node, MSG_NEW, skip_cur);
        
        if (node)
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
        else {
                node = summary_find_next_flagged_msg
                        (summaryview, NULL, MSG_NEW, FALSE);
@@ -1990,7 +1984,7 @@ void summary_select_next_new(SummaryView *summaryview)
                        else
                                return;
                } else
-                       summary_select_node(summaryview, node, TRUE, FALSE);
+                       summary_select_node(summaryview, node, -1, FALSE);
 
        }
 }
@@ -2017,7 +2011,7 @@ void summary_select_prev_marked(SummaryView *summaryview)
        if (!node)
                alertpanel_notice(_("No marked messages."));
        else
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
 }
 
 void summary_select_next_marked(SummaryView *summaryview)
@@ -2032,12 +2026,11 @@ void summary_select_next_marked(SummaryView *summaryview)
                skip_cur = TRUE;
        }
 
-
        node = summary_find_next_flagged_msg
                (summaryview, node, MSG_MARKED, skip_cur);
        
        if (node)
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
        else {
                node = summary_find_next_flagged_msg
                        (summaryview, NULL, MSG_MARKED, FALSE);
@@ -2069,7 +2062,7 @@ void summary_select_next_marked(SummaryView *summaryview)
                        else
                                return;
                } else
-                       summary_select_node(summaryview, node, TRUE, FALSE);
+                       summary_select_node(summaryview, node, -1, FALSE);
 
        }
 }
@@ -2096,7 +2089,7 @@ void summary_select_prev_labeled(SummaryView *summaryview)
        if (!node)
                alertpanel_notice(_("No labeled messages."));
        else
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
 }
 
 void summary_select_next_labeled(SummaryView *summaryview)
@@ -2121,7 +2114,7 @@ void summary_select_next_labeled(SummaryView *summaryview)
        if (!node)
                alertpanel_notice(_("No labeled messages."));
        else
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
 }
 
 void summary_select_parent(SummaryView *summaryview)
@@ -2131,7 +2124,7 @@ void summary_select_parent(SummaryView *summaryview)
        if (summaryview->selected)
                node = GTK_CMCTREE_ROW(summaryview->selected)->parent;
        if (node)
-               summary_select_node(summaryview, node, TRUE, FALSE);
+               summary_select_node(summaryview, node, -1, FALSE);
 }
 
 void summary_select_by_msgnum(SummaryView *summaryview, guint msgnum)
@@ -2139,7 +2132,7 @@ void summary_select_by_msgnum(SummaryView *summaryview, guint msgnum)
        GtkCMCTreeNode *node;
 
        node = summary_find_msg_by_msgnum(summaryview, msgnum);
-       summary_select_node(summaryview, node, FALSE, TRUE);
+       summary_select_node(summaryview, node, 0, TRUE);
 }
 
 void summary_display_by_msgnum(SummaryView *summaryview, guint msgnum)
@@ -2147,7 +2140,7 @@ void summary_display_by_msgnum(SummaryView *summaryview, guint msgnum)
        GtkCMCTreeNode *node;
 
        node = summary_find_msg_by_msgnum(summaryview, msgnum);
-       summary_select_node(summaryview, node, TRUE, FALSE);
+       summary_select_node(summaryview, node, 1, FALSE);
 }
 
 void summary_select_by_msg_list(SummaryView    *summaryview, GSList *msginfos)
@@ -2202,18 +2195,25 @@ static gboolean summary_select_retry(void *data)
  * summary_select_node:
  * @summaryview: Summary view.
  * @node: Summary tree node.
- * @display_msg: TRUE to display the selected message.
+ * @force_display: -1 unset, 0 don't show the msg, 1 show the msg.
  * @do_refresh: TRUE to refresh the widget.
  *
  * Select @node (bringing it into view by scrolling and expanding its
- * thread, if necessary) and unselect all others.  If @display_msg is
- * TRUE, display the corresponding message in the message view.
+ * thread, if necessary) and unselect all others.  If @force_display is
+ * 1, display the corresponding message in the message view, if
+ * @force_display is -1, obey prefs_common.always_show_msg.
  * If @do_refresh is TRUE, the widget is refreshed.
  **/
 void summary_select_node(SummaryView *summaryview, GtkCMCTreeNode *node,
-                        gboolean display_msg, gboolean do_refresh)
+                        gint force_display, gboolean do_refresh)
 {
        GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
+       gboolean display_msg;
+       
+       display_msg = force_display > -1? force_display :
+               (prefs_common.always_show_msg == OPENMSG_ALWAYS) ||
+               ((prefs_common.always_show_msg == OPENMSG_WHEN_VIEW_VISIBLE &&
+                               messageview_is_visible(summaryview->messageview)));
        
        if (summary_is_locked(summaryview)
        && !GTK_SCTREE(ctree)->selecting_range
@@ -4434,7 +4434,7 @@ void summary_delete(SummaryView *summaryview)
                if (!node || prefs_common.next_on_delete == FALSE)
                        node = summary_find_next_msg(summaryview, sel_last);
        }
-       summary_select_node(summaryview, node, prefs_common.always_show_msg, TRUE);
+       summary_select_node(summaryview, node, -1, TRUE);
        
        if (prefs_common.immediate_exec || folder_has_parent_of_type(item, F_TRASH)) {
                summary_execute(summaryview);
@@ -4578,10 +4578,6 @@ void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder)
        }
        END_LONG_OPERATION(summaryview);
 
-       summaryview->display_msg = (prefs_common.always_show_msg == OPENMSG_ALWAYS) ||
-               ((prefs_common.always_show_msg == OPENMSG_WHEN_VIEW_VISIBLE &&
-                               messageview_is_visible(summaryview->messageview)));
-       
        if (prefs_common.immediate_exec) {
                summary_execute(summaryview);
        } else {
@@ -4595,7 +4591,7 @@ void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder)
                        if (!node || prefs_common.next_on_delete == FALSE)
                                node = summary_find_next_msg(summaryview, sel_last);
                }
-               summary_select_node(summaryview, node, summaryview->display_msg, TRUE);
+               summary_select_node(summaryview, node, -1, TRUE);
                summary_status_show(summaryview);
        }
        
@@ -4603,7 +4599,7 @@ void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder)
                GtkCMCTreeNode *node = gtk_cmctree_node_nth (GTK_CMCTREE(summaryview->ctree), 
                                                         GTK_CMCLIST(summaryview->ctree)->rows - 1);
                if (node)
-                       summary_select_node(summaryview, node, summaryview->display_msg, TRUE);
+                       summary_select_node(summaryview, node, -1, TRUE);
        }
 
 }
@@ -8142,7 +8138,7 @@ static void summary_find_answers (SummaryView *summaryview, MsgInfo *msg)
 
        node = gtk_cmctree_node_nth(GTK_CMCTREE(summaryview->ctree), 0);
        if (node)
-               summary_select_node(summaryview, node, TRUE, TRUE);
+               summary_select_node(summaryview, node, 1, TRUE);
 }
 
 gint summaryview_export_mbox_list(SummaryView *summaryview)