2006-09-13 [colin] 2.4.0cvs185
[claws.git] / src / summaryview.c
index 43ebf2589cd2e22cc1bde71dc179af019575cbdb..dc224dc24f6162093c25f945751e6c44c19dc592 100644 (file)
@@ -230,8 +230,6 @@ static void summary_execute_delete_func     (GtkCTree               *ctree,
                                         gpointer                data);
 
 static void summary_thread_init                (SummaryView            *summaryview);
-static void summary_ignore_thread      (SummaryView            *summaryview);
-static void summary_unignore_thread     (SummaryView            *summaryview);
 
 static void summary_unthread_for_exec          (SummaryView    *summaryview);
 static void summary_unthread_for_exec_func     (GtkCTree       *ctree,
@@ -850,6 +848,36 @@ static gboolean summaryview_quicksearch_recurse(gpointer data)
        return FALSE;
 }
 
+static gboolean summary_check_consistency(FolderItem *item, GSList *mlist)
+{
+       int u = 0, n = 0, m = 0, t = 0;
+       GSList *cur;
+       START_TIMING("consistency check");
+       for(cur = mlist ; cur != NULL && cur->data != NULL ; cur = g_slist_next(cur)) {
+               MsgInfo * msginfo = (MsgInfo *) cur->data;
+               t++;
+               if (MSG_IS_NEW(msginfo->flags))
+                       n++;
+               if (MSG_IS_UNREAD(msginfo->flags))
+                       u++;
+               if (MSG_IS_MARKED(msginfo->flags))
+                       m++;            
+       }
+       if (t != item->total_msgs
+       ||  n != item->new_msgs
+       ||  u != item->unread_msgs
+       ||  m != item->marked_msgs
+       ||  (m == 0 && item->unreadmarked_msgs != 0)
+       ||  item->unreadmarked_msgs < 0) {
+               debug_print("Inconsistency\n");
+               folder_item_scan_full(item, FALSE);
+               END_TIMING();
+               return FALSE;
+       } 
+       END_TIMING();
+       return TRUE;
+}
+
 gboolean summary_show(SummaryView *summaryview, FolderItem *item)
 {
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
@@ -968,6 +996,12 @@ START_TIMING("--------- summary_show");
 
        mlist = folder_item_get_msg_list(item);
 
+       if (!summary_check_consistency(item, mlist)) {
+               debug_print("reloading due to inconsistency\n");
+               procmsg_msg_list_free(mlist);
+               mlist = folder_item_get_msg_list(item);
+       }
+
        if (summaryview->folder_item->hide_read_msgs &&
            quicksearch_is_active(summaryview->quicksearch) == FALSE) {
                GSList *not_killed;
@@ -1366,6 +1400,7 @@ void summary_set_menu_sensitive(SummaryView *summaryview)
                {"/Mark/Mark as unread"         , M_TARGET_EXIST},
                {"/Mark/Mark all read"          , M_TARGET_EXIST},
                {"/Mark/Ignore thread"          , M_TARGET_EXIST},
+               {"/Mark/Unignore thread"        , M_TARGET_EXIST},
                {"/Mark/Lock"                   , M_TARGET_EXIST},
                {"/Mark/Unlock"                 , M_TARGET_EXIST},
                {"/Mark/Mark as spam"           , M_TARGET_EXIST|M_CAN_LEARN_SPAM},
@@ -4019,21 +4054,6 @@ void summary_save_as(SummaryView *summaryview)
        g_free(tmp);
 }
 
-#ifdef USE_GNOMEPRINT
-static void print_mimeview(MimeView *mimeview) 
-{
-       if (!mimeview 
-       ||  !mimeview->textview
-       ||  !mimeview->textview->text)
-               alertpanel_warning(_("Cannot print: the message doesn't "
-                                    "contain text."));
-       else {
-               gtk_widget_realize(mimeview->textview->text);
-               gedit_print(GTK_TEXT_VIEW(mimeview->textview->text));
-       }
-}
-#endif
-
 void summary_print(SummaryView *summaryview)
 {
        GtkCList *clist = GTK_CLIST(summaryview->ctree);
@@ -4074,23 +4094,10 @@ void summary_print(SummaryView *summaryview)
             cur != NULL && cur->data != NULL; 
             cur = cur->next) {
                GtkCTreeNode *node = GTK_CTREE_NODE(cur->data);
-               if (node != summaryview->displayed) {
-                       MessageView *tmpview = messageview_create(
-                                               summaryview->mainwin);
-                       MsgInfo *msginfo = gtk_ctree_node_get_row_data(
-                                               GTK_CTREE(summaryview->ctree),
-                                               node);
-
-                       messageview_init(tmpview);
-                       tmpview->all_headers = summaryview->messageview->all_headers;
-                       if (msginfo && messageview_show(tmpview, msginfo, 
-                               tmpview->all_headers) >= 0) {
-                                       print_mimeview(tmpview->mimeview);
-                       }
-                       messageview_destroy(tmpview);
-               } else {
-                       print_mimeview(summaryview->messageview->mimeview);
-               }
+               MsgInfo *msginfo = gtk_ctree_node_get_row_data(
+                                       GTK_CTREE(summaryview->ctree),
+                                       node);
+               messageview_print(msginfo, summaryview->messageview->all_headers);
        }
 #endif
 }
@@ -4614,7 +4621,7 @@ gboolean summary_filter_get_mode(void)
                        _("Filtering"),
                        _("There are some filtering rules that belong to an account.\n"
                          "Please choose what to do with these rules:"),
-                       _("_Filter"), _("_Cancel"), NULL, TRUE, vbox);
+                       _("_Filter"), GTK_STOCK_CANCEL, NULL, TRUE, vbox);
        if ((val & ~G_ALERTDISABLE) != G_ALERTDEFAULT) {
                return FALSE;
        } else if (val & G_ALERTDISABLE)
@@ -5030,6 +5037,8 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview)
                                     GTK_CTREE_EXPANDER_TRIANGLE);
        }
 
+       gtk_sctree_set_stripes(GTK_SCTREE(ctree), prefs_common.use_stripes_in_summaries);
+
        gtk_ctree_set_indent(GTK_CTREE(ctree), 12);
        g_object_set_data(G_OBJECT(ctree), "summaryview", (gpointer)summaryview); 
 
@@ -5950,7 +5959,7 @@ static void summary_ignore_thread_func(GtkCTree *ctree, GtkCTreeNode *row, gpoin
            msginfo->msgnum);
 }
 
-static void summary_ignore_thread(SummaryView *summaryview)
+void summary_ignore_thread(SummaryView *summaryview)
 {
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        GList *cur;
@@ -5982,7 +5991,7 @@ static void summary_unignore_thread_func(GtkCTree *ctree, GtkCTreeNode *row, gpo
            msginfo->msgnum);
 }
 
-static void summary_unignore_thread(SummaryView *summaryview)
+void summary_unignore_thread(SummaryView *summaryview)
 {
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
        GList *cur;