diff options
author | Richard van der Hoff <richardv@mxtelecom.com> | 2007-08-21 21:15:57 +0000 |
---|---|---|
committer | Richard van der Hoff <richardv@mxtelecom.com> | 2007-08-21 21:15:57 +0000 |
commit | 0c3e8b7c312c91a5fc0c3badf9aba0aba9470684 (patch) | |
tree | 5bf4addc8ac497bd4181a676460e89b22baac8d2 /color_filters.c | |
parent | f8e0d53ecf3d3f61f4457aa6bb1c3ed60733f9be (diff) |
From Florent DROUIN <florent.drouin@alcatel.fr>, bug 1518:
Fix for g_assert when clicking 'OK' on colour filters dialogue whilst
individual filter edit window is open.
svn path=/trunk/; revision=22572
Diffstat (limited to 'color_filters.c')
-rw-r--r-- | color_filters.c | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/color_filters.c b/color_filters.c index 648dab2637..a1c661a95c 100644 --- a/color_filters.c +++ b/color_filters.c @@ -52,6 +52,7 @@ static GSList *color_filter_list = NULL; /* keep "old" deleted filters in this list until * the dissection no longer needs them (e.g. file is closed) */ static GSList *color_filter_deleted_list = NULL; +static GSList *color_filter_valid_list = NULL; /* Color Filters can en-/disabled. */ gboolean filters_enabled = TRUE; @@ -187,13 +188,30 @@ color_filter_compile_cb(gpointer filter_arg, gpointer unused _U_) { color_filter_t *colorf = filter_arg; - g_assert(colorf->c_colorfilter == NULL); + g_assert(colorf->c_colorfilter == NULL); if (!dfilter_compile(colorf->filter_text, &colorf->c_colorfilter)) { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Could not compile color filter name: \"%s\" text: \"%s\".\n%s", colorf->filter_name, colorf->filter_text, dfilter_error_msg); /* this filter was compilable before, so this should never happen */ - g_assert_not_reached(); + /* except if the OK button of the parent window has been clicked */ + /* so don't use g_assert_not_reached() but check the filters again */ + } +} + +static void +color_filter_validate_cb(gpointer filter_arg, gpointer unused _U_) +{ + color_filter_t *colorf = filter_arg; + + g_assert(colorf->c_colorfilter == NULL); + if (!dfilter_compile(colorf->filter_text, &colorf->c_colorfilter)) { + simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, + "Removing color filter name: \"%s\" text: \"%s\".\n%s", + colorf->filter_name, colorf->filter_text, dfilter_error_msg); + /* Delete the color filter from the list of color filters. */ + color_filter_valid_list = g_slist_remove(color_filter_valid_list, colorf); + color_filter_delete(colorf); } } @@ -207,7 +225,14 @@ color_filters_apply(GSList *cfl) color_filter_list = NULL; /* clone all list entries from edit to normal list */ - color_filter_list = color_filter_list_clone(cfl); + color_filter_valid_list = NULL; + color_filter_valid_list = color_filter_list_clone(cfl); + + /* compile all filter */ + g_slist_foreach(color_filter_valid_list, color_filter_validate_cb, NULL); + + /* clone all list entries from edit to normal list */ + color_filter_list = color_filter_list_clone(color_filter_valid_list); /* compile all filter */ g_slist_foreach(color_filter_list, color_filter_compile_cb, NULL); |