[prev in list] [next in list] [prev in thread] [next in thread] 

List:       sylpheed
Subject:    [sylpheed:23195] NEW PATCH: Message summaries for collapsed folder trees
From:       Sylpheed Patches <sylpheed () thewildbeast ! co ! uk>
Date:       2004-07-01 7:56:25
Message-ID: E1BfwQj-0003OI-00 () alpha ! xcalibre ! co ! uk
[Download RAW message or body]

ANNOUNCING THE RELEASE OF A NEW PATCH

Patch Author: Klaus Lüttich <luettich@tzi.de>
Title:        Message summaries for collapsed folder trees
Filename:     configure_unread_message_display-0.9.12.patch (6.9 kb)
Works with:   0.9.12

Description:
This patch adds two new options to Common Preferences -> Display 
which affect the Folder View:
Enabling the first option causes 
the name of an account to be bold or red when the account has 
unred or new messages, the number of unread and new messages 
is also displayed.
The second option enables the same summaries 
for collapsed IMAP parent folders. When there are no new or 
unread messages they are still greyed out. But when there are 
new and/or unread messages the folder name is displayed in red 
and/or bold and the number of new and/or unread messages is 
shown.

--------------------------
This is an automated message from the Sylpheed Patch homepage.
<http://www.thewildbeast.co.uk/sylpheed>

If you have made a patch that you want included at the
Sylpheed Patch homepage, request details from
<sylpheed@thewildbeast.co.uk>.

["configure_unread_message_display-0.9.12.patch" (application/octet-stream)]

diff -ruN sylpheed-0.9.12/src/folderview.c sylpheed-0.9.12-patched/src/folderview.c
--- sylpheed-0.9.12/src/folderview.c	2004-05-20 07:16:18.000000000 +0200
+++ sylpheed-0.9.12-patched/src/folderview.c	2004-06-23 19:46:47.000000000 +0200
@@ -864,6 +864,48 @@
 	return FALSE;
 }
 
