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;
{
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);
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);