From: Colin Leroy Date: Thu, 29 Jun 2006 18:16:52 +0000 (+0000) Subject: 2006-06-29 [colin] 2.3.1cvs44 X-Git-Tag: rel_2_4_0~54 X-Git-Url: http://git.claws-mail.org/?p=claws.git;a=commitdiff_plain;h=b9b59d7e4d85dd6cd05fafa04b287131c2df283d 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 --- diff --git a/ChangeLog b/ChangeLog index adef83f93..00792f6a2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +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 diff --git a/PATCHSETS b/PATCHSETS index 61338c2ad..38c461a1e 100644 --- a/PATCHSETS +++ b/PATCHSETS @@ -1644,3 +1644,4 @@ ( 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 diff --git a/configure.ac b/configure.ac index 81cecd800..90ce1a884 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=3 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=43 +EXTRA_VERSION=44 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/common/utils.c b/src/common/utils.c index 89f6db7e4..e1ade7b13 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -4314,7 +4314,7 @@ gboolean get_uri_part(const gchar *start, const gchar *scanpos, 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++; diff --git a/src/folderview.c b/src/folderview.c index 5f5fbedea..7890aba50 100644 --- a/src/folderview.c +++ b/src/folderview.c @@ -777,6 +777,50 @@ void folderview_unselect(FolderView *folderview) 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) { @@ -800,19 +844,27 @@ void folderview_select_next_unread(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_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, @@ -838,19 +890,25 @@ void folderview_select_next_new(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_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) diff --git a/src/folderview.h b/src/folderview.h index dd97afd9a..b9d71f8cb 100644 --- a/src/folderview.h +++ b/src/folderview.h @@ -100,6 +100,7 @@ void folderview_select (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); diff --git a/src/mainwindow.c b/src/mainwindow.c index 12504487f..01d12b4e0 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -2112,7 +2112,6 @@ void main_window_set_menu_sensitive(MainWindow *mainwin) {"/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}, diff --git a/src/summaryview.c b/src/summaryview.c index 9134d0ab8..448ecb493 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -1613,27 +1613,56 @@ void summary_select_prev_marked(SummaryView *summaryview) 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)