+
+static void folderview_sum_up_unread_recursive(GtkCTree *ctree,
+					       GtkCTreeNode *node,
+					       GInt_Pair *accum)
+{
+	FolderItem *item;
+
+	if (node) {
+		item = gtk_ctree_node_get_row_data(ctree, node);
+		if (item && !item->no_select) {
+		    accum->new += item->new;
+		    accum->unread += item->unread;
+		}
+		node = GTK_CTREE_ROW(node)->children;
+	} else
+		node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+
+	while (node) {
+	    folderview_sum_up_unread_recursive(ctree, node,accum);
+	    node = GTK_CTREE_ROW(node)->sibling;
+	}
+}
+
+static void folderview_sum_up_unread_children(FolderView *folderview,
+					      GtkCTreeNode *node,
+					      GInt_Pair *accum)
+{
+	GtkCTree *ctree = GTK_CTREE(folderview->ctree);
+
+	if (!node)
+		node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list);
+	if (!node)
+		return;
+
+	node = GTK_CTREE_ROW(node)->children;
+
+	while (node) {
+	    folderview_sum_up_unread_recursive(ctree, node, accum);
+	    node = GTK_CTREE_ROW(node)->sibling;
+	}
+}
+
 static gboolean folderview_search_unread_recursive(GtkCTree *ctree,
 						   GtkCTreeNode *node)
 {
@@ -921,6 +963,7 @@
 	gchar *str;
 	gboolean add_unread_mark;
 	gboolean use_bold, use_color;
+	GInt_Pair res;
 
 	item = gtk_ctree_node_get_row_data(ctree, node);
 	g_return_if_fail(item != NULL);
@@ -1004,6 +1047,14 @@
 	else
 		add_unread_mark = FALSE;
 
+	/* calculate summary for accounts and imap superfolders */
+	res.new = res.unread = 0;
+	if (((prefs_common.display_account_unread && !item->parent) || 
+	     (prefs_common.display_imap_superfolder_unread && item->no_select))
+	    && add_unread_mark)
+	    folderview_sum_up_unread_children(folderview,node,&res);
+	    
+
 	if (item->stype == F_QUEUE && item->total > 0 &&
 	    prefs_common.display_folder_unread) {
 		str = g_strdup_printf("%s (%d%s)", name, item->total,
@@ -1030,10 +1081,20 @@
 					FALSE, GTK_CTREE_ROW(node)->expanded);
 	g_free(name);
 
-	if (!item->parent) {
+ 	if (!prefs_common.display_account_unread && !item->parent) {
+ 		gtk_ctree_node_set_text(ctree, node, COL_NEW,    "-");
+ 		gtk_ctree_node_set_text(ctree, node, COL_UNREAD, "-");
+ 		gtk_ctree_node_set_text(ctree, node, COL_TOTAL,  "-");
+ 	} else if ((prefs_common.display_account_unread && !item->parent) || 
+	    (prefs_common.display_imap_superfolder_unread && item->no_select)) {
+	    if(!GTK_CTREE_ROW(node)->expanded) {
+		gtk_ctree_node_set_text(ctree, node, COL_NEW,    itos(res.new));
+		gtk_ctree_node_set_text(ctree, node, COL_UNREAD, itos(res.unread));
+	    } else {
 		gtk_ctree_node_set_text(ctree, node, COL_NEW,    "-");
 		gtk_ctree_node_set_text(ctree, node, COL_UNREAD, "-");
-		gtk_ctree_node_set_text(ctree, node, COL_TOTAL,  "-");
+		}
+	    gtk_ctree_node_set_text(ctree, node, COL_TOTAL,  "-");	    
 	} else {
 		gtk_ctree_node_set_text(ctree, node, COL_NEW,    itos(item->new));
 		gtk_ctree_node_set_text(ctree, node, COL_UNREAD, itos(item->unread));
@@ -1058,7 +1119,8 @@
 
 	gtk_ctree_node_set_foreground(ctree, node, NULL);
 
-	if (item->no_select)
+	if (item->no_select && (!add_unread_mark ||
+	    !prefs_common.display_imap_superfolder_unread))
 		gtk_ctree_node_set_foreground(ctree, node,
 					      &folderview->color_noselect);
 	else if (use_bold && use_color)
diff -ruN sylpheed-0.9.12/src/folderview.h sylpheed-0.9.12-patched/src/folderview.h
--- sylpheed-0.9.12/src/folderview.h	2004-05-20 07:03:12.000000000 +0200
+++ sylpheed-0.9.12-patched/src/folderview.h	2004-06-23 19:46:47.000000000 +0200
@@ -27,6 +27,7 @@
 #include "folder.h"
 
 typedef struct _FolderView	FolderView;
+typedef struct _GInt_Pair       GInt_Pair;
 
 #include "mainwindow.h"
 #include "summaryview.h"
@@ -58,6 +59,11 @@
 	SummaryView  *summaryview;
 };
 
+struct _GInt_Pair {
+    gint new;
+    gint unread;
+};
+
 FolderView *folderview_create		(void);
 void folderview_init			(FolderView	*folderview);
 void folderview_set			(FolderView	*folderview);
diff -ruN sylpheed-0.9.12/src/prefs_common.c sylpheed-0.9.12-patched/src/prefs_common.c
--- sylpheed-0.9.12/src/prefs_common.c	2004-05-19 08:24:56.000000000 +0200
+++ sylpheed-0.9.12-patched/src/prefs_common.c	2004-06-23 19:46:47.000000000 +0200
@@ -119,6 +119,8 @@
 	GtkWidget *button_textfont;
 
 	GtkWidget *chkbtn_folder_unread;
+	GtkWidget *chkbtn_account_unread;
+	GtkWidget *chkbtn_imap_superfolder_unread;
 	GtkWidget *entry_ng_abbrev_len;
 	GtkWidget *spinbtn_ng_abbrev_len;
 	GtkObject *spinbtn_ng_abbrev_len_adj;
@@ -356,6 +358,17 @@
 	 &prefs_common.display_folder_unread, P_BOOL,
 	 &display.chkbtn_folder_unread,
 	 prefs_set_data_from_toggle, prefs_set_toggle},
+
+	{"display_account_unread_num", "FALSE",
+	 &prefs_common.display_account_unread, P_BOOL,
+	 &display.chkbtn_account_unread,
+	 prefs_set_data_from_toggle, prefs_set_toggle},
+
+	{"display_imap_superfolder_unread_num", "FALSE",
+	 &prefs_common.display_imap_superfolder_unread, P_BOOL,
+	 &display.chkbtn_imap_superfolder_unread,
+	 prefs_set_data_from_toggle, prefs_set_toggle},
+
 	{"newsgroup_abbrev_len", "16",
 	 &prefs_common.ng_abbrev_len, P_INT,
 	 &display.spinbtn_ng_abbrev_len,
@@ -1517,6 +1530,8 @@
 	GtkWidget *button_textfont;
 	GtkWidget *chkbtn_transhdr;
 	GtkWidget *chkbtn_folder_unread;
+	GtkWidget *chkbtn_account_unread;
+	GtkWidget *chkbtn_imap_superfolder_unread;
 	GtkWidget *hbox1;
 	GtkWidget *label_ng_abbrev;
 	GtkWidget *spinbtn_ng_abbrev_len;
@@ -1573,6 +1588,12 @@
 	PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread,
 			   _("Display unread number next to folder name"));
 
+	PACK_CHECK_BUTTON (vbox2, chkbtn_account_unread,
+			   _("Display new and unread messages for collapsed accounts"));
+
+	PACK_CHECK_BUTTON (vbox2, chkbtn_imap_superfolder_unread,
+			   _("Display new and unread messages for collapsed imap4 superfolders"));
+
 	PACK_VSPACER(vbox2, vbox3, VSPACING_NARROW_2);
 
 	hbox1 = gtk_hbox_new (FALSE, 8);
@@ -1653,6 +1674,8 @@
 
 	display.chkbtn_transhdr           = chkbtn_transhdr;
 	display.chkbtn_folder_unread      = chkbtn_folder_unread;
+	display.chkbtn_account_unread      = chkbtn_account_unread;
+	display.chkbtn_imap_superfolder_unread      = chkbtn_imap_superfolder_unread;
 	display.spinbtn_ng_abbrev_len     = spinbtn_ng_abbrev_len;
 	display.spinbtn_ng_abbrev_len_adj = spinbtn_ng_abbrev_len_adj;
 
diff -ruN sylpheed-0.9.12/src/prefs_common.h sylpheed-0.9.12-patched/src/prefs_common.h
--- sylpheed-0.9.12/src/prefs_common.h	2004-05-19 08:24:50.000000000 +0200
+++ sylpheed-0.9.12-patched/src/prefs_common.h	2004-06-23 19:46:47.000000000 +0200
@@ -98,6 +98,8 @@
 
 	gboolean trans_hdr;
 	gboolean display_folder_unread;
+	gboolean display_account_unread;
+	gboolean display_imap_superfolder_unread;
 	gint ng_abbrev_len;
 
 	gboolean swap_from;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic