/* 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;
}
static void
-color_filter_list_clone_cb(gpointer filter_arg, gpointer *cfl)
+color_filter_list_clone_cb(gpointer filter_arg, gpointer cfl_arg)
{
+ gpointer *cfl = cfl_arg;
color_filter_t *new_colorf;
new_colorf = color_filter_clone(filter_arg);
static void
-color_filter_compile_cb(gpointer filter_arg, gpointer *cfl)
+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);
}
}
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);
if (color_filters_used()) {
curr = color_filter_list;
- while( (curr = g_slist_next(curr)) != NULL) {
+ while(curr != NULL) {
colorf = curr->data;
if ((colorf->c_colorfilter != NULL) &&
dfilter_apply_edt(colorf->c_colorfilter, edt)) {
packet_list_set_colors(row, &(colorf->fg_color), &(colorf->bg_color));
return colorf;
}
+ curr = g_slist_next(curr);
}
}