/*
* Sylpheed -- a GTK+ based, lightweight, and fast e-mail client
- * Copyright (C) 1999-2001 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2002 Hiroyuki Yamamoto
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
pointer to the function for widget setting
*/
-#define VSPACING 12
-#define VSPACING_NARROW 4
-#define DEFAULT_ENTRY_WIDTH 80
-#define PREFSBUFSIZE 1024
-
/* widget creating functions */
static void prefs_filter_create (void);
gint row,
gint column,
GdkEvent *event);
+static void prefs_filter_row_move (GtkCList *clist,
+ gint source_row,
+ gint dest_row);
static void prefs_filter_dest_radio_button_toggled (void);
static void prefs_filter_notrecv_radio_button_toggled (void);
+static void prefs_filter_regex_check_button_toggled (void);
static gint prefs_filter_deleted (GtkWidget *widget,
GdkEventAny *event,
if (prefs_rc_is_readonly(FILTER_RC))
return;
- inc_autocheck_timer_remove();
+ inc_lock();
if (!filter.window) {
prefs_filter_create();
gtk_widget_set_usize (hdr_combo1, 96, -1);
gtkut_combo_set_items (GTK_COMBO (hdr_combo1),
"Subject", "From", "To", "Cc", "Reply-To",
- "Sender", "X-ML-Name", "X-List", "X-Sequence",
- "X-Mailer",
+ "Sender", "List-Id",
+ "X-ML-Name", "X-List", "X-Sequence", "X-Mailer",
NULL);
hdr_combo2 = gtk_combo_new ();
gtk_widget_set_usize (hdr_combo2, 96, -1);
gtkut_combo_set_items (GTK_COMBO (hdr_combo2), _("(none)"),
"Subject", "From", "To", "Cc", "Reply-To",
- "Sender", "X-ML-Name", "X-List", "X-Sequence",
- "X-Mailer",
+ "Sender", "List-Id",
+ "X-ML-Name", "X-List", "X-Sequence", "X-Mailer",
NULL);
key_label = gtk_label_new (_("Keyword"));
NULL);
PACK_CHECK_BUTTON (dest_hbox, regex_chkbtn, _("Use regex"));
- gtk_widget_set_sensitive(regex_chkbtn, FALSE);
+ gtk_signal_connect
+ (GTK_OBJECT (regex_chkbtn), "toggled",
+ GTK_SIGNAL_FUNC (prefs_filter_regex_check_button_toggled),
+ NULL);
notrecv_radiobtn = gtk_radio_button_new_with_label
(recv_group, _("Don't receive"));
GTK_CAN_FOCUS);
gtk_signal_connect (GTK_OBJECT (cond_clist), "select_row",
GTK_SIGNAL_FUNC (prefs_filter_select), NULL);
+ gtk_signal_connect (GTK_OBJECT (cond_clist), "row_move",
+ GTK_SIGNAL_FUNC (prefs_filter_row_move), NULL);
btn_vbox = gtk_vbox_new (FALSE, 8);
gtk_widget_show (btn_vbox);
flt->body2 = g_strdup(entry_text);
}
+ if (gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(filter.regex_chkbtn)))
+ flt->flag1 = flt->flag2 = FLT_REGEX;
+
GET_ENTRY(filter.pred_entry1);
if (!strcmp(entry_text, _("contains")))
- flt->flag1 = FLT_CONTAIN;
+ flt->flag1 |= FLT_CONTAIN;
GET_ENTRY(filter.pred_entry2);
if (!strcmp(entry_text, _("contains")))
- flt->flag2 = FLT_CONTAIN;
+ flt->flag2 |= FLT_CONTAIN;
GET_ENTRY(filter.op_entry);
if (!strcmp(entry_text, "and"))
{
FolderItem *dest;
- dest = foldersel_folder_sel(NULL);
+ dest = foldersel_folder_sel(NULL, NULL);
if (!dest) return;
gtk_entry_set_text(GTK_ENTRY(filter.dest_entry), dest->path);
if (!clist->selection) return;
row = GPOINTER_TO_INT(clist->selection->data);
- if (row > 1) {
+ if (row > 1)
gtk_clist_row_move(clist, row, row - 1);
- prefs_filter_set_list();
- }
}
static void prefs_filter_down(void)
if (!clist->selection) return;
row = GPOINTER_TO_INT(clist->selection->data);
- if (row > 0 && row < clist->rows - 1) {
+ if (row > 0 && row < clist->rows - 1)
gtk_clist_row_move(clist, row, row + 1);
- prefs_filter_set_list();
- }
}
#define ENTRY_SET_TEXT(entry, str) \
Filter default_flt = {"Subject", NULL, _("(none)"), NULL,
FLT_CONTAIN, FLT_CONTAIN, FLT_AND,
NULL, FLT_MOVE};
+ gboolean is_regex;
flt = gtk_clist_get_row_data(clist, row);
if (!flt)
FLT_IS_CONTAIN(flt->flag2)
? _("contains") : _("not contain"));
+ is_regex = FLT_IS_REGEX(flt->flag1);
+ gtk_widget_set_sensitive(filter.pred_combo1, !is_regex);
+ gtk_widget_set_sensitive(filter.pred_combo2, !is_regex);
+ gtk_toggle_button_set_active
+ (GTK_TOGGLE_BUTTON(filter.regex_chkbtn), is_regex);
+
gtk_entry_set_text(GTK_ENTRY(filter.op_entry),
flt->cond == FLT_OR ? "or" : "and");
if (flt->action == FLT_NOTRECV)
(GTK_TOGGLE_BUTTON(filter.dest_radiobtn), TRUE);
}
+static void prefs_filter_row_move(GtkCList *clist, gint source_row,
+ gint dest_row)
+{
+ prefs_filter_set_list();
+ if (gtk_clist_row_is_visible(clist, dest_row) != GTK_VISIBILITY_FULL) {
+ gtk_clist_moveto(clist, dest_row, -1,
+ source_row < dest_row ? 1.0 : 0.0, 0.0);
+ }
+}
+
static void prefs_filter_dest_radio_button_toggled(void)
{
gtk_widget_set_sensitive(filter.dest_entry, TRUE);
gtk_widget_set_sensitive(filter.destsel_btn, FALSE);
}
+static void prefs_filter_regex_check_button_toggled(void)
+{
+ gboolean is_regex;
+
+ is_regex = gtk_toggle_button_get_active
+ (GTK_TOGGLE_BUTTON(filter.regex_chkbtn));
+ gtk_widget_set_sensitive(filter.pred_combo1, !is_regex);
+ gtk_widget_set_sensitive(filter.pred_combo2, !is_regex);
+}
+
static gint prefs_filter_deleted(GtkWidget *widget, GdkEventAny *event,
gpointer data)
{
{
prefs_filter_write_config();
gtk_widget_hide(filter.window);
- inc_autocheck_timer_set();
+ inc_unlock();
}
static void prefs_filter_cancel(void)
{
prefs_filter_read_config();
gtk_widget_hide(filter.window);
- inc_autocheck_timer_set();
+ inc_unlock();
}