aboutsummaryrefslogtreecommitdiffstats
path: root/color_filters.c
diff options
context:
space:
mode:
authorrichardv <richardv@f5534014-38df-0310-8fa8-9805f1628bb7>2007-08-21 21:15:57 +0000
committerrichardv <richardv@f5534014-38df-0310-8fa8-9805f1628bb7>2007-08-21 21:15:57 +0000
commit7519508c6308eaaed1df0ea1b23ca3d4ca8cacf9 (patch)
tree5bf4addc8ac497bd4181a676460e89b22baac8d2 /color_filters.c
parentbdcbad177ca30df76d3c157102ba94b21c20d756 (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. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@22572 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'color_filters.c')
-rw-r--r--color_filters.c31
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);