Fix wrong function definition, declare it before using it, and make it
[claws.git] / src / summaryview.c
index c2a9362119b163d78900abd880291df534437f15..9413a009c02a3439ff6e0ef520bbbcc80b61ed65 100644 (file)
@@ -159,6 +159,12 @@ static GtkCMCTreeNode *summary_find_msg_by_msgnum
 
 static void summary_update_status      (SummaryView            *summaryview);
 
+static void summary_select_node_real(SummaryView *summaryview, GtkCMCTreeNode *node,
+                        gint force_display, gboolean ignore_mark_read);
+
+static void summary_select_node_no_mark_read(SummaryView *summaryview, GtkCMCTreeNode *node,
+                        gint force_display);
+
 /* display functions */
 static void summary_status_show                (SummaryView            *summaryview);
 static void summary_set_column_titles  (SummaryView            *summaryview);
@@ -342,8 +348,8 @@ static gboolean summary_drag_motion_cb(GtkWidget      *widget,
 static void summary_drag_end(GtkWidget *widget,
                                          GdkDragContext *drag_context,
                                          SummaryView    *summaryview);
-/* custom compare functions for sorting */
 
+/* custom compare functions for sorting */
 static gint summary_cmp_by_mark                (GtkCMCList             *clist,
                                         gconstpointer           ptr1,
                                         gconstpointer           ptr2);
@@ -423,31 +429,31 @@ GtkTargetEntry summary_drag_types[3] =
 
 static GtkActionEntry summary_popup_entries[] =
 {
-       {"SummaryViewPopup",                            NULL, "SummaryViewPopup" },
-       {"SummaryViewPopup/ReplyTo",                    NULL, N_("Repl_y to") },
-       {"SummaryViewPopup/Mark",                       NULL, N_("_Mark") },
-       {"SummaryViewPopup/ColorLabel",                 NULL, N_("Color la_bel") },
-       {"SummaryViewPopup/Tags",                       NULL, N_("Ta_gs") },
-       {"SummaryViewPopup/CreateFilterRule",           NULL, N_("Create _filter rule") },
+       {"SummaryViewPopup",                      NULL, "SummaryViewPopup", NULL, NULL, NULL },
+       {"SummaryViewPopup/ReplyTo",              NULL, N_("Repl_y to"), NULL, NULL, NULL },
+       {"SummaryViewPopup/Mark",                 NULL, N_("_Mark"), NULL, NULL, NULL },
+       {"SummaryViewPopup/ColorLabel",           NULL, N_("Color la_bel"), NULL, NULL, NULL },
+       {"SummaryViewPopup/Tags",                 NULL, N_("Ta_gs"), NULL, NULL, NULL },
+       {"SummaryViewPopup/CreateFilterRule",     NULL, N_("Create _filter rule"), NULL, NULL, NULL },
 #ifndef GENERIC_UMPC
-       {"SummaryViewPopup/CreateProcessingRule",       NULL, N_("Create processing rule") },
+       {"SummaryViewPopup/CreateProcessingRule", NULL, N_("Create processing rule"), NULL, NULL, NULL },
 #endif
-       {"SummaryViewPopup/View",                       NULL, N_("_View") },
+       {"SummaryViewPopup/View",                 NULL, N_("_View"), NULL, NULL, NULL },
 };
 
 static const gchar *const col_label[N_SUMMARY_COLS] = {
-       "",             /* S_COL_MARK    */
-       N_("S"),        /* S_COL_STATUS  */
-       "",             /* S_COL_MIME    */
-       N_("Subject"),  /* S_COL_SUBJECT */
-       N_("From"),     /* S_COL_FROM    */
-       N_("To"),       /* S_COL_TO      */
-       N_("Date"),     /* S_COL_DATE    */
-       N_("Size"),     /* S_COL_SIZE    */
-       N_("#"),        /* S_COL_NUMBER  */
-       N_("Score"),    /* S_COL_SCORE   */
-       "",             /* S_COL_LOCKED  */
-       N_("Tags"),     /* S_COL_TAGS    */
+       "",            /* S_COL_MARK    */
+       N_("S"),       /* S_COL_STATUS  */
+       "",            /* S_COL_MIME    */
+       N_("Subject"), /* S_COL_SUBJECT */
+       N_("From"),    /* S_COL_FROM    */
+       N_("To"),      /* S_COL_TO      */
+       N_("Date"),    /* S_COL_DATE    */
+       N_("Size"),    /* S_COL_SIZE    */
+       N_("#"),       /* S_COL_NUMBER  */
+       N_("Score"),   /* S_COL_SCORE   */
+       "",            /* S_COL_LOCKED  */
+       N_("Tags"),    /* S_COL_TAGS    */
 };
 
 void summary_freeze(SummaryView *summaryview)
@@ -1558,7 +1564,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item)
                                else
                                        open_selected = 0;
                        }
