GtkList to GtkTreeView conversion.

svn path=/trunk/; revision=6217
This commit is contained in:
Olivier Abad 2002-09-07 10:48:07 +00:00
parent d3202fcc7d
commit 1cfc7d562c
2 changed files with 807 additions and 776 deletions

View File

@ -6,7 +6,7 @@ GtkList and GtkCList ==> GtkTreeView conversion :
- column_prefs.c
- decode_as_dlg.c : done
- dfilter_expr_dialog.c
- filter_prefs.c
- filter_prefs.c : done
- main.c
- plugins_dlg.c : done

View File

@ -3,7 +3,7 @@
* (This used to be a notebook page under "Preferences", hence the
* "prefs" in the file name.)
*
* $Id: filter_prefs.c,v 1.1 2002/08/31 09:55:21 oabad Exp $
* $Id: filter_prefs.c,v 1.2 2002/09/07 10:48:07 oabad Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@ -62,7 +62,8 @@ typedef struct _filter_cb_data {
} filter_cb_data;
static GtkWidget *filter_dialog_new(GtkWidget *caller, GtkWidget *filter_te,
filter_list_type_t list, construct_args_t *construct_args);
filter_list_type_t list,
construct_args_t *construct_args);
static void filter_dlg_dclick(GtkWidget *dummy, gpointer main_w_arg,
gpointer activate);
static void filter_dlg_ok_cb(GtkWidget *ok_bt, gpointer dummy);
@ -74,7 +75,7 @@ static void filter_dlg_destroy(GtkWidget *win, gpointer data);
static gint filter_sel_list_button_cb(GtkWidget *, GdkEventButton *,
gpointer);
static void filter_sel_list_cb(GtkWidget *, gpointer);
static void filter_sel_list_cb(GtkTreeSelection *, gpointer);
static void filter_list_destroy_cb(GtkWidget *, gpointer);
static void filter_new_bt_clicked_cb(GtkWidget *, gpointer);
static void filter_chg_bt_clicked_cb(GtkWidget *, gpointer);
@ -327,8 +328,6 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
*del_bt,
*filter_sc,
*filter_l,
*nl_item,
*nl_lb,
*middle_hb,
*name_lb,
*name_te,
@ -336,7 +335,7 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
*filter_lb,
*filter_te,
*add_expression_bt;
GtkWidget *l_select = NULL;
gboolean l_select = FALSE;
GList *fl_entry;
filter_def *filt;
const gchar *filter_te_str = NULL;
@ -344,6 +343,11 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
static filter_list_type_t cfilter_list = CFILTER_LIST;
static filter_list_type_t dfilter_list = DFILTER_LIST;
filter_list_type_t *filter_list_p;
GtkListStore *store;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;
GtkTreeSelection *sel;
GtkTreeIter iter;
/* Get a pointer to a static variable holding the type of filter on
which we're working, so we can pass that pointer to callback
@ -453,18 +457,30 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
gtk_container_add(GTK_CONTAINER(top_hb), filter_sc);
gtk_widget_show(filter_sc);
filter_l = gtk_list_new();
gtk_list_set_selection_mode(GTK_LIST(filter_l), GTK_SELECTION_SINGLE);
g_signal_connect(G_OBJECT(filter_l), "selection_changed",
store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
filter_l = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
gtk_tree_view_set_rules_hint(GTK_TREE_VIEW(filter_l), TRUE);
gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(filter_l), FALSE);
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes("", renderer, "text",
0, NULL);
gtk_tree_view_column_set_sort_column_id(column, 0);
gtk_tree_view_append_column(GTK_TREE_VIEW(filter_l), column);
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
g_signal_connect(G_OBJECT(sel), "changed",
G_CALLBACK(filter_sel_list_cb), filter_pg);
gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY, filter_l);
g_signal_connect(G_OBJECT(filter_l), "destroy",
G_CALLBACK(filter_list_destroy_cb), NULL);
g_signal_connect(G_OBJECT(filter_l), "button_press_event",
G_CALLBACK(filter_sel_list_button_cb), NULL);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(filter_sc),
filter_l);
gtk_widget_show(filter_l);
gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLFUNC_KEY, filter_dlg_dclick);
gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLFUNC_KEY,
filter_dlg_dclick);
gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLARG_KEY, main_w);
/* This is a Boolean, but we make it a non-null pointer for TRUE
and a null pointer for FALSE, as object data is a pointer. */
@ -474,29 +490,20 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
fl_entry = get_filter_list_first(list);
while (fl_entry != NULL) {
filt = (filter_def *) fl_entry->data;
nl_lb = gtk_label_new(filt->name);
nl_item = gtk_list_item_new();
g_signal_connect(G_OBJECT(nl_item), "button_press_event",
G_CALLBACK(filter_sel_list_button_cb),
filter_l);
gtk_misc_set_alignment (GTK_MISC (nl_lb), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(nl_item), nl_lb);
gtk_widget_show(nl_lb);
gtk_container_add(GTK_CONTAINER(filter_l), nl_item);
gtk_widget_show(nl_item);
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LBL_KEY, nl_lb);
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LIST_ITEM_MODEL_KEY,
fl_entry);
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, filt->name,
1, fl_entry, -1);
if (filter_te_str && filt->strval) {
if (strcmp(filter_te_str, filt->strval) == 0)
l_select = nl_item;
{
gtk_tree_selection_select_iter(sel, &iter);
l_select = TRUE;
}
}
fl_entry = fl_entry->next;
}
g_object_unref(G_OBJECT(store));
/* Middle row: Filter name entry */
middle_hb = gtk_hbox_new(FALSE, 5);
@ -531,9 +538,7 @@ filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te,
G_CALLBACK(filter_filter_te_destroy_cb), NULL);
gtk_widget_show(filter_te);
if (l_select) {
gtk_list_select_child(GTK_LIST(filter_l), l_select);
} else if (filter_te_str && filter_te_str[0]) {
if (!l_select && filter_te_str && filter_te_str[0]) {
gtk_entry_set_text(GTK_ENTRY(name_te), "New filter");
gtk_entry_set_text(GTK_ENTRY(filter_te), filter_te_str);
}
@ -613,22 +618,26 @@ filter_dlg_dclick(GtkWidget *filter_l, gpointer main_w_arg, gpointer activate)
GtkWidget *main_w = GTK_WIDGET(main_w_arg);
GtkWidget *parent_filter_te =
gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_PARENT_FILTER_TE_KEY);
GList *flp, *sl;
GtkObject *l_item;
GList *flp;
filter_def *filt;
GtkTreeSelection *sel;
GtkTreeModel *model;
GtkTreeIter iter;
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
if (parent_filter_te != NULL) {
/*
* We have a text entry widget associated with this dialog
* box; is one of the filters in the list selected?
*/
sl = GTK_LIST(filter_l)->selection;
if (sl != NULL) {
/* if something was selected */
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
/*
* Yes. Is there a filter definition for that filter?
*/
l_item = GTK_OBJECT(sl->data);
flp = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
gtk_tree_model_get(model, &iter, 1, &flp, -1);
if (flp) {
/*
* Yes - put it in the text entry widget.
@ -827,49 +836,51 @@ filter_dlg_destroy(GtkWidget *win, gpointer data)
}
static gint
filter_sel_list_button_cb (GtkWidget *widget, GdkEventButton *event,
gpointer func_data)
filter_sel_list_button_cb(GtkWidget *list, GdkEventButton *event,
gpointer data _U_)
{
GtkWidget *parent = func_data;
void (* func)(GtkWidget *, gpointer, gpointer);
gpointer func_arg;
gpointer func_activate;
if (GTK_IS_LIST_ITEM(widget) && event->type == GDK_2BUTTON_PRESS) {
func = gtk_object_get_data(GTK_OBJECT(parent), E_FILT_DBLFUNC_KEY);
func_arg = gtk_object_get_data(GTK_OBJECT(parent), E_FILT_DBLARG_KEY);
func_activate = gtk_object_get_data(GTK_OBJECT(parent), E_FILT_DBLACTIVATE_KEY);
if (event->type == GDK_2BUTTON_PRESS) {
func = gtk_object_get_data(GTK_OBJECT(list), E_FILT_DBLFUNC_KEY);
func_arg = gtk_object_get_data(GTK_OBJECT(list), E_FILT_DBLARG_KEY);
func_activate = gtk_object_get_data(GTK_OBJECT(list),
E_FILT_DBLACTIVATE_KEY);
if (func)
(*func)(func_data, func_arg, func_activate);
(*func)(list, func_arg, func_activate);
}
return FALSE;
}
static void
filter_sel_list_cb(GtkWidget *l, gpointer data _U_)
filter_sel_list_cb(GtkTreeSelection *sel, gpointer data _U_)
{
GtkWidget *main_w = gtk_widget_get_toplevel(l);
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY);
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY);
GtkWidget *chg_bt = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_CHG_BT_KEY);
GtkWidget *copy_bt = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_COPY_BT_KEY);
GtkWidget *del_bt = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_DEL_BT_KEY);
GtkWidget *filter_l = GTK_WIDGET(gtk_tree_selection_get_tree_view(sel));
GtkWidget *main_w = gtk_widget_get_toplevel(filter_l);
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_NAME_TE_KEY);
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_TE_KEY);
GtkWidget *chg_bt = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_CHG_BT_KEY);
GtkWidget *copy_bt = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_COPY_BT_KEY);
GtkWidget *del_bt = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_DEL_BT_KEY);
filter_def *filt;
gchar *name = "", *strval = "";
GList *sl, *flp;
GtkObject *l_item;
GList *flp;
gint sensitivity = FALSE;
GtkTreeModel *model;
GtkTreeIter iter;
if (l)
sl = GTK_LIST(l)->selection;
else
sl = NULL;
if (sl) { /* Something was selected */
l_item = GTK_OBJECT(sl->data);
flp = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
/* if something was selected */
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
gtk_tree_model_get(model, &iter, 1, &flp, -1);
if (flp) {
filt = (filter_def *) flp->data;
name = filt->name;
@ -935,24 +946,21 @@ static void
new_filter_cb(gpointer data, gpointer user_data)
{
GtkWidget *main_w = data;
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
GtkTreeView *filter_l;
new_filter_cb_args_t *args = user_data;
filter_def *nfilt = args->nflp->data;
GtkWidget *nl_lb, *nl_item;
GtkListStore *store;
GtkTreeIter iter;
nl_lb = gtk_label_new(nfilt->name);
nl_item = gtk_list_item_new();
gtk_misc_set_alignment(GTK_MISC(nl_lb), 0.0, 0.5);
gtk_container_add(GTK_CONTAINER(nl_item), nl_lb);
gtk_widget_show(nl_lb);
gtk_container_add(GTK_CONTAINER(filter_l), nl_item);
gtk_widget_show(nl_item);
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LBL_KEY, nl_lb);
gtk_object_set_data(GTK_OBJECT(nl_item), E_FILT_LIST_ITEM_MODEL_KEY,
args->nflp);
if (filter_l == args->active_filter_l) {
filter_l = GTK_TREE_VIEW(gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_L_KEY));
store = GTK_LIST_STORE(gtk_tree_view_get_model(filter_l));
gtk_list_store_append(store, &iter);
gtk_list_store_set(store, &iter, 0, nfilt->name, 1, args->nflp, -1);
if (GTK_WIDGET(filter_l) == args->active_filter_l) {
/* Select the item. */
gtk_list_select_child(GTK_LIST(filter_l), nl_item);
gtk_tree_selection_select_iter(gtk_tree_view_get_selection(filter_l),
&iter);
}
}
@ -960,9 +968,12 @@ static void
filter_new_bt_clicked_cb(GtkWidget *w, gpointer data)
{
GtkWidget *main_w = gtk_widget_get_toplevel(w);
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY);
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_NAME_TE_KEY);
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_TE_KEY);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_L_KEY);
filter_list_type_t list = *(filter_list_type_t *)data;
GList *fl_entry;
const gchar *name, *strval;
@ -973,7 +984,7 @@ filter_new_bt_clicked_cb(GtkWidget *w, gpointer data)
if (strlen(name) > 0 && strlen(strval) > 0) {
/* Add a new entry to the filter list. */
fl_entry = add_to_filter_list(list, name, strval);
fl_entry = add_to_filter_list(list, (char *)name, (char *)strval);
/* Update all the filter list widgets, not just the one in
the dialog box in which we clicked on "Copy". */
@ -990,56 +1001,63 @@ filter_new_bt_clicked_cb(GtkWidget *w, gpointer data)
}
}
static void
chg_list_item_cb(GtkWidget *nl_item, gpointer data)
static gboolean
chg_list_item_cb(GtkTreeModel *model, GtkTreePath *path _U_, GtkTreeIter *iter,
gpointer data)
{
GList *flp = data;
filter_def *filt = flp->data;
GtkLabel *nl_lb =
GTK_LABEL(gtk_object_get_data(GTK_OBJECT(nl_item), E_FILT_LBL_KEY));
GList *nl_model =
gtk_object_get_data(GTK_OBJECT(nl_item), E_FILT_LIST_ITEM_MODEL_KEY);
GList *nl_model;
/* Is this the GtkList item corresponding to the filter list item in
question? */
gtk_tree_model_get(model, iter, 1, &nl_model, -1);
/* Is this the item corresponding to the filter list item in question? */
if (flp == nl_model) {
/* Yes - change the label to correspond to the new name for the filter. */
gtk_label_set(nl_lb, filt->name);
/* Yes - change the label to correspond to the new name for the
* filter. */
gtk_list_store_set(GTK_LIST_STORE(model), iter, 0, filt->name, -1);
return TRUE;
}
return FALSE;
}
static void
chg_filter_cb(gpointer data, gpointer user_data)
{
GtkWidget *main_w = data;
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_L_KEY);
gtk_container_foreach(GTK_CONTAINER(filter_l), chg_list_item_cb, user_data);
gtk_tree_model_foreach(gtk_tree_view_get_model(GTK_TREE_VIEW(filter_l)),
chg_list_item_cb, user_data);
}
static void
filter_chg_bt_clicked_cb(GtkWidget *w, gpointer data)
{
GtkWidget *main_w = gtk_widget_get_toplevel(w);
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY);
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
GtkWidget *name_te = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_NAME_TE_KEY);
GtkWidget *filter_te = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_TE_KEY);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_L_KEY);
filter_def *filt;
const gchar *name, *strval;
GList *sl, *fl_entry;
GtkObject *l_item;
GtkLabel *nl_lb;
GList *fl_entry;
filter_list_type_t list = *(filter_list_type_t *)data;
GtkTreeSelection *sel;
GtkTreeModel *model;
GtkTreeIter iter;
sl = GTK_LIST(filter_l)->selection;
name = gtk_entry_get_text(GTK_ENTRY(name_te));
strval = gtk_entry_get_text(GTK_ENTRY(filter_te));
if (sl) { /* Something was selected */
l_item = GTK_OBJECT(sl->data);
fl_entry = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
nl_lb = (GtkLabel *) gtk_object_get_data(l_item, E_FILT_LBL_KEY);
if (fl_entry != NULL && nl_lb != NULL) {
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
/* if something was selected */
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
gtk_tree_model_get(model, &iter, 1, &fl_entry, -1);
if (fl_entry != NULL) {
filt = (filter_def *) fl_entry->data;
if (strlen(name) > 0 && strlen(strval) > 0 && filt) {
@ -1050,7 +1068,8 @@ filter_chg_bt_clicked_cb(GtkWidget *w, gpointer data)
/* Update all the filter list widgets, not just the one in
the dialog box in which we clicked on "Copy". */
g_list_foreach(get_filter_dialog_list(list), chg_filter_cb, fl_entry);
g_list_foreach(get_filter_dialog_list(list), chg_filter_cb,
fl_entry);
}
}
}
@ -1068,20 +1087,25 @@ static void
filter_copy_bt_clicked_cb(GtkWidget *w, gpointer data)
{
GtkWidget *main_w = gtk_widget_get_toplevel(w);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
GList *sl, *fl_entry, *nfl_entry;
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_L_KEY);
GList *fl_entry, *nfl_entry;
gchar *prefix = "Copy of ", *name;
GtkObject *l_item;
filter_def *filt;
filter_list_type_t list = *(filter_list_type_t *)data;
new_filter_cb_args_t args;
GtkTreeSelection *sel;
GtkTreeModel *model;
GtkTreeIter iter;
sl = GTK_LIST(filter_l)->selection;
if (sl) { /* Something was selected */
l_item = GTK_OBJECT(sl->data);
fl_entry = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
/* if something was selected */
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
gtk_tree_model_get(model, &iter, 1, &fl_entry, -1);
if (fl_entry != NULL) {
/* Add a new entry, copying the existing entry, to the filter list. */
/* Add a new entry, copying the existing entry, to the
* filter list. */
filt = (filter_def *) fl_entry->data;
name = g_malloc(strlen(prefix) + strlen(filt->name) + 1);
sprintf(name, "%s%s", prefix, filt->name);
@ -1109,36 +1133,43 @@ static void
delete_filter_cb(gpointer data, gpointer user_data)
{
GtkWidget *main_w = data;
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
gint pos = *(gint *)user_data;
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_L_KEY);
gchar *pos = (gchar *)user_data;
GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(filter_l));
GtkTreeIter iter;
gtk_list_clear_items(GTK_LIST(filter_l), pos, pos + 1);
gtk_tree_model_get_iter_from_string(model, &iter, pos);
gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
}
static void
filter_del_bt_clicked_cb(GtkWidget *w, gpointer data)
{
GtkWidget *main_w = gtk_widget_get_toplevel(w);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY);
GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w),
E_FILT_FILTER_L_KEY);
filter_list_type_t list = *(filter_list_type_t *)data;
GList *sl, *fl_entry;
GtkObject *l_item;
gint pos;
GList *fl_entry;
gchar *pos;
GtkTreeSelection *sel;
GtkTreeModel *model;
GtkTreeIter iter;
sl = GTK_LIST(filter_l)->selection;
if (sl) { /* Something was selected */
l_item = GTK_OBJECT(sl->data);
pos = gtk_list_child_position(GTK_LIST(filter_l),
GTK_WIDGET(l_item));
fl_entry = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY);
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l));
/* If something was selected */
if (gtk_tree_selection_get_selected(sel, &model, &iter)) {
gtk_tree_model_get(model, &iter, 1, &fl_entry, -1);
pos = gtk_tree_path_to_string(gtk_tree_model_get_path(model, &iter));
if (fl_entry != NULL) {
/* Remove the entry from the filter list. */
remove_from_filter_list(list, fl_entry);
/* Update all the filter list widgets, not just the one in
the dialog box in which we clicked on "Delete". */
g_list_foreach(get_filter_dialog_list(list), delete_filter_cb, &pos);
g_list_foreach(get_filter_dialog_list(list), delete_filter_cb, pos);
}
g_free(pos);
}
}