2006-06-29 [colin] 2.3.1cvs44
authorColin Leroy <colin@colino.net>
Thu, 29 Jun 2006 18:16:52 +0000 (18:16 +0000)
committerColin Leroy <colin@colino.net>
Thu, 29 Jun 2006 18:16:52 +0000 (18:16 +0000)
* 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

ChangeLog
PATCHSETS
configure.ac
src/common/utils.c
src/folderview.c
src/folderview.h
src/mainwindow.c
src/summaryview.c

index adef83f937fd6b1cb5cc27ed65af0243c06ab5de..00792f6a2cb75c54aaac3804806b5d4ed202c0ba 100644 (file)
--- 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
index 61338c2ad64aa6fabe2d93a584e53f0b1c02ea4a..38c461a1ea2a4f37424e02a2041ca41263607283 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index 81cecd80033bff1f1d370c83495781bef53e275f..90ce1a8842c3cd5bb4617d426fa9445b379da497 100644 (file)
@@ -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=
 
index 89f6db7e496de6810cf4fc745f88e8268d93b06e..e1ade7b1344c47029795e86a835ef6f46cadf093 100644 (file)
@@ -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++;
index 5f5fbedea8d6989f4a982cab9505fc346426a9b8..7890aba50084dc630b163d676a921fbb7a4f9c70 100644 (file)
@@ -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)
index dd97afd9a10ed9aaab429e40e9a09d27c29fb00f..b9d71f8cbeafdec9d8875063ef0df68520ab0261 100644 (file)
@@ -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);
 
index 12504487fe8a8f4ca650d5dc2461430596005148..01d12b4e0f7336a1e52f3d06b2abbdcaeec18a40 100644 (file)
@@ -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},
index 9134d0ab8938f73554630b759511eb5eba9afb88..448ecb493b4a11c97ff454ab3af312cdbf779cb4 100644 (file)
@@ -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)