(ctree,
item->sort_type == SORT_DESCENDING
? 0 : GTK_CMCLIST(ctree)->rows - 1);
- gtk_sctree_select(GTK_SCTREE(ctree), node);
- summaryview->selected = node;
- gtk_cmctree_node_moveto(ctree, node, 0, 0.5, 0);
+ summary_select_node(summaryview, node, -1);
}
} else {
/* backward compat */
void summary_select_prev_unread(SummaryView *summaryview)
{
GtkCMCTreeNode *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, skip_cur);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_UNREAD, TRUE);
+ else
+ node = summary_find_next_flagged_msg
+ (summaryview, summaryview->selected, MSG_UNREAD, TRUE);
if (!node || node == summaryview->selected) {
AlertValue val = 0;
_("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
}
if (val != G_ALERTALTERNATE) return;
- node = summary_find_prev_flagged_msg(summaryview, NULL,
- MSG_UNREAD, FALSE);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_prev_flagged_msg(summaryview, NULL,
+ MSG_UNREAD, FALSE);
+ else
+ node = summary_find_next_flagged_msg(summaryview, NULL,
+ MSG_UNREAD, FALSE);
}
if (!node)
void summary_select_next_unread(SummaryView *summaryview)
{
GtkCMCTreeNode *node = summaryview->selected;
- 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_UNREAD, skip_cur);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_next_flagged_msg
+ (summaryview, node, MSG_UNREAD, TRUE);
+ else
+ node = summary_find_prev_flagged_msg
+ (summaryview, node, MSG_UNREAD, TRUE);
if (node)
summary_select_node(summaryview, node, -1);
else {
- node = summary_find_next_flagged_msg
- (summaryview, NULL, MSG_UNREAD, FALSE);
- if (node == NULL || node == summaryview->selected) {
- AlertValue val = 0;
-
- switch (prefs_common.next_unread_msg_dialog) {
- case NEXTUNREADMSGDIALOG_ALWAYS:
- val = alertpanel(_("No more unread messages"),
- _("No unread message found. "
- "Go to next folder?"),
- GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
- break;
- case NEXTUNREADMSGDIALOG_ASSUME_YES:
- val = G_ALERTALTERNATE;
- 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_ALERTALTERNATE)
- folderview_select_next_with_flag(summaryview->folderview, MSG_UNREAD);
- } else {
- summary_select_node(summaryview, node, -1);
- }
+ AlertValue val = 0;
+
+ switch (prefs_common.next_unread_msg_dialog) {
+ case NEXTUNREADMSGDIALOG_ALWAYS:
+ val = alertpanel(_("No more unread messages"),
+ _("No unread message found. "
+ "Go to next folder?"),
+ GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_YES:
+ val = G_ALERTALTERNATE;
+ 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_ALERTALTERNATE)
+ folderview_select_next_with_flag(summaryview->folderview, MSG_UNREAD);
}
}
void summary_select_prev_new(SummaryView *summaryview)
{
GtkCMCTreeNode *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, skip_cur);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_NEW, TRUE);
+ else
+ node = summary_find_next_flagged_msg
+ (summaryview, summaryview->selected, MSG_NEW, TRUE);
if (!node || node == summaryview->selected) {
AlertValue val = 0;
_("Internal error: unexpected value for prefs_common.next_unread_msg_dialog\n"));
}
if (val != G_ALERTALTERNATE) return;
- node = summary_find_prev_flagged_msg(summaryview, NULL,
- MSG_NEW, FALSE);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_prev_flagged_msg(summaryview, NULL,
+ MSG_NEW, FALSE);
+ else
+ node = summary_find_next_flagged_msg(summaryview, NULL,
+ MSG_NEW, FALSE);
}
if (!node)
void summary_select_next_new(SummaryView *summaryview)
{
GtkCMCTreeNode *node = summaryview->selected;
- 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 (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_next_flagged_msg
+ (summaryview, node, MSG_NEW, TRUE);
+ else
+ node = summary_find_prev_flagged_msg
+ (summaryview, node, MSG_NEW, TRUE);
if (node)
summary_select_node(summaryview, node, -1);
else {
- node = summary_find_next_flagged_msg
- (summaryview, NULL, MSG_NEW, FALSE);
- if (node == NULL || node == summaryview->selected) {
- 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_NO, "+"GTK_STOCK_YES, NULL);
- break;
- case NEXTUNREADMSGDIALOG_ASSUME_YES:
- val = G_ALERTALTERNATE;
- 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_ALERTALTERNATE) {
- folderview_select_next_with_flag(summaryview->folderview, MSG_NEW);
- return;
- }
- else
- return;
- } else
- summary_select_node(summaryview, node, -1);
+ 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_NO, "+"GTK_STOCK_YES, NULL);
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_YES:
+ val = G_ALERTALTERNATE;
+ 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_ALERTALTERNATE)
+ folderview_select_next_with_flag(summaryview->folderview, MSG_NEW);
}
}
{
GtkCMCTreeNode *node;
- node = summary_find_prev_flagged_msg
- (summaryview, summaryview->selected, MSG_MARKED, TRUE);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_MARKED, TRUE);
+ else
+ node = summary_find_next_flagged_msg
+ (summaryview, summaryview->selected, MSG_MARKED, TRUE);
if (!node) {
AlertValue val;
void summary_select_next_marked(SummaryView *summaryview)
{
GtkCMCTreeNode *node = summaryview->selected;
- 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_MARKED, skip_cur);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_next_flagged_msg
+ (summaryview, node, MSG_MARKED, TRUE);
+ else
+ node = summary_find_prev_flagged_msg
+ (summaryview, node, MSG_MARKED, TRUE);
if (node)
summary_select_node(summaryview, node, -1);
else {
- node = summary_find_next_flagged_msg
- (summaryview, NULL, MSG_MARKED, FALSE);
- if (node == NULL || node == summaryview->selected) {
- AlertValue val = 0;
-
- switch (prefs_common.next_unread_msg_dialog) {
- case NEXTUNREADMSGDIALOG_ALWAYS:
- val = alertpanel(_("No more marked messages"),
- _("No marked message found. "
- "Go to next folder?"),
- GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
- break;
- case NEXTUNREADMSGDIALOG_ASSUME_YES:
- val = G_ALERTALTERNATE;
- 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_ALERTALTERNATE) {
- folderview_select_next_with_flag(summaryview->folderview, MSG_MARKED);
- return;
- }
- else
- return;
- } else
- summary_select_node(summaryview, node, -1);
+ AlertValue val = 0;
+ switch (prefs_common.next_unread_msg_dialog) {
+ case NEXTUNREADMSGDIALOG_ALWAYS:
+ val = alertpanel(_("No more marked messages"),
+ _("No marked message found. "
+ "Go to next folder?"),
+ GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
+ break;
+ case NEXTUNREADMSGDIALOG_ASSUME_YES:
+ val = G_ALERTALTERNATE;
+ 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_ALERTALTERNATE)
+ folderview_select_next_with_flag(summaryview->folderview, MSG_MARKED);
}
}
{
GtkCMCTreeNode *node;
- node = summary_find_prev_flagged_msg
- (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
+ else
+ node = summary_find_next_flagged_msg
+ (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
if (!node) {
AlertValue val;
{
GtkCMCTreeNode *node;
- node = summary_find_next_flagged_msg
- (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_next_flagged_msg
+ (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
+ else
+ node = summary_find_prev_flagged_msg
+ (summaryview, summaryview->selected, MSG_CLABEL_FLAG_MASK, TRUE);
if (!node) {
AlertValue val;
"Search from the beginning?"),
GTK_STOCK_NO, "+"GTK_STOCK_YES, NULL);
if (val != G_ALERTALTERNATE) return;
- node = summary_find_next_flagged_msg(summaryview, NULL,
- MSG_CLABEL_FLAG_MASK, TRUE);
+ if (summaryview->sort_type == SORT_ASCENDING)
+ node = summary_find_next_flagged_msg(summaryview, NULL,
+ MSG_CLABEL_FLAG_MASK, TRUE);
+ else
+ node = summary_find_prev_flagged_msg(summaryview, NULL,
+ MSG_CLABEL_FLAG_MASK, TRUE);
}
if (!node)
msginfo->msgnum);
}
-void summary_mark_as_read(SummaryView *summaryview)
+static void summary_mark_row_as_unread(SummaryView *summaryview,
+ GtkCMCTreeNode *row)
+{
+ GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ msginfo = gtk_cmctree_node_get_row_data(ctree, row);
+ cm_return_if_fail(msginfo);
+
+ if(MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags))
+ return;
+
+ summary_msginfo_set_flags(msginfo, MSG_UNREAD, 0);
+ summary_set_row_marks(summaryview, row);
+ debug_print("Message %d is marked as unread\n",
+ msginfo->msgnum);
+}
+
+void summary_mark_as_read(SummaryView *summaryview, gboolean read)
{
GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
GList *cur;
START_LONG_OPERATION(summaryview, FALSE);
folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
- summary_mark_row_as_read(summaryview,
- GTK_CMCTREE_NODE(cur->data));
+ if (read)
+ summary_mark_row_as_read(summaryview,
+ GTK_CMCTREE_NODE(cur->data));
+ else
+ summary_mark_row_as_unread(summaryview,
+ GTK_CMCTREE_NODE(cur->data));
folder_item_set_batch(summaryview->folder_item, FALSE);
END_LONG_OPERATION(summaryview);
summary_status_show(summaryview);
}
-void summary_mark_all_read(SummaryView *summaryview)
+void summary_mark_all_read(SummaryView *summaryview, gboolean read)
{
GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
GtkCMCTreeNode *node;
AlertValue val;
gboolean froze = FALSE;
+ gchar *message;
+ gchar *title;
+
+ if (read) {
+ title = _("Mark all as read");
+ message = _("Do you really want to mark all mails in this folder as read?");
+ } else {
+ title = _("Mark all as unread");
+ message = _("Do you really want to mark all mails in this folder as unread?");
+ }
if (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,
+ val = alertpanel_full(title, message,
+ GTK_STOCK_NO, GTK_STOCK_YES, NULL,
TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT);
if ((val & ~G_ALERTDISABLE) != G_ALERTALTERNATE)
folder_item_set_batch(summaryview->folder_item, TRUE);
for (node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list); node != NULL;
node = gtkut_ctree_node_next(ctree, node))
- summary_mark_row_as_read(summaryview, node);
+ if (read)
+ summary_mark_row_as_read(summaryview, node);
+ else
+ summary_mark_row_as_unread(summaryview, node);
folder_item_set_batch(summaryview->folder_item, FALSE);
for (node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list); node != NULL;
node = gtkut_ctree_node_next(ctree, node)) {
}
-static void summary_mark_row_as_unread(SummaryView *summaryview,
- GtkCMCTreeNode *row)
-{
- GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
- MsgInfo *msginfo;
-
- msginfo = gtk_cmctree_node_get_row_data(ctree, row);
- cm_return_if_fail(msginfo);
- if (MSG_IS_DELETED(msginfo->flags)) {
- procmsg_msginfo_set_to_folder(msginfo, NULL);
- summary_msginfo_unset_flags(msginfo, MSG_DELETED, 0);
- summaryview->deleted--;
- }
-
- summary_msginfo_set_flags(msginfo, MSG_UNREAD, 0);
- debug_print("Message %d is marked as unread\n",
- msginfo->msgnum);
-
- summary_set_row_marks(summaryview, row);
-}
-
void summary_mark_as_unread(SummaryView *summaryview)
{
GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
if (new_selected) {
summary_unlock(summaryview);
- gtk_sctree_select
- (GTK_SCTREE(ctree), new_selected);
+ summary_select_node(summaryview, new_selected, -1);
summary_lock(summaryview);
}
if (new_selected) {
summary_unlock(summaryview);
- gtk_sctree_select
- (GTK_SCTREE(ctree), new_selected);
+ summary_select_node(summaryview, new_selected, -1);
summary_lock(summaryview);
}
while (node && GTK_CMCTREE_ROW(node)->parent) {
focus_node = node = GTK_CMCTREE_ROW(node)->parent;
}
- gtk_sctree_select(GTK_SCTREE(ctree), focus_node);
+ summary_select_node(summaryview, node, -1);
node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list);
while (node) {
if (GTK_CMCTREE_ROW(node)->children) {
MessageView *messageview;
GtkAdjustment *adj;
gboolean mod_pressed;
- gfloat row_align = 0;
if (!event)
return TRUE;
case GDK_KEY_End: case GDK_KEY_KP_End:
next = gtk_cmctree_node_nth(ctree,
g_list_length(GTK_CMCLIST(ctree)->row_list)-1);
- row_align = 1;
break;
case GDK_KEY_Up: case GDK_KEY_KP_Up:
next = gtk_cmctree_node_nth(ctree,
case GDK_KEY_Down: case GDK_KEY_KP_Down:
next = gtk_cmctree_node_nth(ctree,
MIN(GTK_CMCLIST(ctree)->focus_row + 1, GTK_CMCLIST(ctree)->rows));
- row_align = 1;
break;
case GDK_KEY_Page_Up: case GDK_KEY_KP_Page_Up:
next = gtk_cmctree_node_nth(ctree,
(2 * GTK_CMCLIST(ctree)->clist_window_height -
GTK_CMCLIST(ctree)->row_height - CELL_SPACING) /
(2 * (GTK_CMCLIST(ctree)->row_height + CELL_SPACING))));
- row_align = 1;
break;
}
/* Deprecated - what are the non-deprecated equivalents? */
if (gtk_cmctree_node_is_visible(GTK_CMCTREE(ctree), next) != GTK_VISIBILITY_FULL)
- gtk_cmctree_node_moveto(GTK_CMCTREE(ctree), next, 0, row_align, 0);
+ gtkut_ctree_node_move_if_on_the_edge(GTK_CMCTREE(ctree), next, -1);
+ if (!mod_pressed)
+ summary_select_node(summaryview, summaryview->selected, -1);
summaryview->selected = next;
}
}
summary_watch_thread(summaryview);
}
+
void summary_toggle_show_read_messages(SummaryView *summaryview)
{
FolderItemUpdateData source;