2004-10-03 [colin] 0.9.12cvs119.3
[claws.git] / src / summaryview.c
index d5b2811077d778fba11d2c54467f7a7538dc8948..e5928fb0056540c3dbef3ff5a59e3bb7f70b30c0 100644 (file)
@@ -1241,9 +1241,16 @@ static void summary_set_menu_sensitive(SummaryView *summaryview)
 void summary_select_prev_unread(SummaryView *summaryview)
 {
        GtkCTreeNode *node;
+       gboolean skip_cur = FALSE;
+
+       if (summaryview->displayed 
+       &&  summaryview->selected == summaryview->displayed) {
+               debug_print("skipping current\n");
+               skip_cur = TRUE;
+       }
 
        node = summary_find_prev_flagged_msg
-               (summaryview, summaryview->selected, MSG_UNREAD, TRUE);
+               (summaryview, summaryview->selected, MSG_UNREAD, skip_cur);
 
        if (!node) {
                AlertValue val = 0;
@@ -1280,9 +1287,17 @@ void summary_select_next_unread(SummaryView *summaryview)
 {
        GtkCTreeNode *node = summaryview->selected;
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+       gboolean skip_cur = FALSE;
+       
+       if (summaryview->displayed 
+       &&  summaryview->selected == summaryview->displayed) {
+               debug_print("skipping cur\n");
+               skip_cur = TRUE;
+       }
+
 
        node = summary_find_next_flagged_msg
-               (summaryview, node, MSG_UNREAD, TRUE);
+               (summaryview, node, MSG_UNREAD, skip_cur);
        
        if (node)
                summary_select_node(summaryview, node, TRUE, FALSE);
@@ -4379,9 +4394,12 @@ static gboolean summary_key_pressed(GtkWidget *widget, GdkEventKey *event,
        case GDK_Down:
                if ((node = summaryview->selected) != NULL) {
                        GtkCTreeNode *next = NULL;
-                       next = (event->keyval == GDK_Down)
-                                       ? gtkut_ctree_node_next(ctree, node)
-                                       : gtkut_ctree_node_prev(ctree, node);
+                       do {
+                               next = (event->keyval == GDK_Down)
+                                       ? gtkut_ctree_node_next(ctree, next ? next:node)
+                                       : gtkut_ctree_node_prev(ctree, next ? next:node);
+                       } while (next && !gtk_ctree_is_viewable(ctree, next));
+
                        if (next) {
                                gtk_sctree_select_with_state
                                        (GTK_SCTREE(ctree), next, event->state);