[Commits] [SCM] claws branch, master, updated. 3.14.1-43-gb7df74e
wwp at claws-mail.org
wwp at claws-mail.org
Mon Dec 12 15:19:43 CET 2016
The branch, master has been updated
via b7df74e8f5a7e6f948c63da3a7a3808fcc108935 (commit)
from 773ddbbae8fb70c2e715c95d819ec8810cc2641b (commit)
Summary of changes:
src/folderutils.c | 66 ++++++++++++++++++++++++++++-
src/folderutils.h | 2 +
src/folderview.c | 121 +++++++++++++++++++++++++++++++++++++++++++++--------
src/mainwindow.c | 20 ++++++---
src/summaryview.c | 72 ++++++++++++++++++-------------
src/summaryview.h | 5 +--
6 files changed, 230 insertions(+), 56 deletions(-)
- Log -----------------------------------------------------------------
commit b7df74e8f5a7e6f948c63da3a7a3808fcc108935
Author: wwp <wwp at free.fr>
Date: Mon Dec 12 15:17:15 2016 +0100
Add new mark-all-unread (and recursively when relevant) action to folder
context menu, message list and main window menu.
diff --git a/src/folderutils.c b/src/folderutils.c
index 0a27229..939b019 100644
--- a/src/folderutils.c
+++ b/src/folderutils.c
@@ -132,7 +132,7 @@ void folderutils_mark_all_read(FolderItem *item)
if (mainwin && mainwin->summaryview &&
mainwin->summaryview->folder_item == item) {
debug_print("folder opened, using summary\n");
- summary_mark_all_read(mainwin->summaryview);
+ summary_mark_all_read(mainwin->summaryview, TRUE);
} else {
msglist = folder_item_get_msg_list(item);
debug_print("got msglist %p\n", msglist);
@@ -159,6 +159,46 @@ void folderutils_mark_all_read(FolderItem *item)
folder_item_update_thaw();
}
+void folderutils_mark_all_unread(FolderItem *item)
+{
+ MsgInfoList *msglist, *cur;
+ MainWindow *mainwin = mainwindow_get_mainwindow();
+ int i = 0, m = 0;
+ debug_print("marking all unread in item %s\n", (item==NULL)?"NULL":item->name);
+ cm_return_if_fail(item != NULL);
+
+
+ folder_item_update_freeze();
+ if (mainwin && mainwin->summaryview &&
+ mainwin->summaryview->folder_item == item) {
+ debug_print("folder opened, using summary\n");
+ summary_mark_all_read(mainwin->summaryview, FALSE);
+ } else {
+ msglist = folder_item_get_msg_list(item);
+ debug_print("got msglist %p\n", msglist);
+ if (msglist == NULL) {
+ folder_item_update_thaw();
+ return;
+ }
+ folder_item_set_batch(item, TRUE);
+ for (cur = msglist; cur != NULL; cur = g_slist_next(cur)) {
+ MsgInfo *msginfo = cur->data;
+
+ if (!(msginfo->flags.perm_flags & MSG_UNREAD)) {
+ procmsg_msginfo_set_flags(msginfo, MSG_UNREAD, 0);
+ m++;
+ }
+ i++;
+ procmsg_msginfo_free(&msginfo);
+ }
+ folder_item_set_batch(item, FALSE);
+ folder_item_close(item);
+ debug_print("marked %d messages out of %d as unread\n", m, i);
+ g_slist_free(msglist);
+ }
+ folder_item_update_thaw();
+}
+
void folderutils_mark_all_read_recursive(FolderItem *item)
{
GNode *node;
@@ -182,3 +222,27 @@ void folderutils_mark_all_read_recursive(FolderItem *item)
}
}
}
+
+void folderutils_mark_all_unread_recursive(FolderItem *item)
+{
+ GNode *node;
+
+ cm_return_if_fail(item != NULL);
+
+ folderutils_mark_all_unread(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_unread_recursive(sub_item);
+ }
+ }
+}
diff --git a/src/folderutils.h b/src/folderutils.h
index ca404c5..64a5c2e 100644
--- a/src/folderutils.h
+++ b/src/folderutils.h
@@ -30,6 +30,8 @@ typedef enum {
gint folderutils_delete_duplicates(FolderItem *item,
DeleteDuplicatesMode mode);
void folderutils_mark_all_read (FolderItem *item);
+void folderutils_mark_all_unread (FolderItem *item);
void folderutils_mark_all_read_recursive (FolderItem *item);
+void folderutils_mark_all_unread_recursive (FolderItem *item);
#endif /* FOLDERUTILS_H */
diff --git a/src/folderview.c b/src/folderview.c
index 8469ee9..3fe8ccc 100644
--- a/src/folderview.c
+++ b/src/folderview.c
@@ -169,14 +169,19 @@ static void folderview_col_resized (GtkCMCList *clist,
gint width,
FolderView *folderview);
-static void mark_all_read_handler (GtkAction *action,
+static void mark_all_read_unread_handler (GtkAction *action,
gpointer data,
- gboolean recursive);
+ gboolean recursive,
+ gboolean read);
static void mark_all_read_cb (GtkAction *action,
gpointer data);
+static void mark_all_unread_cb (GtkAction *action,
+ gpointer data);
static void mark_all_read_recursive_cb (GtkAction *action,
gpointer data);
+static void mark_all_unread_recursive_cb (GtkAction *action,
+ gpointer data);
static void folderview_empty_trash_cb (GtkAction *action,
gpointer data);
@@ -240,7 +245,9 @@ 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/MarkAllUnread", NULL, N_("Mark all u_nread"), NULL, NULL, G_CALLBACK(mark_all_unread_cb) },
{"FolderViewPopup/MarkAllReadRec", NULL, N_("Mark all read recursi_vely"), NULL, NULL, G_CALLBACK(mark_all_read_recursive_cb) },
+ {"FolderViewPopup/MarkAllUnreadRec", NULL, N_("Mark all unread recursi_vely"), NULL, NULL, G_CALLBACK(mark_all_unread_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) },
@@ -825,33 +832,54 @@ void folderview_select(FolderView *folderview, FolderItem *item)
static void mark_all_read_cb(GtkAction *action, gpointer data)
{
- mark_all_read_handler(action, data, FALSE);
+ mark_all_read_unread_handler(action, data, FALSE, TRUE);
+}
+
+static void mark_all_unread_cb(GtkAction *action, gpointer data)
+{
+ mark_all_read_unread_handler(action, data, FALSE, FALSE);
}
static void mark_all_read_recursive_cb(GtkAction *action, gpointer data)
{
- mark_all_read_handler(action, data, TRUE);
+ mark_all_read_unread_handler(action, data, TRUE, TRUE);
}
-static void mark_all_read_handler(GtkAction *action, gpointer data, gboolean recursive)
+static void mark_all_unread_recursive_cb(GtkAction *action, gpointer data)
+{
+ mark_all_read_unread_handler(action, data, TRUE, FALSE);
+}
+
+static void mark_all_read_unread_handler(GtkAction *action, gpointer data,
+ gboolean recursive, gboolean read)
{
FolderView *folderview = (FolderView *)data;
FolderItem *item;
AlertValue val;
gchar *message;
+ gchar *title;
item = folderview_get_selected_item(folderview);
if (item == NULL)
return;
- message = recursive? _("Do you really want to mark all mails in this "
- "folder and its sub-folders as read?") :
- _("Do you really want to mark all mails in this "
- "folder as read?");
+ if (read) {
+ title = _("Mark all as read");
+ message = recursive? _("Do you really want to mark all mails in this "
+ "folder and its sub-folders as read?") :
+ _("Do you really want to mark all mails in this "
+ "folder as read?");
+ } else {
+ title = _("Mark all as unread");
+ message = recursive? _("Do you really want to mark all mails in this "
+ "folder and its sub-folders as unread?") :
+ _("Do you really want to mark all mails in this "
+ "folder as unread?");
+ }
if (folderview->summaryview->folder_item != item &&
prefs_common.ask_mark_all_read) {
- val = alertpanel_full(_("Mark all as read"),
- message, GTK_STOCK_NO, GTK_STOCK_YES, NULL,
+ val = alertpanel_full(title, message,
+ GTK_STOCK_NO, GTK_STOCK_YES, NULL,
TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT);
if ((val & ~G_ALERTDISABLE) != G_ALERTALTERNATE)
@@ -866,11 +894,17 @@ static void mark_all_read_handler(GtkAction *action, gpointer data, gboolean rec
else
summary_freeze(folderview->summaryview);
- if (recursive)
- folderutils_mark_all_read_recursive(item);
- else
- folderutils_mark_all_read(item);
-
+ if (read) {
+ if (recursive)
+ folderutils_mark_all_read_recursive(item);
+ else
+ folderutils_mark_all_read(item);
+ } else {
+ if (recursive)
+ folderutils_mark_all_unread_recursive(item);
+ else
+ folderutils_mark_all_unread(item);
+ }
if (folderview->summaryview->folder_item != item && !recursive)
summary_unlock(folderview->summaryview);
else
@@ -1355,6 +1389,52 @@ static gboolean folderview_have_unread_children(FolderView *folderview,
return folderview_have_unread_children_sub(folderview, item, FALSE);
}
+static gboolean folderview_have_read_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 (in_sub &&
+ (((item->total_msgs > 0) &&
+ (item->unread_msgs != (item->total_msgs - item->ignored_msgs))))) {
+ return TRUE;
+ }
+
+ while (node != NULL) {
+ if (node && node->data) {
+ FolderItem *next_item = (FolderItem*) node->data;
+ node = node->next;
+ if (folderview_have_read_children_sub(folderview,
+ next_item,
+ TRUE)) {
+ return TRUE;
+ }
+ }
+ }
+
+debug_print("-> false 2 %s\n", item->name);
+ return FALSE;
+}
+
+static gboolean folderview_have_read_children(FolderView *folderview,
+ FolderItem *item)
+{
+gboolean ret;
+ ret = folderview_have_read_children_sub(folderview, item, FALSE);
+debug_print("-> %s 0 (%d)\n", ret?"true":"false", ret);
+ return ret;
+}
+
static gboolean folderview_have_matching_children_sub(FolderView *folderview,
FolderItem *item,
gboolean in_sub)
@@ -1874,7 +1954,9 @@ 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", "MarkAllUnread", "FolderViewPopup/MarkAllUnread", 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", "MarkAllUnreadRec", "FolderViewPopup/MarkAllUnreadRec", 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)
@@ -1904,9 +1986,12 @@ static void folderview_set_sens_and_popup_menu(FolderView *folderview, gint row,
#define SET_SENS(name, sens) \
cm_menu_set_sensitive_full(ui_manager, "Popup/"name, sens)
- SET_SENS("FolderViewPopup/MarkAllRead", item->unread_msgs >= 1);
+ SET_SENS("FolderViewPopup/MarkAllRead", item->unread_msgs > 0);
+ SET_SENS("FolderViewPopup/MarkAllUnread", (item->total_msgs > 0) &&
+ (item->unread_msgs != (item->total_msgs - item->ignored_msgs)));
SET_SENS("FolderViewPopup/MarkAllReadRec", folderview_have_unread_children(folderview,item));
- SET_SENS("FolderViewPopup/SearchFolder", item->total_msgs >= 1 &&
+ SET_SENS("FolderViewPopup/MarkAllUnreadRec", folderview_have_read_children(folderview,item));
+ SET_SENS("FolderViewPopup/SearchFolder", item->total_msgs > 0 &&
folderview->selected == folderview->opened);
SET_SENS("FolderViewPopup/Properties", TRUE);
diff --git a/src/mainwindow.c b/src/mainwindow.c
index e03c55e..1500488 100644
--- a/src/mainwindow.c
+++ b/src/mainwindow.c
@@ -231,6 +231,8 @@ static void mark_as_read_cb (GtkAction *action,
gpointer data);
static void mark_all_read_cb (GtkAction *action,
gpointer data);
+static void mark_all_unread_cb (GtkAction *action,
+ gpointer data);
static void mark_as_spam_cb (GtkAction *action,
gpointer data);
static void mark_as_ham_cb (GtkAction *action,
@@ -704,6 +706,7 @@ static GtkActionEntry mainwin_entries[] =
{"Message/Mark/MarkRead", NULL, N_("Mark as rea_d"), NULL, NULL, G_CALLBACK(mark_as_read_cb) },
/* separation */
{"Message/Mark/MarkAllRead", NULL, N_("Mark all read"), NULL, NULL, G_CALLBACK(mark_all_read_cb) },
+ {"Message/Mark/MarkAllUnread", NULL, N_("Mark all unread"), NULL, NULL, G_CALLBACK(mark_all_unread_cb) },
/* separation */
{"Message/Mark/IgnoreThread", NULL, N_("Ignore thread"), NULL, NULL, G_CALLBACK(ignore_thread_cb) },
{"Message/Mark/UnignoreThread", NULL, N_("Unignore thread"), NULL, NULL, G_CALLBACK(unignore_thread_cb) },
@@ -1788,6 +1791,7 @@ MainWindow *main_window_create()
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Mark", "MarkRead", "Message/Mark/MarkRead", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Mark", "Separator2", "Message/Mark/---", GTK_UI_MANAGER_SEPARATOR)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Mark", "MarkAllRead", "Message/Mark/MarkAllRead", GTK_UI_MANAGER_MENUITEM)
+ MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Mark", "MarkAllUnread", "Message/Mark/MarkAllUnread", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Mark", "Separator3", "Message/Mark/---", GTK_UI_MANAGER_SEPARATOR)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Mark", "IgnoreThread", "Message/Mark/IgnoreThread", GTK_UI_MANAGER_MENUITEM)
MENUITEM_ADDUI_MANAGER(mainwin->ui_manager, "/Menu/Message/Mark", "UnignoreThread", "Message/Mark/UnignoreThread", GTK_UI_MANAGER_MENUITEM)
@@ -4461,22 +4465,28 @@ static void unmark_cb(GtkAction *action, gpointer data)
summary_unmark(mainwin->summaryview);
}
-static void mark_as_unread_cb(GtkAction *action, gpointer data)
+static void mark_as_read_cb(GtkAction *action, gpointer data)
{
MainWindow *mainwin = (MainWindow *)data;
- summary_mark_as_unread(mainwin->summaryview);
+ summary_mark_as_read(mainwin->summaryview, TRUE);
}
-static void mark_as_read_cb(GtkAction *action, gpointer data)
+static void mark_as_unread_cb(GtkAction *action, gpointer data)
{
MainWindow *mainwin = (MainWindow *)data;
- summary_mark_as_read(mainwin->summaryview);
+ summary_mark_as_read(mainwin->summaryview, FALSE);
}
static void mark_all_read_cb(GtkAction *action, gpointer data)
{
MainWindow *mainwin = (MainWindow *)data;
- summary_mark_all_read(mainwin->summaryview);
+ summary_mark_all_read(mainwin->summaryview, TRUE);
+}
+
+static void mark_all_unread_cb(GtkAction *action, gpointer data)
+{
+ MainWindow *mainwin = (MainWindow *)data;
+ summary_mark_all_read(mainwin->summaryview, FALSE);
}
static void mark_as_spam_cb(GtkAction *action, gpointer data)
diff --git a/src/summaryview.c b/src/summaryview.c
index f135324..4739b66 100644
--- a/src/summaryview.c
+++ b/src/summaryview.c
@@ -4025,7 +4025,25 @@ static void summary_mark_row_as_read(SummaryView *summaryview,
msginfo->msgnum);
}
-void summary_mark_as_read(SummaryView *summaryview)
+static void summary_mark_row_as_unread(SummaryView *summaryview,
+ GtkCMCTreeNode *row)
+{
+ GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
+ MsgInfo *msginfo;
+
+ msginfo = gtk_cmctree_node_get_row_data(ctree, row);
+ cm_return_if_fail(msginfo);
+
+ if(MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags))
+ return;
+
+ summary_msginfo_set_flags(msginfo, MSG_UNREAD, 0);
+ summary_set_row_marks(summaryview, row);
+ debug_print("Message %d is marked as unread\n",
+ msginfo->msgnum);
+}
+
+void summary_mark_as_read(SummaryView *summaryview, gboolean read)
{
GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
GList *cur;
@@ -4036,8 +4054,12 @@ void summary_mark_as_read(SummaryView *summaryview)
START_LONG_OPERATION(summaryview, FALSE);
folder_item_set_batch(summaryview->folder_item, TRUE);
for (cur = GTK_CMCLIST(ctree)->selection; cur != NULL && cur->data != NULL; cur = cur->next)
- summary_mark_row_as_read(summaryview,
- GTK_CMCTREE_NODE(cur->data));
+ if (read)
+ summary_mark_row_as_read(summaryview,
+ GTK_CMCTREE_NODE(cur->data));
+ else
+ summary_mark_row_as_unread(summaryview,
+ GTK_CMCTREE_NODE(cur->data));
folder_item_set_batch(summaryview->folder_item, FALSE);
END_LONG_OPERATION(summaryview);
@@ -4078,17 +4100,26 @@ void summary_msgs_unlock(SummaryView *summaryview)
summary_status_show(summaryview);
}
-void summary_mark_all_read(SummaryView *summaryview)
+void summary_mark_all_read(SummaryView *summaryview, gboolean read)
{
GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
GtkCMCTreeNode *node;
AlertValue val;
gboolean froze = FALSE;
+ gchar *message;
+ gchar *title;
+
+ if (read) {
+ title = _("Mark all as read");
+ message = _("Do you really want to mark all mails in this folder as read?");
+ } else {
+ title = _("Mark all as unread");
+ message = _("Do you really want to mark all mails in this folder as unread?");
+ }
if (prefs_common.ask_mark_all_read) {
- val = alertpanel_full(_("Mark all as read"),
- _("Do you really want to mark all mails in this "
- "folder as read?"), GTK_STOCK_NO, GTK_STOCK_YES, NULL,
+ val = alertpanel_full(title, message,
+ GTK_STOCK_NO, GTK_STOCK_YES, NULL,
TRUE, NULL, ALERT_QUESTION, G_ALERTDEFAULT);
if ((val & ~G_ALERTDISABLE) != G_ALERTALTERNATE)
@@ -4103,7 +4134,10 @@ void summary_mark_all_read(SummaryView *summaryview)
folder_item_set_batch(summaryview->folder_item, TRUE);
for (node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list); node != NULL;
node = gtkut_ctree_node_next(ctree, node))
- summary_mark_row_as_read(summaryview, node);
+ if (read)
+ summary_mark_row_as_read(summaryview, node);
+ else
+ summary_mark_row_as_unread(summaryview, node);
folder_item_set_batch(summaryview->folder_item, FALSE);
for (node = GTK_CMCTREE_NODE(GTK_CMCLIST(ctree)->row_list); node != NULL;
node = gtkut_ctree_node_next(ctree, node)) {
@@ -4183,27 +4217,6 @@ void summary_mark_as_spam(SummaryView *summaryview, guint action, GtkWidget *wid
}
-static void summary_mark_row_as_unread(SummaryView *summaryview,
- GtkCMCTreeNode *row)
-{
- GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
- MsgInfo *msginfo;
-
- msginfo = gtk_cmctree_node_get_row_data(ctree, row);
- cm_return_if_fail(msginfo);
- if (MSG_IS_DELETED(msginfo->flags)) {
- procmsg_msginfo_set_to_folder(msginfo, NULL);
- summary_msginfo_unset_flags(msginfo, MSG_DELETED, 0);
- summaryview->deleted--;
- }
-
- summary_msginfo_set_flags(msginfo, MSG_UNREAD, 0);
- debug_print("Message %d is marked as unread\n",
- msginfo->msgnum);
-
- summary_set_row_marks(summaryview, row);
-}
-
void summary_mark_as_unread(SummaryView *summaryview)
{
GtkCMCTree *ctree = GTK_CMCTREE(summaryview->ctree);
@@ -7750,6 +7763,7 @@ void summary_toggle_watch_thread(SummaryView *summaryview)
summary_watch_thread(summaryview);
}
+
void summary_toggle_show_read_messages(SummaryView *summaryview)
{
FolderItemUpdateData source;
diff --git a/src/summaryview.h b/src/summaryview.h
index ba24099..dee8068 100644
--- a/src/summaryview.h
+++ b/src/summaryview.h
@@ -272,11 +272,10 @@ void summary_save_as (SummaryView *summaryview);
void summary_print (SummaryView *summaryview);
void summary_mark (SummaryView *summaryview);
void summary_unmark (SummaryView *summaryview);
-void summary_mark_as_unread (SummaryView *summaryview);
-void summary_mark_as_read (SummaryView *summaryview);
+void summary_mark_as_read (SummaryView *summaryview, gboolean);
void summary_msgs_lock (SummaryView *summaryview);
void summary_msgs_unlock (SummaryView *summaryview);
-void summary_mark_all_read (SummaryView *summaryview);
+void summary_mark_all_read (SummaryView *summaryview, gboolean);
void summary_mark_as_spam (SummaryView *summaryview,
guint action,
GtkWidget *widget);
-----------------------------------------------------------------------
hooks/post-receive
--
Claws Mail
More information about the Commits
mailing list