2005-01-24 [colin] 1.0.0cvs10.1
authorColin Leroy <colin@colino.net>
Mon, 24 Jan 2005 08:04:34 +0000 (08:04 +0000)
committerColin Leroy <colin@colino.net>
Mon, 24 Jan 2005 08:04:34 +0000 (08:04 +0000)
* src/folderview.c
Sync with HEAD

ChangeLog-gtk2.claws
PATCHSETS
configure.ac
src/folderview.c

index 96af1e4c1f15eda8e6777a0fb2d3ab0114da2c99..7fd5a9604c4ace0d44b3483ede82307758067907 100644 (file)
@@ -1,3 +1,8 @@
+2005-01-24 [colin]     1.0.0cvs10.1
+
+       * src/folderview.c
+               Sync with HEAD
+
 2005-01-23 [colin]     1.0.0cvs9.1
 
        * src/crash.c
index b6866f7f61cbb3770618ef34a37c50f7c7fad8ba..d35fb20569172cdc526a81624ee9ec364208ee50 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.395.2.44 -r 1.395.2.45 src/summaryview.c; ) > 1.0.0cvs7.1.patchset
 ( cvs diff -u -r 1.395.2.45 -r 1.395.2.46 src/summaryview.c; cvs diff -u -r 1.1.2.15 -r 1.1.2.16 src/gtk/quicksearch.c; ) > 1.0.0cvs8.1.patchset
 ( cvs diff -u -r 1.23.2.6 -r 1.23.2.7 src/crash.c; ) > 1.0.0cvs9.1.patchset
+( cvs diff -u -r 1.207.2.25 -r 1.207.2.26 src/folderview.c; ) > 1.0.0cvs10.1.patchset
index 3deabbb0e9b1baaaa5ed9f48cce99c9cb008e1f2..914e0bd6262f9dde3e946629c58f524f40d4f78d 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=9
+EXTRA_VERSION=10
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=.1
 
index 0e133132d25b90b537c9a3749d1c0eae6e71c019..dd440f02e7766e98480dc9f6de07a3cbc31d7d06 100644 (file)
@@ -991,6 +991,51 @@ static gboolean folderview_have_unread_children(FolderView *folderview,
        return FALSE;
 }
 
+static gboolean folderview_search_matching_recursive(GtkCTree *ctree,
+                                                  GtkCTreeNode *node)
+{
+       FolderItem *item;
+
+       if (node) {
+               item = gtk_ctree_node_get_row_data(ctree, node);
+               if (item) {
+                       if (item->search_match)
+                               return TRUE;
+               }
+               node = GTK_CTREE_ROW(node)->children;
+       } else
+               node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+       while (node) {
+               if (folderview_search_matching_recursive(ctree, node) == TRUE)
+                       return TRUE;
+               node = GTK_CTREE_ROW(node)->sibling;
+       }
+
+       return FALSE;
+}
+
+static gboolean folderview_have_matching_children(FolderView *folderview,
+                                               GtkCTreeNode *node)
+{
+       GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+       if (!node)
+               node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+       if (!node)
+               return FALSE;
+
+       node = GTK_CTREE_ROW(node)->children;
+
+       while (node) {
+               if (folderview_search_matching_recursive(ctree, node) == TRUE)
+                       return TRUE;
+               node = GTK_CTREE_ROW(node)->sibling;
+       }
+
+       return FALSE;
+}
+
 static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
 {
        GtkCTree *ctree = GTK_CTREE(folderview->ctree);
@@ -1005,6 +1050,7 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
        gchar *name;
        gchar *str;
        gboolean add_unread_mark;
+       gboolean add_sub_match_mark;
        gboolean use_bold, use_color;
 
        item = gtk_ctree_node_get_row_data(ctree, node);
@@ -1084,6 +1130,16 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
        }
        name = folder_item_get_name(item);
 
+       if (!GTK_CTREE_ROW(node)->expanded) {
+               add_unread_mark = folderview_have_unread_children(
+                                       folderview, node);
+               add_sub_match_mark = folderview_have_matching_children(
+                                       folderview, node);
+       } else {
+               add_unread_mark = FALSE;
+               add_sub_match_mark = FALSE;
+       }
+
        if (item->search_match) {
                if (!searchicon) {
                        stock_pixmap_gdk(folderview->ctree, STOCK_PIXMAP_QUICKSEARCH,
@@ -1093,12 +1149,6 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
                mask = openmask = searchmask;
        }
 
-       if (!GTK_CTREE_ROW(node)->expanded &&
-           folderview_have_unread_children(folderview, node))
-               add_unread_mark = TRUE;
-       else
-               add_unread_mark = FALSE;
-
        if (item->stype == F_QUEUE && item->total_msgs > 0 &&
            prefs_common.display_folder_unread) {
                str = g_strdup_printf("%s (%d%s)", name, item->total_msgs,
@@ -1107,12 +1157,13 @@ static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
                                        xpm, mask, openxpm, openmask,
                                        FALSE, GTK_CTREE_ROW(node)->expanded);
                g_free(str);
-       } else if ((item->unread_msgs > 0 || add_unread_mark) &&
-                prefs_common.display_folder_unread) {
+       } else if (((item->unread_msgs > 0 || add_unread_mark) &&
+                   prefs_common.display_folder_unread) 
+                  || add_sub_match_mark) {
 
                if (item->unread_msgs > 0)
                        str = g_strdup_printf("%s (%d%s%s)", name, item->unread_msgs,
-                                             add_unread_mark ? "+" : "", 
+                                             add_unread_mark || add_sub_match_mark ? "+" : "", 
                                              item->unreadmarked_msgs > 0 ? "!":"");
                else
                        str = g_strdup_printf("%s (+)", name);