2004-09-06 [colin] 0.9.12cvs95.1
[claws.git] / src / summaryview.c
index ab686a03d3d131730fac3fd70602db0359ea1eed..d5b2811077d778fba11d2c54467f7a7538dc8948 100644 (file)
@@ -611,8 +611,6 @@ SummaryView *summary_create(void)
 
 void summary_init(SummaryView *summaryview)
 {
-       static GdkFont *boldfont = NULL;
-       static GdkFont *smallfont = NULL;
        GtkStyle *style;
        GtkWidget *pixmap;
 
@@ -1245,7 +1243,7 @@ void summary_select_prev_unread(SummaryView *summaryview)
        GtkCTreeNode *node;
 
        node = summary_find_prev_flagged_msg
-               (summaryview, summaryview->selected, MSG_UNREAD, FALSE);
+               (summaryview, summaryview->selected, MSG_UNREAD, TRUE);
 
        if (!node) {
                AlertValue val = 0;
@@ -1284,7 +1282,7 @@ void summary_select_next_unread(SummaryView *summaryview)
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
 
        node = summary_find_next_flagged_msg
-               (summaryview, node, MSG_UNREAD, FALSE);
+               (summaryview, node, MSG_UNREAD, TRUE);
        
        if (node)
                summary_select_node(summaryview, node, TRUE, FALSE);
@@ -2300,13 +2298,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 +2383,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);
                }
        }
 
@@ -4287,12 +4321,12 @@ static gboolean summary_button_pressed(GtkWidget *ctree, GdkEventButton *event,
        if (!event) return FALSE;
 
        if (event->button == 3) {
-               summaryview->display_msg = TRUE;
+               summaryview->display_msg = messageview_is_visible(summaryview->messageview);
                /* right clicked */
                gtk_menu_popup(GTK_MENU(summaryview->popupmenu), NULL, NULL,
                               NULL, NULL, event->button, event->time);
        } else if (event->button == 2) {
-               summaryview->display_msg = TRUE;
+               summaryview->display_msg = messageview_is_visible(summaryview->messageview);
        } else if (event->button == 1) {
                if (!prefs_common.emulate_emacs &&
                    messageview_is_visible(summaryview->messageview))
@@ -4723,7 +4757,7 @@ static void summary_drag_data_get(GtkWidget        *widget,
                                (ctree, GTK_CTREE_NODE(cur->data));
                        tmp2 = procmsg_get_message_file(msginfo);
                        if (!tmp2) continue;
-                       tmp1 = g_strconcat("file:/", tmp2, NULL);
+                       tmp1 = g_strconcat("file://", tmp2, NULL);
                        g_free(tmp2);
 
                        if (!mail_list) {