2004-09-03 [colin] 0.9.12cvs92
authorColin Leroy <colin@colino.net>
Fri, 3 Sep 2004 09:44:57 +0000 (09:44 +0000)
committerColin Leroy <colin@colino.net>
Fri, 3 Sep 2004 09:44:57 +0000 (09:44 +0000)
* src/prefs_common.c
* src/prefs_common.h
* src/summaryview.c
Add an hidden 'mark_as_read_delay' pref

ChangeLog.claws
PATCHSETS
configure.ac
src/prefs_common.c
src/prefs_common.h
src/summaryview.c

index c514bff69e9f6d158c41cd1c2e71aa8afa7bfd7f..a652ab15efd1f698b2de59499fb772e7046bdadd 100644 (file)
@@ -1,3 +1,10 @@
+2004-09-03 [colin]     0.9.12cvs92
+
+       * src/prefs_common.c
+       * src/prefs_common.h
+       * src/summaryview.c
+               Add an hidden 'mark_as_read_delay' pref 
+
 2004-09-02 [colin]     0.9.12cvs91
 
        * src/gtk/menu.c
index f085176f7a4f5d64772f0a672eecd9d00fe5660b..29230b9ea960d98c93fcb66745f7b5f5cbc6d15f 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
@@ -74,3 +74,4 @@
 ( cvs diff -u -r 1.34 -r 1.35 src/addrindex.c; ) > 0.9.12cvs89.patchset
 ( cvs diff -u -r 1.70 -r 1.72 src/account.c; ) > 0.9.12cvs90.patchset
 ( cvs diff -u -r 1.8 -r 1.9 src/gtk/menu.c; ) > 0.9.12cvs91.patchset
+( cvs diff -u -r 1.226 -r 1.227 src/prefs_common.c; cvs diff -u -r 1.113 -r 1.114 src/prefs_common.h; cvs diff -u -r 1.443 -r 1.444 src/summaryview.c; ) > 0.9.12cvs92.patchset
index 1e5a84a390a9205a3ce475f289cd1ae2b02910d8..459c8803368247ea271f26b94b5c16427ca9c44b 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=9
 MICRO_VERSION=12
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=91
+EXTRA_VERSION=92
 EXTRA_RELEASE=
 
 if test \( $EXTRA_VERSION -eq 0 \) -o \( "x$EXTRA_RELEASE" != "x" \); then
index 05944e156fd60a41b4aa68a46e791b45bbb288a4..e42c0020565a16d00fa925e0633cbcf4a9d02cee 100644 (file)
@@ -671,6 +671,9 @@ static PrefParam param[] = {
         &prefs_common.mark_as_read_on_new_window,
         P_BOOL, &interface.checkbtn_mark_as_read_on_newwin,
         prefs_set_data_from_toggle, prefs_set_toggle},
+       {"mark_as_read_delay", "0",
+        &prefs_common.mark_as_read_delay, P_INT, 
+        NULL, NULL, NULL},
        {"open_inbox_on_inc", "FALSE", &prefs_common.open_inbox_on_inc,
         P_BOOL, &interface.checkbtn_openinbox,
         prefs_set_data_from_toggle, prefs_set_toggle},
index 84b6143f8dc5a3ac62bc35e69fd8ad9d7c33e4b4..5305fe9abf6d6d8390ad5a0f37ec0255d1220ab2 100644 (file)
@@ -254,6 +254,7 @@ struct _PrefsCommon
        gboolean always_show_msg;
        gboolean open_unread_on_enter;
        gboolean mark_as_read_on_new_window;
+       gboolean mark_as_read_delay;
        gboolean open_inbox_on_inc;
        gboolean immediate_exec;
        NextUnreadMsgDialogShow next_unread_msg_dialog;
index afeeb9d6c5e9fe9524ca851154cd88754cce5c40..08008b03c2538f1c35fb474d6d281b7b1f35c500 100644 (file)
@@ -2300,13 +2300,52 @@ static void summary_display_msg(SummaryView *summaryview, GtkCTreeNode *row)
        summary_display_msg_full(summaryview, row, FALSE, FALSE);
 }
 
+static void msginfo_mark_as_read (SummaryView *summaryview, MsgInfo *msginfo,
+                                     GtkCTreeNode *row)
+{
+       g_return_if_fail(summaryview != NULL);
+       g_return_if_fail(msginfo != NULL);
+       g_return_if_fail(row != NULL);
+
+       if (MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags) 
+       && procmsg_msg_has_marked_parent(msginfo))
+               summaryview->unreadmarked--;
+       if (MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags)) {
+               procmsg_msginfo_unset_flags
+                       (msginfo, MSG_NEW | MSG_UNREAD, 0);
+               summary_set_row_marks(summaryview, row);
+               gtk_clist_thaw(GTK_CLIST(summaryview->ctree));
+               summary_status_show(summaryview);
+       }
+}
+
+typedef struct  {
+       MsgInfo *msginfo;
+       SummaryView *summaryview;
+       GtkCTreeNode *row;
+} MarkAsReadData;
+
+static int msginfo_mark_as_read_timeout(void *data)
+{
+       MarkAsReadData *mdata = (MarkAsReadData *)data;
+       if (!mdata)
+               return FALSE;
+       
+       if (mdata->msginfo == summary_get_selected_msg(mdata->summaryview))
+               msginfo_mark_as_read(mdata->summaryview, mdata->msginfo,
+                                    mdata->row); 
+
+       g_free(mdata);
+
+       return FALSE;   
+}
+
 static void summary_display_msg_full(SummaryView *summaryview,
                                     GtkCTreeNode *row,
                                     gboolean new_window, gboolean all_headers)
 {
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        MsgInfo *msginfo;
-       MsgFlags flags;
        gint val;
 
        if (!new_window) {
@@ -2346,19 +2385,16 @@ static void summary_display_msg_full(SummaryView *summaryview,
                gtkut_ctree_node_move_if_on_the_edge(ctree, row);
        }
 
-       if (val == 0 &&
-           (new_window || !prefs_common.mark_as_read_on_new_window)) {
-               if (MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_IGNORE_THREAD(msginfo->flags) 
-               && procmsg_msg_has_marked_parent(msginfo))
-                       summaryview->unreadmarked--;
-               if (MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags)) {
-                       procmsg_msginfo_unset_flags
-                               (msginfo, MSG_NEW | MSG_UNREAD, 0);
-                       summary_set_row_marks(summaryview, row);
-                       gtk_clist_thaw(GTK_CLIST(ctree));
-                       summary_status_show(summaryview);
-                       
-                       flags = msginfo->flags;
+       if (val == 0) {
+               if (prefs_common.mark_as_read_delay) {
+                       MarkAsReadData *data = g_new0(MarkAsReadData, 1);
+                       data->summaryview = summaryview;
+                       data->msginfo = msginfo;
+                       data->row = row;
+                       gtk_timeout_add(prefs_common.mark_as_read_delay * 1000,
+                               msginfo_mark_as_read_timeout, data);
+               } else if (new_window || !prefs_common.mark_as_read_on_new_window) {
+                       msginfo_mark_as_read(summaryview, msginfo, row);
                }
        }