aboutsummaryrefslogtreecommitdiff
path: root/src/prefs_filter.c
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2012-02-21 07:26:08 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2012-02-21 07:26:08 +0000
commit4d39a00f69998880ba73565f15220538aacba98f (patch)
tree97ed299c6aa0cb8afd269b7a2a421c3f7fcfb208 /src/prefs_filter.c
parent93330622a3ff0e391fdd2482ddcce0dd39038eb6 (diff)
fixed a bug that filter settings are removed if Escape key is pressed quickly on auto filter rule creation.
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@3018 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'src/prefs_filter.c')
-rw-r--r--src/prefs_filter.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/prefs_filter.c b/src/prefs_filter.c
index 4e8a6eaf..9fde12c2 100644
--- a/src/prefs_filter.c
+++ b/src/prefs_filter.c
@@ -71,6 +71,9 @@ static struct FilterRuleListWindow {
GHashTable *msg_hdr_table;
GtkWidget *close_btn;
+
+ gboolean on_init;
+ gboolean modified;
} rule_list_window;
enum {
@@ -131,6 +134,8 @@ void prefs_filter_open(MsgInfo *msginfo, const gchar *header, const gchar *key)
{
inc_lock();
+ rule_list_window.on_init = TRUE;
+
if (!rule_list_window.window)
prefs_filter_create();
@@ -144,6 +149,8 @@ void prefs_filter_open(MsgInfo *msginfo, const gchar *header, const gchar *key)
gtk_widget_show(rule_list_window.window);
manage_window_focus_in(rule_list_window.window, NULL, NULL);
+ rule_list_window.modified = FALSE;
+
syl_plugin_signal_emit("prefs-filter-open", rule_list_window.window);
if (msginfo) {
@@ -157,6 +164,8 @@ void prefs_filter_open(MsgInfo *msginfo, const gchar *header, const gchar *key)
prefs_filter_set_list();
}
}
+
+ rule_list_window.on_init = FALSE;
}
static void prefs_filter_create(void)
@@ -431,6 +440,8 @@ static void prefs_filter_set_list_row(GtkTreeIter *iter, FilterRule *rule,
path, NULL, TRUE, 0.5, 0.0);
gtk_tree_path_free(path);
}
+
+ rule_list_window.modified = TRUE;
}
#define APPEND_HDR_LIST(hdr_list) \
@@ -706,6 +717,8 @@ static void prefs_filter_delete_cb(void)
prefs_common.fltlist = g_slist_remove(prefs_common.fltlist, rule);
filter_rule_free(rule);
+
+ rule_list_window.modified = TRUE;
}
static void prefs_filter_top(void)
@@ -787,6 +800,7 @@ static void prefs_filter_enable_toggled(GtkCellRenderer *cell, gchar *path_str,
gtk_list_store_set(rule_list_window.store, &iter,
COL_ENABLED, rule->enabled, -1);
+ rule_list_window.modified = TRUE;
}
static void prefs_filter_row_activated(GtkTreeView *treeview, GtkTreePath *path,
@@ -811,6 +825,7 @@ static void prefs_filter_row_reordered(GtkTreeModel *model,
gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(rule_list_window.treeview),
path_, NULL, FALSE, 0.0, 0.0);
gtk_tree_path_free(path_);
+ rule_list_window.modified = TRUE;
}
static gint prefs_filter_deleted(GtkWidget *widget, GdkEventAny *event,
@@ -823,6 +838,9 @@ static gint prefs_filter_deleted(GtkWidget *widget, GdkEventAny *event,
static gboolean prefs_filter_key_pressed(GtkWidget *widget, GdkEventKey *event,
gpointer data)
{
+ if (rule_list_window.on_init)
+ return TRUE;
+
if (event && event->keyval == GDK_Escape)
prefs_filter_close();
return FALSE;
@@ -830,9 +848,14 @@ static gboolean prefs_filter_key_pressed(GtkWidget *widget, GdkEventKey *event,
static void prefs_filter_close(void)
{
+ if (rule_list_window.on_init)
+ return;
+
prefs_filter_set_msg_header_list(NULL);
- prefs_filter_set_list();
- filter_write_config();
+ if (rule_list_window.modified) {
+ prefs_filter_set_list();
+ filter_write_config();
+ }
gtk_widget_hide(rule_list_window.window);
gtk_list_store_clear(rule_list_window.store);
main_window_popup(main_window_get());