-                       summary_select_node(summaryview, node, open_selected);
+                       summary_select_node_no_mark_read(summaryview, node, open_selected);
                }
 
                summary_lock(summaryview);
@@ -1814,7 +1820,10 @@ void summary_select_prev(SummaryView *summaryview)
        GtkCMCTreeNode *node = summaryview->selected;
        GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
 
-       node = gtkut_ctree_node_prev(ctree, node);
+       if (summaryview->sort_type == SORT_ASCENDING)
+               node = gtkut_ctree_node_prev(ctree, node);
+       else
+               node = gtkut_ctree_node_next(ctree, node);
 
        if (node && node != summaryview->selected)
                summary_select_node(summaryview, node, -1);
@@ -1825,7 +1834,10 @@ void summary_select_next(SummaryView *summaryview)
        GtkCMCTreeNode *node = summaryview->selected;
        GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
 
-       node = gtkut_ctree_node_next(ctree, node);
+       if (summaryview->sort_type == SORT_ASCENDING)
+               node = gtkut_ctree_node_next(ctree, node);
+       else
+               node = gtkut_ctree_node_prev(ctree, node);
 
        if (node && node != summaryview->selected)
                summary_select_node(summaryview, node, -1);
@@ -2211,8 +2223,22 @@ static gboolean summary_select_retry(void *data)
  * 1, display the corresponding message in the message view, if
  * @force_display is -1, obey prefs_common.always_show_msg.
  **/
+
 void summary_select_node(SummaryView *summaryview, GtkCMCTreeNode *node,
                         gint force_display)
+{
+       summary_select_node_real(summaryview, node, force_display, FALSE);
+
+}
+
+static void summary_select_node_no_mark_read(SummaryView *summaryview, GtkCMCTreeNode *node,
+                        gint force_display)
+{
+       summary_select_node_real(summaryview, node, force_display, TRUE);
+}
+
+static void summary_select_node_real(SummaryView *summaryview, GtkCMCTreeNode *node,
+                        gint force_display, gboolean ignore_mark_read)
 {
        GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
        gboolean display_msg;
@@ -2245,7 +2271,8 @@ void summary_select_node(SummaryView *summaryview, GtkCMCTreeNode *node,
        if (!summaryview->folder_item)
                return;
        if (node) {
-               summary_cancel_mark_read_timeout(summaryview);
+               if (!ignore_mark_read)
+                       summary_cancel_mark_read_timeout(summaryview);
                gtkut_ctree_expand_parent_all(ctree, node);
 
                summary_lock(summaryview);
@@ -4117,14 +4144,16 @@ void summary_msgs_unlock(SummaryView *summaryview)
        summary_status_show(summaryview);
 }
 
-void summary_mark_all_read(SummaryView *summaryview)
+void summary_mark_all_read(SummaryView *summaryview, gboolean ask_if_needed)
 {
        GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
        GtkCMCTreeNode *node;
        AlertValue val;
        gboolean froze = FALSE;
 
-       if (prefs_common.ask_mark_all_read) {
+       /* ask_if_needed is FALSE when user-asking is performed by caller,
+          commonly when the caller is a mark-as-read-recursive func */
+       if (ask_if_needed && prefs_common.ask_mark_all_read) {
                val = alertpanel_full(_("Mark all as read"),
                          _("Do you really want to mark all mails in this folder as read?"),
                          GTK_STOCK_NO, GTK_STOCK_YES, NULL,
@@ -4154,14 +4183,16 @@ void summary_mark_all_read(SummaryView *summaryview)
        summary_status_show(summaryview);
 }
 
-void summary_mark_all_unread(SummaryView *summaryview)
+void summary_mark_all_unread(SummaryView *summaryview, gboolean ask_if_needed)
 {
        GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
        GtkCMCTreeNode *node;
        AlertValue val;
        gboolean froze = FALSE;
 
-       if (prefs_common.ask_mark_all_read) {
+       /* ask_if_needed is FALSE when user-asking is performed by caller,
+          commonly when the caller is a mark-as-unread-recursive func */
+       if (ask_if_needed && prefs_common.ask_mark_all_read) {
                val = alertpanel_full(_("Mark all as unread"),
                          _("Do you really want to mark all mails in this folder as unread?"),
                          GTK_STOCK_NO, GTK_STOCK_YES, NULL,