* src/compose.c
[claws.git] / src / summaryview.c
index 72f3a868d31b6c0964df45fb4da6c43dad8105b4..1c6e9c3ccb73e7f0d8b18ba309ead9a203287d02 100644 (file)
@@ -377,6 +377,7 @@ static void news_flag_crosspost             (MsgInfo *msginfo);
 static void tog_searchbar_cb           (GtkWidget      *w,
                                         gpointer        data);
 
+static void summary_update_msg         (MsgInfo *info, gpointer data);
 
 GtkTargetEntry summary_drag_types[1] =
 {
@@ -604,6 +605,8 @@ SummaryView *summary_create(void)
        summaryview->search_type_opt = search_type_opt;
        summaryview->search_type = search_type;
        summaryview->search_string = search_string;
+       summaryview->msginfo_update_callback_id =
+               msginfo_update_callback_register(summary_update_msg, (gpointer) summaryview);
 
        /* CLAWS: need this to get the SummaryView * from
         * the CList */
@@ -2985,13 +2988,19 @@ static void summary_delete_duplicated_func(GtkCTree *ctree, GtkCTreeNode *node,
 {
        GtkCTreeNode *found;
        MsgInfo *msginfo = GTK_CTREE_ROW(node)->row.data;
-
+       MsgInfo *dup_msginfo;
+       
        if (!msginfo->msgid || !*msginfo->msgid) return;
 
        found = g_hash_table_lookup(summaryview->msgid_table, msginfo->msgid);
-
-       if (found && found != node)
-               summary_delete_row(summaryview, node);
+       
+       if (found && found != node) {
+               dup_msginfo = gtk_ctree_node_get_row_data(ctree, found);
+               /* prefer to delete the unread one */
+               if ((MSG_IS_UNREAD(msginfo->flags) && !MSG_IS_UNREAD(dup_msginfo->flags))
+               ||  (MSG_IS_UNREAD(msginfo->flags) == MSG_IS_UNREAD(dup_msginfo->flags)))
+                       summary_delete_row(summaryview, node);
+       }
 }
 
 static void summary_unmark_row(SummaryView *summaryview, GtkCTreeNode *row)
@@ -5311,6 +5320,15 @@ void summary_save_prefs_to_folderitem(SummaryView *summaryview, FolderItem *item
        item->threaded = summaryview->threaded;
 }
 
+static void summary_update_msg(MsgInfo *msginfo, gpointer data) {
+       GtkCTreeNode *node;
+       SummaryView *summaryview = (SummaryView *)data;
+       node = gtk_ctree_find_by_row_data(GTK_CTREE(summaryview->ctree), NULL, msginfo);
+       
+       if (node) 
+               summary_set_row_marks(summaryview, node);
+}
+
 /*
  * End of Source.
  */