[Commits] [SCM] claws branch, master, updated. 3.11.1-105-gfed3e19

mones at claws-mail.org mones at claws-mail.org
Thu May 28 21:48:19 CEST 2015


The branch, master has been updated
       via  fed3e19ea57b2a9332b42c22183bdf55d64af2e9 (commit)
      from  c3112d84245d05b471ecdaebb4a6cea5ff3af6dd (commit)

Summary of changes:
 AUTHORS           |    1 +
 src/folderutils.c |   24 ++++++++++++++++++++++++
 src/folderutils.h |    1 +
 src/folderview.c  |   28 +++++++++++++++++++++++++---
 src/gtk/authors.h |    1 +
 5 files changed, 52 insertions(+), 3 deletions(-)


- Log -----------------------------------------------------------------
commit fed3e19ea57b2a9332b42c22183bdf55d64af2e9
Author: Ricardo Mones <ricardo at mones.org>
Date:   Thu May 28 21:07:30 2015 +0200

    Fix bug #1941 ‘recursive "mark read all"’
    
    Based on the original patch from Robert David which unfortunately
    didn't marked as read the folder currently open on summary view.

diff --git a/AUTHORS b/AUTHORS
index 4b83479..6803548 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -313,3 +313,4 @@ contributors (in addition to the above; based on Changelog)
 	Daniel Zaoui
 	Johan Vromans
 	Charles Lehner
+	Robert David
diff --git a/src/folderutils.c b/src/folderutils.c
index 8fea729..cd1735a 100644
--- a/src/folderutils.c
+++ b/src/folderutils.c
@@ -158,3 +158,27 @@ void folderutils_mark_all_read(FolderItem *item)
 	}
 	folder_item_update_thaw();
 }
