folderview_select_node(folderview, node);
}
+static GtkCTreeNode *folderview_find_next_new(GtkCTree *ctree,
+ GtkCTreeNode *node)
+{
+ FolderItem *item;
+
+ if (node)
+ node = gtkut_ctree_node_next(ctree, node);
+ else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
+ item = gtk_ctree_node_get_row_data(ctree, node);
+ if (item && item->new_msgs > 0 && item->stype != F_TRASH)
+ return node;
+ }
+
+ return NULL;
+}
+
+void folderview_select_next_new(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *node = NULL;
+
+ if ((node = folderview_find_next_new(ctree, folderview->opened))
+ != NULL) {
+ folderview_select_node(folderview, node);
+ return;
+ }
+
+ if (!folderview->opened ||
+ folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list))
+ return;
+ /* search again from the first node */
+ if ((node = folderview_find_next_new(ctree, NULL)) != NULL)
+ folderview_select_node(folderview, node);
+}
+
FolderItem *folderview_get_selected_item(FolderView *folderview)
{
GtkCTree *ctree = GTK_CTREE(folderview->ctree);
menu = gtk_menu_new ();
MENUITEM_ADD (menu, menuitem, _("Do nothing"), 0);
- MENUITEM_ADD (menu, menuitem, _("Select first new (or unread) message"),
- SELECTONENTRY_NEW);
MENUITEM_ADD (menu, menuitem, _("Select first unread (or new) message"),
SELECTONENTRY_UNREAD);
+ MENUITEM_ADD (menu, menuitem, _("Select first new (or unread) message"),
+ SELECTONENTRY_NEW);
gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu_select_on_entry), menu);
gtk_widget_show (hbox_nextunreadmsgdialog);
gtk_box_pack_start (GTK_BOX (vbox1), hbox_nextunreadmsgdialog, FALSE, FALSE, 0);
- label = gtk_label_new (_("Show no-unread-message dialog"));
+ label = gtk_label_new (_("Show \"no unread (or new) message\" dialog"));
gtk_widget_show (label);
gtk_box_pack_start (GTK_BOX (hbox_nextunreadmsgdialog), label, FALSE, FALSE, 8);
}
if (val == G_ALERTDEFAULT) {
- g_signal_stop_emission_by_name(G_OBJECT(ctree),
- "key_press_event");
folderview_select_next_unread(summaryview->folderview);
return;
}
void summary_select_prev_new(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_NEW, FALSE);
+ (summaryview, summaryview->selected, MSG_NEW, skip_cur);
if (!node) {
- AlertValue val;
+ AlertValue val = 0;
- val = alertpanel(_("No more new messages"),
- _("No new message found. "
- "Search from the end?"),
- GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ switch (prefs_common.next_unread_msg_dialog) {
+ case NEXTUNREADMSGDIALOG_ALWAYS:
+ val = alertpanel(_("No more new messages"),
+ _("No new message found. "
+ "Search from the end?"),
+ GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_YES:
+ val = G_ALERTDEFAULT;
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_NO:
+ val = !G_ALERTDEFAULT;
+ break;
+ default:
+ debug_print(
+ _("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
+ }
if (val != G_ALERTDEFAULT) return;
node = summary_find_prev_flagged_msg(summaryview, NULL,
MSG_NEW, FALSE);
{
GtkCTreeNode *node = summaryview->selected;
GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
-
- while ((node = summary_find_next_flagged_msg
- (summaryview, node, MSG_NEW, FALSE)) == NULL) {
- AlertValue val;
-
- val = alertpanel(_("No more new messages"),
- _("No new message found. "
- "Go to next folder?"),
- GTK_STOCK_YES, _("_Search again"),
- GTK_STOCK_NO);
- if (val == G_ALERTDEFAULT) {
- g_signal_stop_emission_by_name(G_OBJECT(ctree),"key_press_event");
- folderview_select_next_unread(summaryview->folderview);
- return;
- } else if (val == G_ALERTALTERNATE)
- node = NULL;
- else
- return;
+ gboolean skip_cur = FALSE;
+
+ if (summaryview->displayed
+ && summaryview->selected == summaryview->displayed) {
+ debug_print("skipping cur (%p %p)\n",
+ summaryview->displayed, summaryview->selected);
+ skip_cur = TRUE;
}
+
+ node = summary_find_next_flagged_msg
+ (summaryview, node, MSG_NEW, skip_cur);
+
if (node)
summary_select_node(summaryview, node, TRUE, FALSE);
+ else {
+ node = summary_find_next_flagged_msg
+ (summaryview, NULL, MSG_NEW, FALSE);
+ if (node == NULL) {
+ AlertValue val = 0;
+
+ switch (prefs_common.next_unread_msg_dialog) {
+ case NEXTUNREADMSGDIALOG_ALWAYS:
+ val = alertpanel(_("No more new messages"),
+ _("No new message found. "
+ "Go to next folder?"),
+ GTK_STOCK_YES, GTK_STOCK_NO, NULL);
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_YES:
+ val = G_ALERTDEFAULT;
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_NO:
+ val = G_ALERTOTHER;
+ break;
+ default:
+ debug_print(
+ _("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
+ }
+
+ if (val == G_ALERTDEFAULT) {
+ folderview_select_next_new(summaryview->folderview);
+ return;
+ }
+ else
+ return;
+ } else
+ summary_select_node(summaryview, node, TRUE, FALSE);
+
+ }
}
void summary_select_prev_marked(SummaryView *summaryview)