diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mainwindow.c | 84 | ||||
-rw-r--r-- | src/mainwindow.h | 1 | ||||
-rw-r--r-- | src/prefs_common.c | 145 | ||||
-rw-r--r-- | src/prefs_common.h | 6 | ||||
-rw-r--r-- | src/summaryview.c | 112 | ||||
-rw-r--r-- | src/summaryview.h | 3 |
6 files changed, 333 insertions, 18 deletions
diff --git a/src/mainwindow.c b/src/mainwindow.c index 89827960..59be3ab5 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -43,6 +43,7 @@ #include <gtk/gtktooltips.h> #include <gtk/gtkarrow.h> #include <gtk/gtkstock.h> +#include <gtk/gtkimage.h> #include <string.h> #include "main.h" @@ -133,6 +134,8 @@ static void toolbar_forward_cb (GtkWidget *widget, static void toolbar_delete_cb (GtkWidget *widget, gpointer data); +static void toolbar_junk_cb (GtkWidget *widget, + gpointer data); static void toolbar_exec_cb (GtkWidget *widget, gpointer data); @@ -318,6 +321,10 @@ static void mark_all_read_cb (MainWindow *mainwin, guint action, GtkWidget *widget); +static void junk_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + static void reedit_cb (MainWindow *mainwin, guint action, GtkWidget *widget); @@ -686,7 +693,7 @@ static GtkItemFactoryEntry mainwin_entries[] = {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, {N_("/_Message/M_ove..."), "<control>O", move_to_cb, 0, NULL}, {N_("/_Message/_Copy..."), "<shift><control>O", copy_to_cb, 0, NULL}, - {N_("/_Message/_Delete"), "<control>D", delete_cb, 0, NULL}, + {N_("/_Message/_Delete"), "<control>D", delete_cb, 0, NULL}, {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, {N_("/_Message/_Mark"), NULL, NULL, 0, "<Branch>"}, {N_("/_Message/_Mark/_Mark"), "<shift>asterisk", mark_cb, 0, NULL}, @@ -697,6 +704,9 @@ static GtkItemFactoryEntry mainwin_entries[] = NULL, mark_as_read_cb, 0, NULL}, {N_("/_Message/_Mark/Mark all _read"), NULL, mark_all_read_cb, 0, NULL}, {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/Set as _junk mail"), "<control>J", junk_cb, 0, NULL}, + {N_("/_Message/Set as not j_unk mail"), "<shift><control>J", junk_cb, 1, NULL}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, {N_("/_Message/Re-_edit"), NULL, reedit_cb, 0, NULL}, {N_("/_Tools"), NULL, NULL, 0, "<Branch>"}, @@ -1114,6 +1124,11 @@ void main_window_reflect_prefs_all(void) main_window_set_menu_sensitive(mainwin); main_window_set_toolbar_sensitive(mainwin); + if (prefs_common.enable_junk) + gtk_widget_show(mainwin->junk_btn); + else + gtk_widget_hide(mainwin->junk_btn); + if (prefs_common.immediate_exec) gtk_widget_hide(mainwin->exec_btn); else @@ -1589,15 +1604,16 @@ typedef enum M_UNTHREADED = 1 << 8, M_ALLOW_DELETE = 1 << 9, M_INC_ACTIVE = 1 << 10, - - M_FOLDER_NEWOK = 1 << 11, - M_FOLDER_RENOK = 1 << 12, - M_FOLDER_DELOK = 1 << 13, - M_MBOX_ADDOK = 1 << 14, - M_MBOX_RMOK = 1 << 15, - M_MBOX_CHKOK = 1 << 16, - M_MBOX_CHKALLOK = 1 << 17, - M_MBOX_REBUILDOK = 1 << 18 + M_ENABLE_JUNK = 1 << 11, + + M_FOLDER_NEWOK = 1 << 17, + M_FOLDER_RENOK = 1 << 18, + M_FOLDER_DELOK = 1 << 19, + M_MBOX_ADDOK = 1 << 20, + M_MBOX_RMOK = 1 << 21, + M_MBOX_CHKOK = 1 << 22, + M_MBOX_CHKALLOK = 1 << 23, + M_MBOX_REBUILDOK = 1 << 24 } SensitiveCond; static SensitiveCond main_window_get_current_state(MainWindow *mainwin) @@ -1637,6 +1653,9 @@ static SensitiveCond main_window_get_current_state(MainWindow *mainwin) if (inc_is_active()) state |= M_INC_ACTIVE; + if (prefs_common.enable_junk) + state |= M_ENABLE_JUNK; + item = folderview_get_selected_item(mainwin->folderview); if (item) { state |= M_FOLDER_NEWOK; @@ -1672,7 +1691,7 @@ void main_window_set_toolbar_sensitive(MainWindow *mainwin) struct { GtkWidget *widget; SensitiveCond cond; - } entry[12]; + } entry[13]; #define SET_WIDGET_COND(w, c) \ { \ @@ -1700,6 +1719,8 @@ void main_window_set_toolbar_sensitive(MainWindow *mainwin) SET_WIDGET_COND(mainwin->next_btn, M_MSG_EXIST); SET_WIDGET_COND(mainwin->delete_btn, M_TARGET_EXIST|M_ALLOW_DELETE); + SET_WIDGET_COND(mainwin->junk_btn, + M_TARGET_EXIST|M_ALLOW_DELETE|M_ENABLE_JUNK); SET_WIDGET_COND(mainwin->exec_btn, M_MSG_EXIST|M_EXEC); SET_WIDGET_COND(NULL, 0); @@ -1786,6 +1807,8 @@ void main_window_set_menu_sensitive(MainWindow *mainwin) {"/Message/Copy..." , M_TARGET_EXIST|M_EXEC}, {"/Message/Delete" , M_TARGET_EXIST|M_ALLOW_DELETE}, {"/Message/Mark" , M_TARGET_EXIST}, + {"/Message/Set as junk mail" , M_TARGET_EXIST|M_ALLOW_DELETE|M_ENABLE_JUNK}, + {"/Message/Set as not junk mail" , M_TARGET_EXIST|M_ALLOW_DELETE|M_ENABLE_JUNK}, {"/Message/Re-edit" , M_HAVE_ACCOUNT|M_ALLOW_REEDIT}, {"/Tools/Add sender to address book" , M_SINGLE_TARGET_EXIST}, @@ -2139,6 +2162,7 @@ static void main_window_toolbar_create(MainWindow *mainwin, #endif GtkWidget *next_btn; GtkWidget *delete_btn; + GtkWidget *junk_btn; GtkWidget *exec_btn; gint n_entries; @@ -2147,6 +2171,8 @@ static void main_window_toolbar_create(MainWindow *mainwin, gtk_toolbar_set_orientation(GTK_TOOLBAR(toolbar), GTK_ORIENTATION_HORIZONTAL); gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH); + gtk_toolbar_set_icon_size(GTK_TOOLBAR(toolbar), + GTK_ICON_SIZE_SMALL_TOOLBAR); gtk_container_add(GTK_CONTAINER(container), toolbar); gtk_widget_set_size_request(toolbar, 1, -1); @@ -2237,7 +2263,8 @@ static void main_window_toolbar_create(MainWindow *mainwin, gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); - icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_CLOSE); + icon_wid = gtk_image_new_from_stock(GTK_STOCK_DELETE, + GTK_ICON_SIZE_SMALL_TOOLBAR); delete_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), _("Delete"), _("Delete the message"), @@ -2246,7 +2273,18 @@ static void main_window_toolbar_create(MainWindow *mainwin, G_CALLBACK(toolbar_delete_cb), mainwin); - icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_EXEC); + icon_wid = gtk_image_new_from_stock(GTK_STOCK_CANCEL, + GTK_ICON_SIZE_SMALL_TOOLBAR); + junk_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Junk"), + _("Set as junk mail"), + "Junk", + icon_wid, + G_CALLBACK(toolbar_junk_cb), + mainwin); + + icon_wid = gtk_image_new_from_stock(GTK_STOCK_EXECUTE, + GTK_ICON_SIZE_SMALL_TOOLBAR); exec_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), _("Execute"), _("Execute marked process"), @@ -2255,7 +2293,8 @@ static void main_window_toolbar_create(MainWindow *mainwin, G_CALLBACK(toolbar_exec_cb), mainwin); - icon_wid = stock_pixmap_widget(container, STOCK_PIXMAP_DOWN_ARROW); + icon_wid = gtk_image_new_from_stock(GTK_STOCK_GO_DOWN, + GTK_ICON_SIZE_SMALL_TOOLBAR); next_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), _("Next"), _("Next unread message"), @@ -2303,6 +2342,7 @@ static void main_window_toolbar_create(MainWindow *mainwin, #endif mainwin->next_btn = next_btn; mainwin->delete_btn = delete_btn; + mainwin->junk_btn = junk_btn; mainwin->exec_btn = exec_btn; gtk_widget_show_all(toolbar); @@ -2377,6 +2417,14 @@ static void toolbar_delete_cb (GtkWidget *widget, summary_delete(mainwin->summaryview); } +static void toolbar_junk_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + summary_junk(mainwin->summaryview); +} + static void toolbar_exec_cb (GtkWidget *widget, gpointer data) { @@ -2907,6 +2955,14 @@ static void mark_all_read_cb(MainWindow *mainwin, guint action, summary_mark_all_read(mainwin->summaryview); } +static void junk_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + if (action == 0) + summary_junk(mainwin->summaryview); + else + summary_not_junk(mainwin->summaryview); +} + static void reedit_cb(MainWindow *mainwin, guint action, GtkWidget *widget) { summary_reedit(mainwin->summaryview); diff --git a/src/mainwindow.h b/src/mainwindow.h index 283ee1ce..60d5c019 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -96,6 +96,7 @@ struct _MainWindow GtkWidget *account_btn; GtkWidget *next_btn; GtkWidget *delete_btn; + GtkWidget *junk_btn; GtkWidget *exec_btn; /* body */ diff --git a/src/prefs_common.c b/src/prefs_common.c index fb68acc6..021f09ec 100644 --- a/src/prefs_common.c +++ b/src/prefs_common.c @@ -44,6 +44,7 @@ #include "summaryview.h" #include "messageview.h" #include "manage_window.h" +#include "foldersel.h" #include "inc.h" #include "menu.h" #include "codeconv.h" @@ -150,6 +151,13 @@ static struct Message { GtkWidget *chkbtn_inline_image; } message; +static struct JunkMail { + GtkWidget *chkbtn_enable_junk; + GtkWidget *entry_junk_learncmd; + GtkWidget *entry_nojunk_learncmd; + GtkWidget *entry_junkfolder; +} junk; + #if USE_GPGME static struct Privacy { GtkWidget *checkbtn_auto_check_signatures; @@ -567,6 +575,20 @@ static PrefParam param[] = { {"mime_open_command", "gedit '%s'", &prefs_common.mime_open_cmd, P_STRING, NULL, NULL, NULL}, + /* Junk mail */ + {"enable_junk", "FALSE", &prefs_common.enable_junk, P_BOOL, + &junk.chkbtn_enable_junk, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"junk_learn_command", "bogofilter -s -I", + &prefs_common.junk_learncmd, P_STRING, + &junk.entry_junk_learncmd, prefs_set_data_from_entry, prefs_set_entry}, + {"nojunk_learn_command", "bogofilter -n -I", + &prefs_common.nojunk_learncmd, P_STRING, + &junk.entry_nojunk_learncmd, + prefs_set_data_from_entry, prefs_set_entry}, + {"junk_folder", NULL, &prefs_common.junk_folder, P_STRING, + &junk.entry_junkfolder, prefs_set_data_from_entry, prefs_set_entry}, + #if USE_GPGME /* Privacy */ {"auto_check_signatures", "TRUE", @@ -675,6 +697,7 @@ static void prefs_compose_create (void); static void prefs_quote_create (void); static void prefs_display_create (void); static void prefs_message_create (void); +static void prefs_junk_create (void); #if USE_GPGME static void prefs_privacy_create (void); #endif @@ -743,6 +766,9 @@ static gboolean prefs_keybind_key_pressed (GtkWidget *widget, static void prefs_keybind_cancel (void); static void prefs_keybind_apply_clicked (GtkWidget *widget); +static void prefs_common_select_folder_cb (GtkWidget *widget, + gpointer data); + static gint prefs_common_deleted (GtkWidget *widget, GdkEventAny *event, gpointer data); @@ -864,6 +890,8 @@ static void prefs_common_create(void) SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++); prefs_message_create(); SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++); + prefs_junk_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Junk mail"), page++); #if USE_GPGME prefs_privacy_create(); SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++); @@ -1872,6 +1900,108 @@ static void prefs_message_create(void) message.chkbtn_inline_image = chkbtn_inline_image; } +static void prefs_junk_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *frame; + GtkWidget *hbox; + GtkWidget *chkbtn_enable_junk; + GtkWidget *label; + GtkWidget *entry_junk_learncmd; + GtkWidget *entry_nojunk_learncmd; + GtkWidget *vbox3; + GtkWidget *entry_junkfolder; + GtkWidget *btn_folder; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + chkbtn_enable_junk = gtk_check_button_new_with_label + (_("Enable Junk mail control")); + gtk_widget_show(chkbtn_enable_junk); + + PACK_FRAME(vbox1, frame, NULL); + gtk_frame_set_label_widget(GTK_FRAME(frame), chkbtn_enable_junk); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (frame), vbox2); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); + SET_TOGGLE_SENSITIVITY (chkbtn_enable_junk, vbox2); + + label = gtk_label_new (_("Learning command:")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + + label = gtk_label_new (_("Junk")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + entry_junk_learncmd = gtk_entry_new (); + gtk_widget_show (entry_junk_learncmd); + gtk_box_pack_start (GTK_BOX (hbox), entry_junk_learncmd, TRUE, TRUE, 0); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + + label = gtk_label_new (_("Not Junk")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + entry_nojunk_learncmd = gtk_entry_new (); + gtk_widget_show (entry_nojunk_learncmd); + gtk_box_pack_start (GTK_BOX (hbox), entry_nojunk_learncmd, + TRUE, TRUE, 0); + + PACK_VSPACER(vbox2, vbox3, 0); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + + label = gtk_label_new (_("Junk folder")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + entry_junkfolder = gtk_entry_new (); + gtk_widget_show (entry_junkfolder); + gtk_box_pack_start (GTK_BOX (hbox), entry_junkfolder, TRUE, TRUE, 0); + + btn_folder = gtk_button_new_with_label (_(" ... ")); + gtk_widget_show (btn_folder); + gtk_box_pack_start (GTK_BOX (hbox), btn_folder, FALSE, FALSE, 0); + g_signal_connect (G_OBJECT (btn_folder), "clicked", + G_CALLBACK (prefs_common_select_folder_cb), + entry_junkfolder); + + PACK_VSPACER(vbox2, vbox3, 0); + + label = gtk_label_new + (_("Specify command line for learning junk mail.\n" + "You must add a filter rule to enable automatic filtering " + "using the result of this learning.")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (vbox2), label, FALSE, FALSE, 0); + gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); + gtkut_widget_set_small_font_size (label); + + junk.chkbtn_enable_junk = chkbtn_enable_junk; + junk.entry_junk_learncmd = entry_junk_learncmd; + junk.entry_nojunk_learncmd = entry_nojunk_learncmd; + junk.entry_junkfolder = entry_junkfolder; +} + #if USE_GPGME static void prefs_privacy_create(void) { @@ -3530,6 +3660,21 @@ static void prefs_common_recv_dialog_set_optmenu(PrefParam *pparam) gtk_menu_item_activate(GTK_MENU_ITEM(menuitem)); } +static void prefs_common_select_folder_cb(GtkWidget *widget, gpointer data) +{ + FolderItem *item; + gchar *id; + + item = foldersel_folder_sel(NULL, FOLDER_SEL_COPY, NULL); + if (item && item->path) { + id = folder_item_get_identifier(item); + if (id) { + gtk_entry_set_text(GTK_ENTRY(data), id); + g_free(id); + } + } +} + static gint prefs_common_deleted(GtkWidget *widget, GdkEventAny *event, gpointer data) { diff --git a/src/prefs_common.h b/src/prefs_common.h index e0e53aa9..95dd31b7 100644 --- a/src/prefs_common.h +++ b/src/prefs_common.h @@ -186,6 +186,12 @@ struct _PrefsCommon GList *mime_open_cmd_history; + /* Junk Mail */ + gboolean enable_junk; + gchar *junk_learncmd; + gchar *nojunk_learncmd; + gchar *junk_folder; + #if USE_GPGME /* Privacy */ gboolean auto_check_signatures; diff --git a/src/summaryview.c b/src/summaryview.c index 34a5d5bc..ddcf86e9 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -815,15 +815,15 @@ gboolean summary_is_locked(SummaryView *summaryview) SummarySelection summary_get_selection_type(SummaryView *summaryview) { SummarySelection selection; - gint count; + GList *rows; - count = gtk_tree_selection_count_selected_rows(summaryview->selection); + rows = summary_get_selected_rows(summaryview); if (!summaryview->folder_item || summaryview->folder_item->total == 0) selection = SUMMARY_NONE; - else if (count == 0) + else if (!rows) selection = SUMMARY_SELECTED_NONE; - else if (count == 1) + else if (rows && !rows->next) selection = SUMMARY_SELECTED_SINGLE; else selection = SUMMARY_SELECTED_MULTIPLE; @@ -3671,6 +3671,110 @@ void summary_filter_open(SummaryView *summaryview, PrefsFilterType type) g_free(key); } +static void summary_junk_func(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer data) +{ + FilterRule rule = {NULL, FLT_OR, NULL, NULL, FLT_TIMING_ANY, TRUE}; + FilterAction action1 = {FLT_ACTION_EXEC, NULL, 0}; + FilterAction action2 = {FLT_ACTION_MOVE, NULL, 0}; + SummaryView *summaryview = (SummaryView *)data; + MsgInfo *msginfo; + FilterInfo *fltinfo; + gchar *file; + gint ret; + + gtk_tree_model_get(model, iter, S_COL_MSG_INFO, &msginfo, -1); + file = procmsg_get_message_file(msginfo); + g_return_if_fail(file != NULL); + + action1.str_value = prefs_common.junk_learncmd; + action2.str_value = prefs_common.junk_folder; + + rule.action_list = g_slist_append(rule.action_list, &action1); + rule.action_list = g_slist_append(rule.action_list, &action2); + + fltinfo = filter_info_new(); + + ret = filter_action_exec(&rule, msginfo, file, fltinfo); + + if (ret == 0 && fltinfo->actions[FLT_ACTION_MOVE] && fltinfo->move_dest) + summary_move_row_to(summaryview, iter, fltinfo->move_dest); + + filter_info_free(fltinfo); + g_slist_free(rule.action_list); + g_free(file); +} + +static void summary_not_junk_func(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer data) +{ + FilterRule rule = {NULL, FLT_OR, NULL, NULL, FLT_TIMING_ANY, TRUE}; + FilterAction action = {FLT_ACTION_EXEC, NULL, 0}; + MsgInfo *msginfo; + FilterInfo *fltinfo; + gchar *file; + gint ret; + + gtk_tree_model_get(model, iter, S_COL_MSG_INFO, &msginfo, -1); + file = procmsg_get_message_file(msginfo); + g_return_if_fail(file != NULL); + + action.str_value = prefs_common.nojunk_learncmd; + + rule.action_list = g_slist_append(rule.action_list, &action); + + fltinfo = filter_info_new(); + + ret = filter_action_exec(&rule, msginfo, file, fltinfo); + + filter_info_free(fltinfo); + g_slist_free(rule.action_list); + g_free(file); +} + +void summary_junk(SummaryView *summaryview) +{ + if (!prefs_common.enable_junk) + return; + if (!prefs_common.junk_learncmd || !prefs_common.junk_folder) + return; + + summary_lock(summaryview); + + debug_print("Set mail as junk\n"); + + gtk_tree_selection_selected_foreach(summaryview->selection, + summary_junk_func, summaryview); + + summary_unlock(summaryview); + + if (prefs_common.immediate_exec) + summary_execute(summaryview); + else { + summary_step(summaryview, GTK_SCROLL_STEP_FORWARD); + summary_status_show(summaryview); + } + + folderview_update_all_updated(FALSE); +} + +void summary_not_junk(SummaryView *summaryview) +{ + if (!prefs_common.enable_junk) + return; + if (!prefs_common.nojunk_learncmd) + return; + + summary_lock(summaryview); + + debug_print("Set mail as not junk\n"); + + gtk_tree_selection_selected_foreach(summaryview->selection, + summary_not_junk_func, summaryview); + + summary_unlock(summaryview); +} + void summary_reply(SummaryView *summaryview, ComposeMode mode) { GSList *mlist; diff --git a/src/summaryview.h b/src/summaryview.h index fa5727aa..55fcdb87 100644 --- a/src/summaryview.h +++ b/src/summaryview.h @@ -199,6 +199,9 @@ void summary_filter (SummaryView *summaryview, void summary_filter_open (SummaryView *summaryview, PrefsFilterType type); +void summary_junk (SummaryView *summaryview); +void summary_not_junk (SummaryView *summaryview); + void summary_sort (SummaryView *summaryview, FolderSortKey sort_key, FolderSortType sort_type); |