diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-06-15 09:01:09 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2005-06-15 09:01:09 +0000 |
commit | 0728f3caffdeb6356e7833127b15c2ed244c7b5d (patch) | |
tree | 6db5cbdc5502a015f48d612ab87c5d228ae73b8c /src | |
parent | 755ccfe41883d5fe999488785868209019c4d328 (diff) |
added 'Tools/Filter junk mails in folder' menu.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@344 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src')
-rw-r--r-- | src/mainwindow.c | 15 | ||||
-rw-r--r-- | src/summaryview.c | 45 | ||||
-rw-r--r-- | src/summaryview.h | 3 |
3 files changed, 60 insertions, 3 deletions
diff --git a/src/mainwindow.c b/src/mainwindow.c index 7d7453cb..02612536 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -366,6 +366,9 @@ static void delete_duplicated_cb (MainWindow *mainwin, static void filter_cb (MainWindow *mainwin, guint action, GtkWidget *widget); +static void filter_junk_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); static void execute_summary_cb (MainWindow *mainwin, guint action, GtkWidget *widget); @@ -734,6 +737,11 @@ static GtkItemFactoryEntry mainwin_entries[] = {N_("/_Tools/_Create filter rule/by _Subject"), NULL, create_filter_cb, FILTER_BY_SUBJECT, NULL}, {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Tools/Filter _junk mails in folder"), + NULL, filter_junk_cb, 0, NULL}, + {N_("/_Tools/Filter junk _mails in selected messages"), + NULL, filter_junk_cb, 1, NULL}, + {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"}, {N_("/_Tools/Actio_ns"), NULL, NULL, 0, "<Branch>"}, {N_("/_Tools/---"), NULL, NULL, 0, "<Separator>"}, {N_("/_Tools/Delete du_plicated messages"), @@ -1821,6 +1829,8 @@ void main_window_set_menu_sensitive(MainWindow *mainwin) {"/Tools/Filter all messages in folder", M_MSG_EXIST|M_EXEC}, {"/Tools/Filter selected messages" , M_TARGET_EXIST|M_EXEC}, {"/Tools/Create filter rule" , M_SINGLE_TARGET_EXIST|M_UNLOCKED}, + {"/Tools/Filter junk mails in folder" , M_MSG_EXIST|M_EXEC|M_ENABLE_JUNK}, + {"/Tools/Filter junk mails in selected messages", M_TARGET_EXIST|M_EXEC|M_ENABLE_JUNK}, {"/Tools/Actions" , M_TARGET_EXIST|M_UNLOCKED}, {"/Tools/Execute" , M_MSG_EXIST|M_EXEC}, {"/Tools/Delete duplicated messages" , M_MSG_EXIST|M_ALLOW_DELETE}, @@ -3073,6 +3083,11 @@ static void filter_cb(MainWindow *mainwin, guint action, GtkWidget *widget) summary_filter(mainwin->summaryview, (gboolean)action); } +static void filter_junk_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_filter_junk(mainwin->summaryview, (gboolean)action); +} + static void execute_summary_cb(MainWindow *mainwin, guint action, GtkWidget *widget) { diff --git a/src/summaryview.c b/src/summaryview.c index ed446ffd..34889990 100644 --- a/src/summaryview.c +++ b/src/summaryview.c @@ -3660,7 +3660,34 @@ static gboolean summary_filter_func(GtkTreeModel *model, GtkTreePath *path, return FALSE; } -void summary_filter(SummaryView *summaryview, gboolean selected_only) +static gboolean summary_filter_junk_func(GtkTreeModel *model, GtkTreePath *path, + GtkTreeIter *iter, gpointer data) +{ + SummaryView *summaryview = (SummaryView *)data; + MsgInfo *msginfo; + FilterInfo *fltinfo; + + gtk_tree_model_get(model, iter, S_COL_MSG_INFO, &msginfo, -1); + + fltinfo = filter_info_new(); + fltinfo->flags = msginfo->flags; + filter_apply_msginfo(prefs_common.junk_fltlist, msginfo, fltinfo); + + if (fltinfo->actions[FLT_ACTION_COPY] || + fltinfo->actions[FLT_ACTION_DELETE]) + summaryview->filtered++; + + if (fltinfo->actions[FLT_ACTION_DELETE]) + summary_delete_row(summaryview, iter); + + filter_info_free(fltinfo); + + return FALSE; +} + +static void summary_filter_real(SummaryView *summaryview, + GtkTreeModelForeachFunc func, + gboolean selected_only) { if (!prefs_common.fltlist) return; @@ -3677,11 +3704,11 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only) if (selected_only) gtk_tree_selection_selected_foreach (summaryview->selection, - (GtkTreeSelectionForeachFunc)summary_filter_func, + (GtkTreeSelectionForeachFunc)func, summaryview); else gtk_tree_model_foreach(GTK_TREE_MODEL(summaryview->store), - summary_filter_func, summaryview); + func, summaryview); summary_unlock(summaryview); @@ -3706,6 +3733,18 @@ void summary_filter(SummaryView *summaryview, gboolean selected_only) summaryview->filtered = 0; } +void summary_filter(SummaryView *summaryview, gboolean selected_only) +{ + summary_filter_real(summaryview, summary_filter_func, selected_only); +} + +void summary_filter_junk(SummaryView *summaryview, gboolean selected_only) +{ + if (prefs_common.junk_fltlist) + summary_filter_real(summaryview, summary_filter_junk_func, + selected_only); +} + void summary_filter_open(SummaryView *summaryview, PrefsFilterType type) { GtkTreeIter iter; diff --git a/src/summaryview.h b/src/summaryview.h index 312a354f..494983d8 100644 --- a/src/summaryview.h +++ b/src/summaryview.h @@ -197,6 +197,9 @@ void summary_filter (SummaryView *summaryview, void summary_filter_open (SummaryView *summaryview, PrefsFilterType type); +void summary_filter_junk (SummaryView *summaryview, + gboolean selected_only); + void summary_junk (SummaryView *summaryview); void summary_not_junk (SummaryView *summaryview); |