+2006-06-29 [colin] 2.3.1cvs44
+
+ * src/folderview.c
+ * src/folderview.h
+ * src/mainwindow.c
+ * src/summaryview.c
+ Let 'View/Go to/Next marked' work like
+ Next new & Next unread: across folders
+ Change the select_on_entry pref to do
+ what we want when changing folder
+ * src/common/utils.c
+ Fix single-quoted links
+
2006-06-29 [colin] 2.3.1cvs43
* src/gtk/gtkaspell.c
( cvs diff -u -r 1.179.2.124 -r 1.179.2.125 src/imap.c; cvs diff -u -r 1.34.2.6 -r 1.34.2.7 src/imap.h; cvs diff -u -r 1.274.2.120 -r 1.274.2.121 src/mainwindow.c; ) > 2.3.1cvs41.patchset
( cvs diff -u -r 1.179.2.125 -r 1.179.2.126 src/imap.c; ) > 2.3.1cvs42.patchset
( cvs diff -u -r 1.9.2.40 -r 1.9.2.41 src/gtk/gtkaspell.c; ) > 2.3.1cvs43.patchset
+( cvs diff -u -r 1.207.2.104 -r 1.207.2.105 src/folderview.c; cvs diff -u -r 1.20.2.11 -r 1.20.2.12 src/folderview.h; cvs diff -u -r 1.274.2.121 -r 1.274.2.122 src/mainwindow.c; cvs diff -u -r 1.395.2.221 -r 1.395.2.222 src/summaryview.c; cvs diff -u -r 1.36.2.69 -r 1.36.2.70 src/common/utils.c; ) > 2.3.1cvs44.patchset
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=43
+EXTRA_VERSION=44
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
for (ep_ = scanpos; *ep_ != '\0'; ep_++) {
if (!g_ascii_isgraph(*(const guchar *)ep_) ||
!IS_ASCII(*(const guchar *)ep_) ||
- strchr("[]{}<>\"", *ep_)) {
+ strchr("[]{}<>\"'", *ep_)) {
break;
} else if (strchr("(", *ep_)) {
parenthese_cnt++;
folderview->selected = folderview->opened = NULL;
}
+static GtkCTreeNode *folderview_find_next_marked(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->marked_msgs > 0 && item->stype != F_TRASH)
+ return node;
+ }
+
+ return NULL;
+}
+
+void folderview_select_next_marked(FolderView *folderview)
+{
+ GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+ GtkCTreeNode *node = NULL;
+ SelectOnEntry last_sel = prefs_common.select_on_entry;
+ prefs_common.select_on_entry = SELECTONENTRY_MNU;
+
+ if ((node = folderview_find_next_marked(ctree, folderview->opened))
+ != NULL) {
+ folderview_select_node(folderview, node);
+ prefs_common.select_on_entry = last_sel;
+ return;
+ }
+
+ if (!folderview->opened ||
+ folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list)) {
+ prefs_common.select_on_entry = last_sel;
+ return;
+ }
+ /* search again from the first node */
+ if ((node = folderview_find_next_marked(ctree, NULL)) != NULL)
+ folderview_select_node(folderview, node);
+ prefs_common.select_on_entry = last_sel;
+}
+
static GtkCTreeNode *folderview_find_next_unread(GtkCTree *ctree,
GtkCTreeNode *node)
{
{
GtkCTree *ctree = GTK_CTREE(folderview->ctree);
GtkCTreeNode *node = NULL;
+ SelectOnEntry last_sel = prefs_common.select_on_entry;
+ prefs_common.select_on_entry = SELECTONENTRY_UNM;
if ((node = folderview_find_next_unread(ctree, folderview->opened))
!= NULL) {
folderview_select_node(folderview, node);
+ prefs_common.select_on_entry = last_sel;
return;
}
if (!folderview->opened ||
- folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list))
+ folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list)) {
+ prefs_common.select_on_entry = last_sel;
return;
+ }
/* search again from the first node */
if ((node = folderview_find_next_unread(ctree, NULL)) != NULL)
folderview_select_node(folderview, node);
+
+ prefs_common.select_on_entry = last_sel;
+
}
static GtkCTreeNode *folderview_find_next_new(GtkCTree *ctree,
{
GtkCTree *ctree = GTK_CTREE(folderview->ctree);
GtkCTreeNode *node = NULL;
+ SelectOnEntry last_sel = prefs_common.select_on_entry;
+ prefs_common.select_on_entry = SELECTONENTRY_NUM;
if ((node = folderview_find_next_new(ctree, folderview->opened))
!= NULL) {
folderview_select_node(folderview, node);
+ prefs_common.select_on_entry = last_sel;
return;
}
if (!folderview->opened ||
- folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list))
+ folderview->opened == GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list)) {
+ prefs_common.select_on_entry = last_sel;
return;
+ }
/* search again from the first node */
if ((node = folderview_find_next_new(ctree, NULL)) != NULL)
folderview_select_node(folderview, node);
+ prefs_common.select_on_entry = last_sel;
}
FolderItem *folderview_get_selected_item(FolderView *folderview)
void folderview_unselect (FolderView *folderview);
void folderview_select_next_unread (FolderView *folderview);
void folderview_select_next_new (FolderView *folderview);
+void folderview_select_next_marked (FolderView *folderview);
FolderItem *folderview_get_selected_item(FolderView *folderview);
{"/View/Go to/Previous unread message" , M_MSG_EXIST},
{"/View/Go to/Previous new message" , M_MSG_EXIST},
{"/View/Go to/Previous marked message" , M_MSG_EXIST},
- {"/View/Go to/Next marked message" , M_MSG_EXIST},
{"/View/Go to/Previous labeled message", M_MSG_EXIST},
{"/View/Go to/Next labeled message", M_MSG_EXIST},
{"/View/Open in new window" , M_SINGLE_TARGET_EXIST},
void summary_select_next_marked(SummaryView *summaryview)
{
- GtkCTreeNode *node;
+ GtkCTreeNode *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, summaryview->selected, MSG_MARKED, TRUE);
+ (summaryview, node, MSG_MARKED, skip_cur);
+
+ if (node)
+ summary_select_node(summaryview, node, TRUE, FALSE);
+ else {
+ node = summary_find_next_flagged_msg
+ (summaryview, NULL, MSG_MARKED, FALSE);
+ if (node == NULL || node == summaryview->selected) {
+ AlertValue val = 0;
- if (!node) {
- AlertValue val;
+ 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"));
+ }
- val = alertpanel(_("No more marked messages"),
- _("No marked message found. "
- "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_MARKED, TRUE);
- }
+ if (val == G_ALERTALTERNATE) {
+ folderview_select_next_marked(summaryview->folderview);
+ return;
+ }
+ else
+ return;
+ } else
+ summary_select_node(summaryview, node, TRUE, FALSE);
- if (!node)
- alertpanel_notice(_("No marked messages."));
- else
- summary_select_node(summaryview, node, TRUE, FALSE);
+ }
}
void summary_select_prev_labeled(SummaryView *summaryview)