gtk_clist_freeze(GTK_CLIST(ctree));
text[col_pos[F_COL_FOLDER]] = item->name;
- child = gtk_ctree_insert_node
+ child = gtk_sctree_insert_node
(ctree, node, NULL, text,
FOLDER_SPACING,
folderxpm, folderxpmmask,
GtkCTreeNode *node;
gint new_msgs = 0;
gint former_new_msgs = 0;
- gint former_new = 0;
+ gint former_new = 0, former_unread = 0, former_total;
for (list = folderview_list; list != NULL; list = list->next) {
folderview = (FolderView *)list->data;
if (!item->prefs->newmailcheck) continue;
folderview_scan_tree_func(item->folder, item, NULL);
- former_new = item->new_msgs;
+ former_new = item->new_msgs;
+ former_unread = item->unread_msgs;
+ former_total = item->total_msgs;
if (folder_item_scan(item) < 0) {
summaryview_unlock(folderview->summaryview, item);
break;
}
- folderview_update_node(folderview, node);
+ if (former_new != item->new_msgs ||
+ former_unread != item->unread_msgs ||
+ former_total != item->total_msgs)
+ folderview_update_node(folderview, node);
+
new_msgs += item->new_msgs;
former_new_msgs += former_new;
}
return folderview_have_matching_children_sub(folderview, item, FALSE);
}
+static gboolean folderview_have_marked_children_sub(FolderView *folderview,
+ FolderItem *item,
+ gboolean in_sub)
+{
+ GNode *node = NULL;
+
+ if (!item || !item->folder || !item->folder->node)
+ return FALSE;
+
+ node = item->folder->node;
+
+ node = g_node_find(node, G_PRE_ORDER, G_TRAVERSE_ALL, item);
+ node = node->children;
+
+ if (item->marked_msgs != 0) {
+ return TRUE;
+ }
+
+ while (node != NULL) {
+ if (node && node->data) {
+ FolderItem *next_item = (FolderItem*) node->data;
+ node = node->next;
+ if (folderview_have_marked_children_sub(folderview,
+ next_item, TRUE))
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static gboolean folderview_have_marked_children(FolderView *folderview,
+ FolderItem *item)
+{
+ return folderview_have_marked_children_sub(folderview, item, FALSE);
+}
+
static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node)
{
GtkCTree *ctree = GTK_CTREE(folderview->ctree);
item = gtk_ctree_node_get_row_data(ctree, node);
g_return_if_fail(item != NULL);
- mark = (item->marked_msgs != 0);
+ if (!GTK_CTREE_ROW(node)->expanded)
+ mark = folderview_have_marked_children(folderview, item);
+ else
+ mark = (item->marked_msgs != 0);
stype = item->stype;
if (stype == F_NORMAL) {
prefs_common.display_folder_unread) {
str = g_strdup_printf("%s (%d%s)", name, item->total_msgs,
add_unread_mark ? "+" : "");
- gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING,
+ gtk_sctree_set_node_info(ctree, node, str, FOLDER_SPACING,
xpm, mask, openxpm, openmask,
FALSE, GTK_CTREE_ROW(node)->expanded);
g_free(str);
item->unreadmarked_msgs > 0 ? "!":"");
else
str = g_strdup_printf("%s (+)", name);
- gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING,
+ gtk_sctree_set_node_info(ctree, node, str, FOLDER_SPACING,
xpm, mask, openxpm, openmask,
FALSE, GTK_CTREE_ROW(node)->expanded);
g_free(str);
str = g_strdup_printf("%s%s", name,
item->unreadmarked_msgs > 0 ? " (!)":"");
- gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING,
+ gtk_sctree_set_node_info(ctree, node, str, FOLDER_SPACING,
xpm, mask, openxpm, openmask,
FALSE, GTK_CTREE_ROW(node)->expanded);
g_free(str);
gtk_clist_thaw(GTK_CLIST(folderview->summaryview->ctree));
}
-void folderview_process_open(FolderView *folderview, FolderItem *item)
-{
- if (!item)
- return;
-
- folder_item_update_freeze();
- folder_item_process_open(item,
- summary_freeze_for_proc,
- summary_thaw_for_proc,
- folderview);
- folder_item_update_thaw();
-
- return;
-}
-
-#if 0
-gboolean folderview_process_open_cb(gpointer data)
-{
- FolderView *folderview = (FolderView *)data;
- FolderItem *item = NULL;
-
- if (!folderview || !folderview->opened) {
- debug_print("opened NULL\n");
- return FALSE;
- }
- item = gtk_ctree_node_get_row_data(
- GTK_CTREE(folderview->ctree),
- folderview->opened);
-
- if (!item)
- return FALSE;
-
- folderview_process_open(folderview, item);
-
- return FALSE;
-}
-#endif
-
static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row,
gint column, FolderView *folderview)
{
return;
}
- folderview_process_open(folderview, item);
-
main_window_cursor_normal(folderview->mainwin);
/* Show messages */
gtk_clist_freeze(GTK_CLIST(ctree));
text[col_pos[F_COL_FOLDER]] = item->name;
- node = gtk_ctree_insert_node(ctree, parent_node, NULL, text,
+ node = gtk_sctree_insert_node(ctree, parent_node, NULL, text,
FOLDER_SPACING,
folderxpm, folderxpmmask,
folderopenxpm, folderopenxpmmask,