guint action,
GtkWidget *widget);
+static void next_marked_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
+static void prev_marked_cb (MainWindow *mainwin,
+ guint action,
+ GtkWidget *widget);
+
static void goto_folder_cb (MainWindow *mainwin,
guint action,
GtkWidget *widget);
{N_("/_Summary/_Prev message"), NULL, prev_cb, 0, NULL},
{N_("/_Summary/_Next message"), NULL, next_cb, 0, NULL},
{N_("/_Summary/N_ext unread message"), NULL, next_unread_cb, 0, NULL},
+ {N_("/_Summary/Prev marked message"), NULL, prev_marked_cb, 0, NULL},
+ {N_("/_Summary/Next marked message"), NULL, next_marked_cb, 0, NULL},
{N_("/_Summary/---"), NULL, NULL, 0, "<Separator>"},
{N_("/_Summary/_Go to other folder"), "<alt>G", goto_folder_cb, 0, NULL},
{N_("/_Summary/---"), NULL, NULL, 0, "<Separator>"},
summary_select_next_unread(mainwin->summaryview);
}
+static void next_marked_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_next_marked(mainwin->summaryview);
+}
+
+static void prev_marked_cb(MainWindow *mainwin, guint action,
+ GtkWidget *widget)
+{
+ summary_select_prev_marked(mainwin->summaryview);
+}
+
static void goto_folder_cb(MainWindow *mainwin, guint action,
GtkWidget *widget)
{
static GtkCTreeNode *summary_find_next_unread_msg
(SummaryView *summaryview,
GtkCTreeNode *current_node);
+static GtkCTreeNode *summary_find_next_marked_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node);
+static GtkCTreeNode *summary_find_prev_marked_msg
+ (SummaryView *summaryview,
+ GtkCTreeNode *current_node);
static GtkCTreeNode *summary_find_msg_by_msgnum
(SummaryView *summaryview,
guint msgnum);
}
}
+void summary_select_next_marked(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+
+ node = summary_find_next_marked_msg(summaryview,
+ summaryview->selected);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more marked messages"),
+ _("No marked message found. "
+ "Search from the beginning?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_next_marked_msg(summaryview,
+ NULL);
+ }
+ if (!node) {
+ alertpanel_notice(_("No marked messages."));
+ } else {
+ gtk_sctree_unselect_all(GTK_SCTREE(ctree));
+ gtk_sctree_select(GTK_SCTREE(ctree), node);
+ if (summaryview->displayed == node)
+ summaryview->displayed = NULL;
+ summary_display_msg(summaryview, node, FALSE);
+ }
+}
+
+void summary_select_prev_marked(SummaryView *summaryview)
+{
+ GtkCTreeNode *node;
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+
+ node = summary_find_prev_marked_msg(summaryview,
+ summaryview->selected);
+
+ if (!node) {
+ AlertValue val;
+
+ val = alertpanel(_("No more marked messages"),
+ _("No marked message found. "
+ "Search from the end?"),
+ _("Yes"), _("No"), NULL);
+ if (val != G_ALERTDEFAULT) return;
+ node = summary_find_prev_marked_msg(summaryview,
+ NULL);
+ }
+ if (!node) {
+ alertpanel_notice(_("No marked messages."));
+ } else {
+ gtk_sctree_unselect_all(GTK_SCTREE(ctree));
+ gtk_sctree_select(GTK_SCTREE(ctree), node);
+ if (summaryview->displayed == node)
+ summaryview->displayed = NULL;
+ summary_display_msg(summaryview, node, FALSE);
+ }
+}
+
void summary_select_by_msgnum(SummaryView *summaryview, guint msgnum)
{
GtkCTreeNode *node;
return node;
}
+static GtkCTreeNode *summary_find_next_marked_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node)
+ node = GTK_CTREE_NODE_NEXT(current_node);
+ else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+ for (; node != NULL; node = GTK_CTREE_NODE_NEXT(node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (MSG_IS_MARKED(msginfo->flags)) break;
+ }
+
+ return node;
+}
+
+static GtkCTreeNode *summary_find_prev_marked_msg(SummaryView *summaryview,
+ GtkCTreeNode *current_node)
+{
+ GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+ GtkCTreeNode *node;
+ MsgInfo *msginfo;
+
+ if (current_node)
+ node = GTK_CTREE_NODE_PREV(current_node);
+ else
+ node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end);
+
+ for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) {
+ msginfo = gtk_ctree_node_get_row_data(ctree, node);
+ if (MSG_IS_MARKED(msginfo->flags)) break;
+ }
+
+ return node;
+}
+
static GtkCTreeNode *summary_find_msg_by_msgnum(SummaryView *summaryview,
guint msgnum)
{