+
+void folderutils_mark_all_read_recursive(FolderItem *item)
+{
+	GNode *node;
+
+	cm_return_if_fail(item != NULL);
+
+	folderutils_mark_all_read(item);
+
+	cm_return_if_fail(item->folder != NULL);
+	cm_return_if_fail(item->folder->node != NULL);
+
+	node = item->folder->node;
+	node = g_node_find(node, G_PRE_ORDER, G_TRAVERSE_ALL, item);
+	node = node->children;
+
+	while (node != NULL) {
+		if (node->data != NULL) {
+			FolderItem *sub_item = (FolderItem *) node->data;
+			node = node->next;
+			folderutils_mark_all_read_recursive(sub_item);
+		}
+	}
+}
diff --git a/src/folderutils.h b/src/folderutils.h
index 08da0fa..ca404c5 100644
--- a/src/folderutils.h
+++ b/src/folderutils.h
@@ -30,5 +30,6 @@ typedef enum {
 gint folderutils_delete_duplicates(FolderItem *item,
 				   DeleteDuplicatesMode mode);
 void folderutils_mark_all_read	  (FolderItem *item);
+void folderutils_mark_all_read_recursive	  (FolderItem *item);
 
 #endif /* FOLDERUTILS_H */
diff --git a/src/folderview.c b/src/folderview.c
index c061c0c..0ddc249 100644
--- a/src/folderview.c
+++ b/src/folderview.c
@@ -163,8 +163,14 @@ static void folderview_col_resized	(GtkCMCList	*clist,
 					 gint		 width,
 					 FolderView	*folderview);
 
+static void mark_all_read_handler	(GtkAction	*action,
+					 gpointer	 data,
+					 gboolean	 recursive);
+
 static void mark_all_read_cb            (GtkAction 	*action,
 					 gpointer	 data);
+static void mark_all_read_recursive_cb  (GtkAction 	*action,
+					 gpointer	 data);
 
 static void folderview_empty_trash_cb	(GtkAction 	*action,
 					 gpointer	 data);
@@ -228,6 +234,7 @@ static GtkActionEntry folderview_common_popup_entries[] =
 {
 	{"FolderViewPopup",			NULL, "FolderViewPopup" },
 	{"FolderViewPopup/MarkAllRead",		NULL, N_("Mark all re_ad"), NULL, NULL, G_CALLBACK(mark_all_read_cb) },
+	{"FolderViewPopup/MarkAllReadRec",	NULL, N_("Mark all read recursi_ve"), NULL, NULL, G_CALLBACK(mark_all_read_recursive_cb) },
 	{"FolderViewPopup/---",			NULL, "---" },
 	{"FolderViewPopup/RunProcessing",	NULL, N_("R_un processing rules"), NULL, NULL, G_CALLBACK(folderview_run_processing_cb) },
 	{"FolderViewPopup/SearchFolder",	NULL, N_("_Search folder..."), NULL, NULL, G_CALLBACK(folderview_search_cb) },
@@ -810,6 +817,16 @@ void folderview_select(FolderView *folderview, FolderItem *item)
 
 static void mark_all_read_cb(GtkAction *action, gpointer data)
 {
+	mark_all_read_handler(action, data, FALSE);
+}
+
+static void mark_all_read_recursive_cb(GtkAction *action, gpointer data)
+{
+	mark_all_read_handler(action, data, TRUE);
+}
+
+static void mark_all_read_handler(GtkAction *action, gpointer data, gboolean recursive)
+{
 	FolderView *folderview = (FolderView *)data;
 	FolderItem *item;
 	AlertValue val;
@@ -833,14 +850,17 @@ static void mark_all_read_cb(GtkAction *action, gpointer data)
 
 	
 	folder_item_update_freeze();
-	if (folderview->summaryview->folder_item != item)
+	if (folderview->summaryview->folder_item != item && !recursive)
 		summary_lock(folderview->summaryview);
 	else
 		summary_freeze(folderview->summaryview);
 		
-	folderutils_mark_all_read(item);
+	if (recursive)
+		folderutils_mark_all_read_recursive(item);
+	else
+		folderutils_mark_all_read(item);
 	
-	if (folderview->summaryview->folder_item != item)
+	if (folderview->summaryview->folder_item != item && !recursive)
 		summary_unlock(folderview->summaryview);
 	else
 		summary_thaw(folderview->summaryview);
@@ -1820,6 +1840,7 @@ static void folderview_set_sens_and_popup_menu(FolderView *folderview, gint row,
 		fpopup->add_menuitems(ui_manager, item);
 
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "MarkAllRead", "FolderViewPopup/MarkAllRead", GTK_UI_MANAGER_MENUITEM)
+	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "MarkAllReadRec", "FolderViewPopup/MarkAllReadRec", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "Separator1", "FolderViewPopup/---", GTK_UI_MANAGER_SEPARATOR)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "RunProcessing", "FolderViewPopup/RunProcessing", GTK_UI_MANAGER_MENUITEM)
 	MENUITEM_ADDUI_MANAGER(ui_manager, "/Popup/FolderViewPopup", "SearchFolder", "FolderViewPopup/SearchFolder", GTK_UI_MANAGER_MENUITEM)
@@ -1850,6 +1871,7 @@ static void folderview_set_sens_and_popup_menu(FolderView *folderview, gint row,
 	cm_menu_set_sensitive_full(ui_manager, "Popup/"name, sens)
 
 	SET_SENS("FolderViewPopup/MarkAllRead", item->unread_msgs >= 1);
+	SET_SENS("FolderViewPopup/MarkAllReadRec", folderview_have_unread_children(folderview,item));
 	SET_SENS("FolderViewPopup/SearchFolder", item->total_msgs >= 1 && 
 		 folderview->selected == folderview->opened);
 	SET_SENS("FolderViewPopup/Properties", TRUE);
diff --git a/src/gtk/authors.h b/src/gtk/authors.h
index ffb9fd6..8a77633 100644
--- a/src/gtk/authors.h
+++ b/src/gtk/authors.h
@@ -111,6 +111,7 @@ static char *CONTRIBS_LIST[] = {
 "Christian Cornelssen",
 "Palmer Dabbelt",
 "George Danchev",
+"Robert David",
 "Kevin Day",
 "Matthieu Dazy",
 "Ben Deering",

-----------------------------------------------------------------------


hooks/post-receive
-- 
Claws Mail


More information about the Commits mailing list