remove unused summary_set_menu_senstive entry
[claws.git] / src / summaryview.c
index b84a73a2bf852246b094b787b112d9e930d2e28b..9f0076f20fcdb7ec599f60cd7fe426219e9e6cad 100644 (file)
@@ -155,6 +155,9 @@ static void summary_write_cache_func        (GtkCTree               *ctree,
 
 static void summary_set_menu_sensitive (SummaryView            *summaryview);
 
+static void summary_set_hide_read_msgs_menu (SummaryView *summaryview,
+                                            guint action);
+
 static guint summary_get_msgnum                (SummaryView            *summaryview,
                                         GtkCTreeNode           *node);
 
@@ -206,12 +209,12 @@ static void summary_set_row_marks (SummaryView            *summaryview,
 /* message handling */
 static void summary_mark_row           (SummaryView            *summaryview,
                                         GtkCTreeNode           *row);
+static void summary_lock_row           (SummaryView            *summaryview,
+                                        GtkCTreeNode           *row);
 static void summary_mark_row_as_read   (SummaryView            *summaryview,
                                         GtkCTreeNode           *row);
 static void summary_mark_row_as_unread (SummaryView            *summaryview,
                                         GtkCTreeNode           *row);
-static void summary_mark_row_as_locked  (SummaryView *summaryview,
-                                        GtkCTreeNode *row);
 static void summary_delete_row         (SummaryView            *summaryview,
                                         GtkCTreeNode           *row);
 static void summary_unmark_row         (SummaryView            *summaryview,
@@ -250,6 +253,7 @@ static void summary_unthread_for_exec_func  (GtkCTree       *ctree,
                                                 GtkCTreeNode   *node,
                                                 gpointer        data);
 
+void summary_processing(SummaryView *summaryview, GSList * mlist);
 static void summary_filter_func                (GtkCTree               *ctree,
                                         GtkCTreeNode           *node,
                                         gpointer                data);
@@ -327,6 +331,8 @@ static void summary_subject_clicked (GtkWidget              *button,
                                         SummaryView            *summaryview);
 static void summary_score_clicked      (GtkWidget              *button,
                                         SummaryView            *summaryview);
+static void summary_locked_clicked     (GtkWidget              *button,
+                                        SummaryView            *summaryview);
 
 static void summary_start_drag         (GtkWidget        *widget, 
                                         int button,
@@ -368,14 +374,12 @@ static gint summary_cmp_by_subject        (GtkCList               *clist,
 static gint summary_cmp_by_score       (GtkCList               *clist,
                                         gconstpointer           ptr1,
                                         gconstpointer           ptr2);
+static gint summary_cmp_by_locked      (GtkCList *clist,
+                                        gconstpointer ptr1, gconstpointer ptr2);
 static gint summary_cmp_by_label       (GtkCList               *clist,
                                         gconstpointer           ptr1,
                                         gconstpointer           ptr2);
 
-#if MARK_ALL_READ
-static void summary_mark_all_read (SummaryView *summaryview);                                   
-#endif
-
 GtkTargetEntry summary_drag_types[1] =
 {
        {"text/plain", GTK_TARGET_SAME_APP, TARGET_DUMMY}
@@ -388,8 +392,6 @@ static GtkItemFactoryEntry summary_popup_entries[] =
        {N_("/Follow-up and reply to"), NULL, summary_reply_cb, COMPOSE_FOLLOWUP_AND_REPLY_TO, NULL},
        {N_("/Reply to a_ll"),          NULL, summary_reply_cb, COMPOSE_REPLY_TO_ALL, NULL},
        {N_("/_Forward"),               NULL, summary_reply_cb, COMPOSE_FORWARD, NULL},
-       {N_("/Forward as a_ttachment"),
-                                       NULL, summary_reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL},
        {N_("/Bounce"),                 NULL, summary_reply_cb, COMPOSE_BOUNCE, NULL},
        {N_("/---"),                    NULL, NULL,             0, "<Separator>"},
        {N_("/Re-_edit"),               NULL, summary_reedit,   0, NULL},
@@ -405,7 +407,6 @@ static GtkItemFactoryEntry summary_popup_entries[] =
        {N_("/_Mark/---"),              NULL, NULL,             0, "<Separator>"},
        {N_("/_Mark/Mark as unr_ead"),  NULL, summary_mark_as_unread, 0, NULL},
        {N_("/_Mark/Mark as rea_d"),    NULL, summary_mark_as_read, 0, NULL},
-       {N_("/_Mark/Mark as _locked"),  NULL, summary_mark_as_locked, 0, NULL},
        {N_("/_Mark/Mark all read"),    NULL, summary_mark_all_read, 0, NULL},
        {N_("/_Mark/Ignore thread"),    NULL, summary_ignore_thread, 0, NULL},
        {N_("/_Mark/Unignore thread"),  NULL, summary_unignore_thread, 0, NULL},
@@ -436,7 +437,8 @@ static const gchar *const col_label[N_SUMMARY_COLS] = {
        N_("Date"),     /* S_COL_DATE    */
        N_("Size"),     /* S_COL_SIZE    */
        N_("No."),      /* S_COL_NUMBER  */
-       N_("Score")     /* S_COL_SCORE   */
+       N_("Score"),    /* S_COL_SCORE   */
+       N_("L")         /* S_COL_LOCKED  */
 };
 
 SummaryView *summary_create(void)
@@ -707,12 +709,9 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
                }
                folder_update_op_count();
        }
-       else if (!summaryview->filtering_happened) {
-               summary_write_cache(summaryview);
-       }
-
-       summaryview->filtering_happened = FALSE;
-
+        
+       summary_write_cache(summaryview);
+        
        summaryview->folderview->opened = selected_node;
 
        gtk_clist_freeze(GTK_CLIST(ctree));
@@ -730,6 +729,7 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
              change_dir(buf) < 0))) {
                g_free(buf);
                debug_print(_("empty folder\n\n"));
+               summary_set_hide_read_msgs_menu(summaryview, FALSE);
                if (is_refresh)
                        messageview_clear(summaryview->messageview);
                summary_clear_all(summaryview);
@@ -754,6 +754,8 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
 
        mlist = item->folder->get_msg_list(item->folder, item, !update_cache);
 
+       summary_processing(summaryview, mlist);
+
        for(cur = mlist ; cur != NULL ; cur = g_slist_next(cur)) {
                MsgInfo * msginfo = (MsgInfo *) cur->data;
 
@@ -766,6 +768,31 @@ gboolean summary_show(SummaryView *summaryview, FolderItem *item,
        }
 
        summaryview->killed_messages = NULL;
+
+       if (summaryview->folder_item->hide_read_msgs) {
+               GSList *not_killed;
+               gint kill_score;
+               
+               summary_set_hide_read_msgs_menu(summaryview, TRUE);
+               not_killed = NULL;
+               for(cur = mlist ; cur != NULL ; cur = g_slist_next(cur)) {
+                       MsgInfo * msginfo = (MsgInfo *) cur->data;
+                       
+                       if ((MSG_IS_UNREAD(msginfo->flags)
+                            || MSG_IS_MARKED(msginfo->flags)
+                            || MSG_IS_LOCKED(msginfo->flags))
+                            && !MSG_IS_IGNORE_THREAD(msginfo->flags))
+                           not_killed = g_slist_append(not_killed, msginfo);
+                       else
+                               summaryview->killed_messages = 
+                                       g_slist_append(summaryview->killed_messages, msginfo);
+               }
+               g_slist_free(mlist);
+               mlist = not_killed;
+       } else {
+               summary_set_hide_read_msgs_menu(summaryview, FALSE);
+       }
+
        if ((global_scoring || item->prefs->scoring) &&
            (item->folder->type == F_NEWS)) {
                GSList *not_killed;
@@ -1001,7 +1028,6 @@ static void summary_set_menu_sensitive(SummaryView *summaryview)
 
        menu_set_sensitive(ifactory, "/Mark/Mark as unread", TRUE);
        menu_set_sensitive(ifactory, "/Mark/Mark as read",   TRUE);
-       menu_set_sensitive(ifactory, "/Mark/Mark as locked", TRUE);
        menu_set_sensitive(ifactory, "/Mark/Mark all read", TRUE);
        menu_set_sensitive(ifactory, "/Mark/Ignore thread",   TRUE);
        menu_set_sensitive(ifactory, "/Mark/Unignore thread", TRUE);
@@ -1013,7 +1039,6 @@ static void summary_set_menu_sensitive(SummaryView *summaryview)
        menu_set_sensitive(ifactory, "/Reply to sender",          sens);
        menu_set_sensitive(ifactory, "/Reply to all",             sens);
        menu_set_sensitive(ifactory, "/Forward",                  TRUE);
-       menu_set_sensitive(ifactory, "/Forward as attachment",    TRUE);
        menu_set_sensitive(ifactory, "/Bounce",                   TRUE);
 
        menu_set_sensitive(ifactory, "/Add sender to address book", sens);
@@ -1308,7 +1333,8 @@ static GtkCTreeNode *summary_find_prev_msg(SummaryView *summaryview,
 
        for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) {
                msginfo = gtk_ctree_node_get_row_data(ctree, node);
-               if (!MSG_IS_DELETED(msginfo->flags)) break;
+               if (!MSG_IS_DELETED(msginfo->flags))
+                       break;
        }
 
        return node;
@@ -1328,7 +1354,8 @@ static GtkCTreeNode *summary_find_next_msg(SummaryView *summaryview,
 
        for (; node != NULL; node = gtkut_ctree_node_next(ctree, node)) {
                msginfo = gtk_ctree_node_get_row_data(ctree, node);
-               if (!MSG_IS_DELETED(msginfo->flags)) break;
+               if (!MSG_IS_DELETED(msginfo->flags))
+                       break;
        }
 
        return node;
@@ -1623,6 +1650,7 @@ static void summary_status_show(SummaryView *summaryview)
        gchar *del, *mv, *cp;
        gchar *sel;
        gchar *spc;
+       gchar *itstr;
        GList *rowlist, *cur;
        guint n_selected = 0;
        off_t sel_size = 0;
@@ -1673,19 +1701,26 @@ static void summary_status_show(SummaryView *summaryview)
        else
                spc = "";
 
-       if (n_selected)
+       if (n_selected) {
                sel = g_strdup_printf(" (%s)", to_human_readable(sel_size));
-       else
+               if (n_selected == 1)
+                       itstr = g_strdup(_(" item selected"));
+               else
+                       itstr = g_strdup(_(" items selected"));
+       } else {
                sel = g_strdup("");
+               itstr = g_strdup("");
+       }
+               
        str = g_strconcat(n_selected ? itos(n_selected) : "",
-                         n_selected ? _(" item(s) selected") : "",
-                         sel, spc, del, mv, cp, NULL);
+                                       itstr, sel, spc, del, mv, cp, NULL);
        gtk_label_set(GTK_LABEL(summaryview->statlabel_select), str);
        g_free(str);
        g_free(sel);
        g_free(del);
        g_free(mv);
        g_free(cp);
+       g_free(itstr);
 
        if (summaryview->folder_item &&
            FOLDER_IS_LOCAL(summaryview->folder_item->folder)) {
@@ -1830,6 +1865,9 @@ void summary_sort(SummaryView *summaryview, SummarySortType type)
        case SORT_BY_SCORE:
                cmp_func = (GtkCListCompareFunc)summary_cmp_by_score;
                break;
+       case SORT_BY_LOCKED:
+               cmp_func = (GtkCListCompareFunc)summary_cmp_by_locked;
+               break;
        case SORT_BY_LABEL:
                cmp_func = (GtkCListCompareFunc)summary_cmp_by_label;
                break;
@@ -2134,6 +2172,7 @@ static void summary_set_header(SummaryView *summaryview, gchar *text[],
        text[col_pos[S_COL_MARK]]   = NULL;
        text[col_pos[S_COL_UNREAD]] = NULL;
        text[col_pos[S_COL_MIME]]   = NULL;
+       text[col_pos[S_COL_LOCKED]] = NULL;
        text[col_pos[S_COL_NUMBER]] = itos(msginfo->msgnum);
        text[col_pos[S_COL_SIZE]]   = to_human_readable(msginfo->size);
 
@@ -2141,7 +2180,7 @@ static void summary_set_header(SummaryView *summaryview, gchar *text[],
        text[col_pos[S_COL_SCORE]]  = itos_buf(col_score, msginfo->threadscore);
 #else
        text[col_pos[S_COL_SCORE]]  = itos_buf(col_score, msginfo->score);
-#endif
+#endif 
 
        if (msginfo->date_t) {
                procheader_date_get_localtime(date_modified,
@@ -2357,7 +2396,7 @@ static void summary_toggle_view(SummaryView *summaryview)
                summaryview->msg_is_toggled_on = FALSE;
                summaryview->displayed = NULL;
                gtk_widget_ref(vpaned);
-               gtk_container_remove(GTK_CONTAINER(container), vpaned);
+               gtkut_container_remove(GTK_CONTAINER(container), vpaned);
                gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), container);
                gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow),
                              GTK_ARROW_UP, GTK_SHADOW_OUT);
@@ -2561,7 +2600,40 @@ static void summary_mark_row(SummaryView *summaryview, GtkCTreeNode *row)
        MSG_SET_PERM_FLAGS(msginfo->flags, MSG_MARKED);
        CHANGE_FLAGS(msginfo);
        summary_set_row_marks(summaryview, row);
-       debug_print(_("Message %d is marked\n"), msginfo->msgnum);
+       imap_do_mark(msginfo);
+       debug_print(_("Message %s/%d is marked\n"), msginfo->folder->path, msginfo->msgnum);
+}
+
+static void summary_lock_row(SummaryView *summaryview, GtkCTreeNode *row)
+{
+       /* almost verbatim summary_mark_row(); may want a menu action? */
+       gboolean changed = FALSE;
+       GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
+       MsgInfo *msginfo;
+
+       msginfo = gtk_ctree_node_get_row_data(ctree, row);
+       if (MSG_IS_DELETED(msginfo->flags))
+               summaryview->deleted--;
+       if (MSG_IS_MOVE(msginfo->flags)) {
+               summaryview->moved--;
+               changed = TRUE;
+       }
+       if (MSG_IS_COPY(msginfo->flags)) {
+               summaryview->copied--;
+               changed = TRUE;
+       }
+       if (changed && !prefs_common.immediate_exec) {
+               msginfo->to_folder->op_count--;
+               if (msginfo->to_folder->op_count == 0)
+                       folderview_update_item(msginfo->to_folder, 0);
+       }
+       msginfo->to_folder = NULL;
+       MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
+       MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
+       MSG_SET_PERM_FLAGS(msginfo->flags, MSG_LOCKED);
+       CHANGE_FLAGS(msginfo);
+       summary_set_row_marks(summaryview, row);
+       debug_print(_("Message %d is locked\n"), msginfo->msgnum);
 }
 
 void summary_mark(SummaryView *summaryview)
@@ -2654,29 +2726,6 @@ static void summary_mark_row_as_unread(SummaryView *summaryview,
        summary_set_row_marks(summaryview, row);
 }
 
-static void summary_mark_row_as_locked(SummaryView *summaryview,
-                                      GtkCTreeNode *row)
-{
-       GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
-       MsgInfo *msginfo;
-
-       msginfo = gtk_ctree_node_get_row_data(ctree, row);
-       if (MSG_IS_DELETED(msginfo->flags)) {
-               msginfo->to_folder = NULL;
-               MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_DELETED);
-               summaryview->deleted--;
-       }
-       if (!MSG_IS_LOCKED(msginfo->flags)) {
-               MSG_SET_PERM_FLAGS(msginfo->flags, MSG_LOCKED);
-               debug_print(_("Message %d is marked as locked\n"),
-                           msginfo->msgnum);
-       }
-
-       CHANGE_FLAGS(msginfo);
-
-       summary_set_row_marks(summaryview, row);
-}
-
 void summary_mark_as_unread(SummaryView *summaryview)
 {
        GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
@@ -2689,18 +2738,6 @@ void summary_mark_as_unread(SummaryView *summaryview)
        summary_status_show(summaryview);
 }
 
-void summary_mark_as_locked(SummaryView *summaryview)
-{
-       GtkCTree *ctree = GTK_CTREE(summaryview->ctree);
-       GList *cur;
-
-       for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next)
-               summary_mark_row_as_locked(summaryview,
-                                          GTK_CTREE_NODE(cur->data));
-
-       summary_status_show(summaryview);
-}
-
 static void summary_delete_row(SummaryView *summaryview, GtkCTreeNode *row)
 {
        gboolean changed = FALSE;
@@ -2709,6 +2746,8 @@ static void summary_delete_row(SummaryView *summaryview, GtkCTreeNode *row)
 
        msginfo = gtk_ctree_node_get_row_data(ctree, row);
 
+       if (MSG_IS_LOCKED(msginfo->flags)) return;
+
        if (MSG_IS_DELETED(msginfo->flags)) return;
 
        if (MSG_IS_MOVE(msginfo->flags)) {
@@ -2854,7 +2893,7 @@ static void summary_unmark_row(SummaryView *summaryview, GtkCTreeNode *row)
        MSG_UNSET_TMP_FLAGS(msginfo->flags, MSG_MOVE | MSG_COPY);
        CHANGE_FLAGS(msginfo);
        summary_set_row_marks(summaryview, row);
-
+       imap_do_unmark(msginfo);
        debug_print(_("Message %s/%d is unmarked\n"),
                    msginfo->folder->path, msginfo->msgnum);
 }
@@ -3550,6 +3589,62 @@ static void summary_unthread_for_exec_func(GtkCTree *ctree, GtkCTreeNode *node,
        }
 }
 
+void summary_processing(SummaryView *summaryview, GSList * mlist)
+{
+       GSList * processing_list;
+       FolderItem * folder_item;
+       GSList * cur;
+       gchar * id;
+       gchar * buf;
+
+       folder_item = summaryview->folder_item;
+       if (folder_item == NULL)
+               return;
+
+       processing_list = folder_item->prefs->processing;
+
+       if (processing_list == NULL)
+               return;
+
+       summary_lock(summaryview);
+       
+       buf = g_strdup_printf(_("Processing (%s)..."), folder_item->path);
+       debug_print(buf);
+       STATUSBAR_PUSH(summaryview->mainwin, buf);
+       g_free(buf);
+
+       main_window_cursor_wait(summaryview->mainwin);
+
+       summaryview->folder_table = g_hash_table_new(NULL, NULL);
+
+       for(cur = mlist ; cur != NULL ; cur = cur->next) {
+               MsgInfo * msginfo;
+
+               msginfo = (MsgInfo *) cur->data;
+               filter_msginfo_move_or_delete(processing_list, msginfo,
+                                             summaryview->folder_table);
+       }
+       
+       folder_item_scan_foreach(summaryview->folder_table);
+       folderview_update_item_foreach(summaryview->folder_table);
+       
+       g_hash_table_destroy(summaryview->folder_table);
+       summaryview->folder_table = NULL;
+       
+       if (prefs_common.immediate_exec) {
+               summary_unlock(summaryview);
+               summary_execute(summaryview);
+               summary_lock(summaryview);
+       } else
+               summary_status_show(summaryview);
+
+       debug_print(_("done.\n"));
+       STATUSBAR_POP(summaryview->mainwin);
+       main_window_cursor_normal(summaryview->mainwin);
+
+       summary_unlock(summaryview);
+}
+
 void summary_filter(SummaryView *summaryview)
 {
        if (!prefs_common.fltlist && !global_processing) {
@@ -3904,6 +3999,7 @@ static GtkWidget *summary_ctree_create(SummaryView *summaryview)
        CLIST_BUTTON_SIGNAL_CONNECT(S_COL_FROM   , summary_from_clicked);
        CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SUBJECT, summary_subject_clicked);
        CLIST_BUTTON_SIGNAL_CONNECT(S_COL_SCORE,   summary_score_clicked);
+       CLIST_BUTTON_SIGNAL_CONNECT(S_COL_LOCKED,  summary_locked_clicked);
 
 #undef CLIST_BUTTON_SIGNAL_CONNECT
 
@@ -4262,6 +4358,15 @@ static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row,
                        summary_status_show(summaryview);
                }
                break;
+       case S_COL_LOCKED:
+               if (MSG_IS_LOCKED(msginfo->flags)) {
+                       MSG_UNSET_PERM_FLAGS(msginfo->flags, MSG_LOCKED);
+                       CHANGE_FLAGS(msginfo);
+                       summary_set_row_marks(summaryview, row);
+               }
+               else
+                       summary_lock_row(summaryview, row);
+               break;
        default:
                break;
        }
@@ -4327,7 +4432,16 @@ static void summary_reply_cb(SummaryView *summaryview, guint action,
                compose_reply(msginfo, FALSE, TRUE, FALSE);
                break;
        case COMPOSE_FORWARD:
-               if (!sel->next) {
+               if (prefs_common.forward_as_attachment) {
+                       summary_reply_cb(summaryview, COMPOSE_FORWARD_AS_ATTACH, widget);
+                       return;
+               } else {
+                       summary_reply_cb(summaryview, COMPOSE_FORWARD_INLINE, widget);
+                       return;
+               }
+               break;
+       case COMPOSE_FORWARD_INLINE:
+               if (!sel->next) {
                        compose_forward(NULL, msginfo, FALSE);
                        break;
                }
@@ -4397,6 +4511,12 @@ static void summary_score_clicked(GtkWidget *button,
        summary_sort(summaryview, SORT_BY_SCORE);
 }
 
+static void summary_locked_clicked(GtkWidget *button,
+                                 SummaryView *summaryview)
+{
+       summary_sort(summaryview, SORT_BY_LOCKED);
+}
+
 static void summary_size_clicked(GtkWidget *button, SummaryView *summaryview)
 {
        summary_sort(summaryview, SORT_BY_SIZE);
@@ -4594,6 +4714,15 @@ static gint summary_cmp_by_score(GtkCList *clist,
                return summary_cmp_by_date(clist, ptr1, ptr2);
 }
 
+static gint summary_cmp_by_locked(GtkCList *clist,
+                                 gconstpointer ptr1, gconstpointer ptr2)
+{
+       MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data;
+       MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data;
+
+       return MSG_IS_LOCKED(msginfo1->flags) - MSG_IS_LOCKED(msginfo2->flags);
+}
+
 static void summary_ignore_thread_func(GtkCTree *ctree, GtkCTreeNode *row, gpointer data)
 {
        SummaryView *summaryview = (SummaryView *) data;
@@ -4655,6 +4784,89 @@ static void summary_unignore_thread(SummaryView *summaryview)
 
        summary_status_show(summaryview);
 }
+
+
+static gboolean processing_apply_func(GNode *node, gpointer data)
+{
+       FolderItem *item;
+       GSList * processing;
+       SummaryView * summaryview = (SummaryView *) data;
+       
+       if (node == NULL)
+               return FALSE;
+
+       item = node->data;
+       /* prevent from the warning */
+       if (item->path == NULL)
+               return FALSE;
+       processing = item->prefs->processing;
+
+       if (processing != NULL) {
+               gchar * buf;
+               GSList * mlist;
+               GSList * cur;
+
+               buf = g_strdup_printf(_("Processing (%s)..."), item->path);
+               debug_print(buf);
+               STATUSBAR_PUSH(summaryview->mainwin, buf);
+               g_free(buf);
+
+               mlist = item->folder->get_msg_list(item->folder, item,
+                                                  TRUE);
+               
+               for(cur = mlist ; cur != NULL ; cur = cur->next) {
+                       MsgInfo * msginfo;
+                       
+                       msginfo = (MsgInfo *) cur->data;
+                       filter_msginfo_move_or_delete(processing, msginfo,
+                                                     NULL);
+                       procmsg_msginfo_free(msginfo);
+               }
+
+               g_slist_free(mlist);
+               
+               STATUSBAR_POP(summaryview->mainwin);
+       }
+
+
+       return FALSE;
+}
+
+void processing_apply(SummaryView * summaryview)
+{
+       GList * cur;
+
+       for (cur = folder_get_list() ; cur != NULL ; cur = g_list_next(cur)) {
+               Folder *folder;
+
+               folder = (Folder *) cur->data;
+               g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1,
+                               processing_apply_func, summaryview);
+       }
+}
+
+void summary_toggle_show_read_messages(SummaryView *summaryview)
+{
+       if (summaryview->folder_item->hide_read_msgs)
+               summaryview->folder_item->hide_read_msgs = 0;
+       else
+               summaryview->folder_item->hide_read_msgs = 1;
+       summary_show(summaryview, summaryview->folder_item, FALSE);
+}
+static void summary_set_hide_read_msgs_menu (SummaryView *summaryview,
+                                            guint action)
+{
+       GtkWidget *widget;
+       widget = gtk_item_factory_get_item(gtk_item_factory_from_widget(summaryview->mainwin->menubar),
+                                          "/Summary/Hide read messages");
+       gtk_object_set_data(GTK_OBJECT(widget), "dont_toggle",
+                           GINT_TO_POINTER(1));
+       gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(widget), action);
+       gtk_object_set_data(GTK_OBJECT(widget), "dont_toggle",
+                           GINT_TO_POINTER(0));
+}
 /*
  * End of Source.
  */