aboutsummaryrefslogtreecommitdiff
path: root/src/prefs_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/prefs_common.c')
-rw-r--r--src/prefs_common.c145
1 files changed, 145 insertions, 0 deletions
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)
{