diff options
author | Olivier Abad <oabad@noos.fr> | 2002-11-03 17:38:45 +0000 |
---|---|---|
committer | Olivier Abad <oabad@noos.fr> | 2002-11-03 17:38:45 +0000 |
commit | 05ef1fc475a3e569a641424a75b81f74d90ba8ca (patch) | |
tree | e205dc0b1cb685304fd20edb3ebd398884c30ba3 /gtk/filter_prefs.c | |
parent | ae2198ea4ecf9896ef2dc3ed54526fbfbe764077 (diff) |
Merge gtk and gtk2 directories.
svn path=/trunk/; revision=6552
Diffstat (limited to 'gtk/filter_prefs.c')
-rw-r--r-- | gtk/filter_prefs.c | 1385 |
1 files changed, 875 insertions, 510 deletions
diff --git a/gtk/filter_prefs.c b/gtk/filter_prefs.c index f6de5d8208..047a7f6b5e 100644 --- a/gtk/filter_prefs.c +++ b/gtk/filter_prefs.c @@ -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.38 2002/08/28 21:03:47 jmayer Exp $ + * $Id: filter_prefs.c,v 1.39 2002/11/03 17:38:33 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); @@ -72,20 +73,24 @@ static void filter_dlg_save_cb(GtkWidget *save_bt, gpointer parent_w); static void filter_dlg_close_cb(GtkWidget *close_bt, gpointer parent_w); 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_list_destroy_cb(GtkWidget *, gpointer); -static void filter_new_bt_clicked_cb(GtkWidget *, gpointer); -static void filter_chg_bt_clicked_cb(GtkWidget *, gpointer); -static void filter_chg_bt_destroy_cb(GtkWidget *, gpointer); -static void filter_copy_bt_clicked_cb(GtkWidget *, gpointer); -static void filter_copy_bt_destroy_cb(GtkWidget *, gpointer); -static void filter_del_bt_clicked_cb(GtkWidget *, gpointer); -static void filter_del_bt_destroy_cb(GtkWidget *, gpointer); -static void filter_expr_cb(GtkWidget *, gpointer); -static void filter_name_te_destroy_cb(GtkWidget *, gpointer); -static void filter_filter_te_destroy_cb(GtkWidget *, gpointer); +static gint filter_sel_list_button_cb(GtkWidget *, GdkEventButton *, + gpointer); +#if GTK_MAJOR_VERSION < 2 +static void filter_sel_list_cb(GtkWidget *, gpointer); +#else +static void filter_sel_list_cb(GtkTreeSelection *, gpointer); +#endif +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); +static void filter_chg_bt_destroy_cb(GtkWidget *, gpointer); +static void filter_copy_bt_clicked_cb(GtkWidget *, gpointer); +static void filter_copy_bt_destroy_cb(GtkWidget *, gpointer); +static void filter_del_bt_clicked_cb(GtkWidget *, gpointer); +static void filter_del_bt_destroy_cb(GtkWidget *, gpointer); +static void filter_expr_cb(GtkWidget *, gpointer); +static void filter_name_te_destroy_cb(GtkWidget *, gpointer); +static void filter_filter_te_destroy_cb(GtkWidget *, gpointer); #ifdef HAVE_LIBPCAP /* Create a filter dialog for constructing a capture filter. @@ -309,349 +314,530 @@ get_filter_dialog_list(filter_list_type_t list) static GtkWidget * filter_dialog_new(GtkWidget *caller _U_, GtkWidget *parent_filter_te, - filter_list_type_t list, construct_args_t *construct_args) + filter_list_type_t list, construct_args_t *construct_args) { - GtkWidget *main_w, /* main window */ - *main_vb, /* main container */ - *bbox, /* button container */ - *ok_bt, /* "OK" button */ - *apply_bt, /* "Apply" button */ - *save_bt, /* "Save" button */ - *close_bt; /* "Cancel" button */ - GtkWidget *filter_pg = NULL; /* filter settings box */ - GtkWidget *top_hb, - *list_bb, - *new_bt, - *chg_bt, - *copy_bt, - *del_bt, - *filter_sc, - *filter_l, - *nl_item, - *nl_lb, - *middle_hb, - *name_lb, - *name_te, - *bottom_hb, - *filter_lb, - *filter_te, - *add_expression_bt; - GtkWidget *l_select = NULL; - GList *fl_entry; - filter_def *filt; - gchar *filter_te_str = NULL; - GList **filter_dialogs; - 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; - - /* 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 - routines. */ - switch (list) { + GtkWidget *main_w, /* main window */ + *main_vb, /* main container */ + *bbox, /* button container */ + *ok_bt, /* "OK" button */ + *apply_bt, /* "Apply" button */ + *save_bt, /* "Save" button */ + *close_bt; /* "Cancel" button */ + GtkWidget *filter_pg = NULL; /* filter settings box */ + GtkWidget *top_hb, + *list_bb, + *new_bt, + *chg_bt, + *copy_bt, + *del_bt, + *filter_sc, + *filter_l, + *middle_hb, + *name_lb, + *name_te, + *bottom_hb, + *filter_lb, + *filter_te, + *add_expression_bt; + GList *fl_entry; + filter_def *filt; + 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; + gchar *filter_te_str = NULL; + GList **filter_dialogs; +#if GTK_MAJOR_VERSION < 2 + GtkWidget *nl_item, + *nl_lb, + *l_select = NULL; +#else + gboolean l_select = FALSE; + GtkListStore *store; + GtkCellRenderer *renderer; + GtkTreeViewColumn *column; + GtkTreeSelection *sel; + GtkTreeIter iter; +#endif - case CFILTER_LIST: - filter_dialogs = &cfilter_dialogs; - filter_list_p = &cfilter_list; - break; + /* 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 + routines. */ + switch (list) { + + case CFILTER_LIST: + filter_dialogs = &cfilter_dialogs; + filter_list_p = &cfilter_list; + break; + + case DFILTER_LIST: + filter_dialogs = &dfilter_dialogs; + filter_list_p = &dfilter_list; + break; + + default: + g_assert_not_reached(); + filter_dialogs = NULL; + filter_list_p = NULL; + break; + } - case DFILTER_LIST: - filter_dialogs = &dfilter_dialogs; - filter_list_p = &dfilter_list; - break; + main_w = dlg_window_new(construct_args->title); + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_CONSTRUCT_ARGS_KEY, + construct_args); + + /* Call a handler when we're destroyed, so we can inform + our caller, if any, that we've been destroyed. */ +#if GTK_MAJOR_VERSION < 2 + gtk_signal_connect(GTK_OBJECT(main_w), "destroy", + GTK_SIGNAL_FUNC(filter_dlg_destroy), filter_list_p); +#else + g_signal_connect(G_OBJECT(main_w), "destroy", + G_CALLBACK(filter_dlg_destroy), filter_list_p); +#endif - default: - g_assert_not_reached(); - filter_dialogs = NULL; - filter_list_p = NULL; - break; - } + main_vb = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(main_vb), 5); + gtk_container_add(GTK_CONTAINER(main_w), main_vb); + gtk_widget_show(main_vb); + + /* Make sure everything is set up */ + if (parent_filter_te) + filter_te_str = gtk_entry_get_text(GTK_ENTRY(parent_filter_te)); + + /* Container for each row of widgets */ + filter_pg = gtk_vbox_new(FALSE, 5); + gtk_container_border_width(GTK_CONTAINER(filter_pg), 5); + gtk_widget_show(filter_pg); + + /* Top row: Filter list and buttons */ + top_hb = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(filter_pg), top_hb); + gtk_widget_show(top_hb); + + list_bb = gtk_vbutton_box_new(); + gtk_button_box_set_layout (GTK_BUTTON_BOX (list_bb), GTK_BUTTONBOX_START); + gtk_container_add(GTK_CONTAINER(top_hb), list_bb); + gtk_widget_show(list_bb); + +#if GTK_MAJOR_VERSION < 2 + new_bt = gtk_button_new_with_label ("New"); + gtk_signal_connect(GTK_OBJECT(new_bt), "clicked", + GTK_SIGNAL_FUNC(filter_new_bt_clicked_cb), + filter_list_p); +#else + new_bt = gtk_button_new_from_stock(GTK_STOCK_NEW); + g_signal_connect(G_OBJECT(new_bt), "clicked", + G_CALLBACK(filter_new_bt_clicked_cb), filter_list_p); +#endif + gtk_container_add(GTK_CONTAINER(list_bb), new_bt); + gtk_widget_show(new_bt); + + chg_bt = gtk_button_new_with_label ("Change"); + gtk_widget_set_sensitive(chg_bt, FALSE); +#if GTK_MAJOR_VERSION < 2 + gtk_signal_connect(GTK_OBJECT(chg_bt), "clicked", + GTK_SIGNAL_FUNC(filter_chg_bt_clicked_cb), + filter_list_p); + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_CHG_BT_KEY, chg_bt); + gtk_signal_connect(GTK_OBJECT(chg_bt), "destroy", + GTK_SIGNAL_FUNC(filter_chg_bt_destroy_cb), NULL); +#else + g_signal_connect(G_OBJECT(chg_bt), "clicked", + G_CALLBACK(filter_chg_bt_clicked_cb), filter_list_p); + g_object_set_data(G_OBJECT(main_w), E_FILT_CHG_BT_KEY, chg_bt); + g_signal_connect(G_OBJECT(chg_bt), "destroy", + G_CALLBACK(filter_chg_bt_destroy_cb), NULL); +#endif + gtk_container_add(GTK_CONTAINER(list_bb), chg_bt); + gtk_widget_show(chg_bt); + +#if GTK_MAJOR_VERSION < 2 + copy_bt = gtk_button_new_with_label ("Copy"); + gtk_widget_set_sensitive(copy_bt, FALSE); + gtk_signal_connect(GTK_OBJECT(copy_bt), "clicked", + GTK_SIGNAL_FUNC(filter_copy_bt_clicked_cb), + filter_list_p); + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_COPY_BT_KEY, copy_bt); + gtk_signal_connect(GTK_OBJECT(copy_bt), "destroy", + GTK_SIGNAL_FUNC(filter_copy_bt_destroy_cb), NULL); +#else + copy_bt = gtk_button_new_from_stock(GTK_STOCK_COPY); + gtk_widget_set_sensitive(copy_bt, FALSE); + g_signal_connect(G_OBJECT(copy_bt), "clicked", + G_CALLBACK(filter_copy_bt_clicked_cb), filter_list_p); + g_object_set_data(G_OBJECT(main_w), E_FILT_COPY_BT_KEY, copy_bt); + g_signal_connect(G_OBJECT(copy_bt), "destroy", + G_CALLBACK(filter_copy_bt_destroy_cb), NULL); +#endif + gtk_container_add(GTK_CONTAINER(list_bb), copy_bt); + gtk_widget_show(copy_bt); + +#if GTK_MAJOR_VERSION < 2 + del_bt = gtk_button_new_with_label ("Delete"); + gtk_widget_set_sensitive(del_bt, FALSE); + gtk_signal_connect(GTK_OBJECT(del_bt), "clicked", + GTK_SIGNAL_FUNC(filter_del_bt_clicked_cb), + filter_list_p); + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_DEL_BT_KEY, del_bt); + gtk_signal_connect(GTK_OBJECT(del_bt), "destroy", + GTK_SIGNAL_FUNC(filter_del_bt_destroy_cb), NULL); +#else + del_bt = gtk_button_new_from_stock(GTK_STOCK_DELETE); + gtk_widget_set_sensitive(del_bt, FALSE); + g_signal_connect(G_OBJECT(del_bt), "clicked", + G_CALLBACK(filter_del_bt_clicked_cb), filter_list_p); + g_object_set_data(G_OBJECT(main_w), E_FILT_DEL_BT_KEY, del_bt); + g_signal_connect(G_OBJECT(del_bt), "destroy", + G_CALLBACK(filter_del_bt_destroy_cb), NULL); +#endif + gtk_container_add(GTK_CONTAINER(list_bb), del_bt); + gtk_widget_show(del_bt); + + if (list == DFILTER_LIST) { + /* Create the "Add Expression..." button, to pop up a dialog + for constructing filter comparison expressions. */ + add_expression_bt = gtk_button_new_with_label("Add Expression..."); +#if GTK_MAJOR_VERSION < 2 + gtk_signal_connect(GTK_OBJECT(add_expression_bt), "clicked", + GTK_SIGNAL_FUNC(filter_expr_cb), main_w); +#else + g_signal_connect(G_OBJECT(add_expression_bt), "clicked", + G_CALLBACK(filter_expr_cb), main_w); +#endif + gtk_container_add(GTK_CONTAINER(list_bb), add_expression_bt); + gtk_widget_show(add_expression_bt); + } - main_w = dlg_window_new(construct_args->title); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_CONSTRUCT_ARGS_KEY, - construct_args); - - /* Call a handler when we're destroyed, so we can inform - our caller, if any, that we've been destroyed. */ - gtk_signal_connect(GTK_OBJECT(main_w), "destroy", - GTK_SIGNAL_FUNC(filter_dlg_destroy), filter_list_p); - - main_vb = gtk_vbox_new(FALSE, 5); - gtk_container_border_width(GTK_CONTAINER(main_vb), 5); - gtk_container_add(GTK_CONTAINER(main_w), main_vb); - gtk_widget_show(main_vb); - - /* Make sure everything is set up */ - if (parent_filter_te) - filter_te_str = gtk_entry_get_text(GTK_ENTRY(parent_filter_te)); - - /* Container for each row of widgets */ - filter_pg = gtk_vbox_new(FALSE, 5); - gtk_container_border_width(GTK_CONTAINER(filter_pg), 5); - gtk_widget_show(filter_pg); - - /* Top row: Filter list and buttons */ - top_hb = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(filter_pg), top_hb); - gtk_widget_show(top_hb); - - list_bb = gtk_vbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (list_bb), GTK_BUTTONBOX_START); - gtk_container_add(GTK_CONTAINER(top_hb), list_bb); - gtk_widget_show(list_bb); - - new_bt = gtk_button_new_with_label ("New"); - gtk_signal_connect(GTK_OBJECT(new_bt), "clicked", - GTK_SIGNAL_FUNC(filter_new_bt_clicked_cb), filter_list_p); - gtk_container_add(GTK_CONTAINER(list_bb), new_bt); - gtk_widget_show(new_bt); - - chg_bt = gtk_button_new_with_label ("Change"); - gtk_widget_set_sensitive(chg_bt, FALSE); - gtk_signal_connect(GTK_OBJECT(chg_bt), "clicked", - GTK_SIGNAL_FUNC(filter_chg_bt_clicked_cb), filter_list_p); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_CHG_BT_KEY, chg_bt); - gtk_signal_connect(GTK_OBJECT(chg_bt), "destroy", - GTK_SIGNAL_FUNC(filter_chg_bt_destroy_cb), NULL); - gtk_container_add(GTK_CONTAINER(list_bb), chg_bt); - gtk_widget_show(chg_bt); - - copy_bt = gtk_button_new_with_label ("Copy"); - gtk_widget_set_sensitive(copy_bt, FALSE); - gtk_signal_connect(GTK_OBJECT(copy_bt), "clicked", - GTK_SIGNAL_FUNC(filter_copy_bt_clicked_cb), filter_list_p); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_COPY_BT_KEY, copy_bt); - gtk_signal_connect(GTK_OBJECT(copy_bt), "destroy", - GTK_SIGNAL_FUNC(filter_copy_bt_destroy_cb), NULL); - gtk_container_add(GTK_CONTAINER(list_bb), copy_bt); - gtk_widget_show(copy_bt); - - del_bt = gtk_button_new_with_label ("Delete"); - gtk_widget_set_sensitive(del_bt, FALSE); - gtk_signal_connect(GTK_OBJECT(del_bt), "clicked", - GTK_SIGNAL_FUNC(filter_del_bt_clicked_cb), filter_list_p); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_DEL_BT_KEY, del_bt); - gtk_signal_connect(GTK_OBJECT(del_bt), "destroy", - GTK_SIGNAL_FUNC(filter_del_bt_destroy_cb), NULL); - gtk_container_add(GTK_CONTAINER(list_bb), del_bt); - gtk_widget_show(del_bt); - - if (list == DFILTER_LIST) { - /* Create the "Add Expression..." button, to pop up a dialog - for constructing filter comparison expressions. */ - add_expression_bt = gtk_button_new_with_label("Add Expression..."); - gtk_signal_connect(GTK_OBJECT(add_expression_bt), "clicked", - GTK_SIGNAL_FUNC(filter_expr_cb), main_w); - gtk_container_add(GTK_CONTAINER(list_bb), add_expression_bt); - gtk_widget_show(add_expression_bt); - } + filter_sc = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(filter_sc), + GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); +#if GTK_MAJOR_VERSION < 2 + gtk_widget_set_usize(filter_sc, 250, 150); +#else + gtk_widget_set_size_request(filter_sc, 250, 150); +#endif + gtk_container_add(GTK_CONTAINER(top_hb), filter_sc); + gtk_widget_show(filter_sc); + +#if GTK_MAJOR_VERSION < 2 + filter_l = gtk_list_new(); + gtk_list_set_selection_mode(GTK_LIST(filter_l), GTK_SELECTION_SINGLE); + gtk_signal_connect(GTK_OBJECT(filter_l), "selection_changed", + GTK_SIGNAL_FUNC(filter_sel_list_cb), filter_pg); + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY, filter_l); + gtk_signal_connect(GTK_OBJECT(filter_l), "destroy", + GTK_SIGNAL_FUNC(filter_list_destroy_cb), NULL); + gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(filter_sc), + filter_l); +#else + store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER); + filter_l = tree_view_new(GTK_TREE_MODEL(store)); + 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); + g_object_set_data(G_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_container_add(GTK_CONTAINER(filter_sc), filter_l); +#endif + gtk_widget_show(filter_l); + +#if GTK_MAJOR_VERSION < 2 + 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. */ + gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLACTIVATE_KEY, + construct_args->activate_on_ok ? "" : NULL); +#else + g_object_set_data(G_OBJECT(filter_l), E_FILT_DBLFUNC_KEY, + filter_dlg_dclick); + g_object_set_data(G_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. */ + g_object_set_data(G_OBJECT(filter_l), E_FILT_DBLACTIVATE_KEY, + construct_args->activate_on_ok ? "" : NULL); +#endif - filter_sc = gtk_scrolled_window_new(NULL, NULL); - gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(filter_sc), - GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); - gtk_widget_set_usize(filter_sc, 250, 150); - 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); - gtk_signal_connect(GTK_OBJECT(filter_l), "selection_changed", - GTK_SIGNAL_FUNC(filter_sel_list_cb), filter_pg); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_FILTER_L_KEY, filter_l); - gtk_signal_connect(GTK_OBJECT(filter_l), "destroy", - GTK_SIGNAL_FUNC(filter_list_destroy_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_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. */ - gtk_object_set_data(GTK_OBJECT(filter_l), E_FILT_DBLACTIVATE_KEY, - construct_args->activate_on_ok? "" : NULL); - - 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(); - - gtk_signal_connect(GTK_OBJECT(nl_item), "button_press_event", - GTK_SIGNAL_FUNC(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); - - if (filter_te_str && filt->strval) { - if (strcmp(filter_te_str, filt->strval) == 0) - l_select = nl_item; - } + fl_entry = get_filter_list_first(list); + while (fl_entry != NULL) { + filt = (filter_def *) fl_entry->data; +#if GTK_MAJOR_VERSION < 2 + nl_lb = gtk_label_new(filt->name); + nl_item = gtk_list_item_new(); + + gtk_signal_connect(GTK_OBJECT(nl_item), "button_press_event", + GTK_SIGNAL_FUNC(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); +#else + gtk_list_store_append(store, &iter); + gtk_list_store_set(store, &iter, 0, filt->name, + 1, fl_entry, -1); +#endif - fl_entry = fl_entry->next; - } + if (filter_te_str && filt->strval) { + if (strcmp(filter_te_str, filt->strval) == 0) { +#if GTK_MAJOR_VERSION < 2 + l_select = nl_item; +#else + gtk_tree_selection_select_iter(sel, &iter); + l_select = TRUE; +#endif + } + } - /* Middle row: Filter name entry */ - middle_hb = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(filter_pg), middle_hb); - gtk_widget_show(middle_hb); - - name_lb = gtk_label_new("Filter name:"); - gtk_box_pack_start(GTK_BOX(middle_hb), name_lb, FALSE, FALSE, 3); - gtk_widget_show(name_lb); - - name_te = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(middle_hb), name_te, TRUE, TRUE, 3); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY, name_te); - gtk_signal_connect(GTK_OBJECT(name_te), "destroy", - GTK_SIGNAL_FUNC(filter_name_te_destroy_cb), NULL); - gtk_widget_show(name_te); - - /* Bottom row: Filter text entry */ - bottom_hb = gtk_hbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(filter_pg), bottom_hb); - gtk_widget_show(bottom_hb); - - filter_lb = gtk_label_new("Filter string:"); - gtk_box_pack_start(GTK_BOX(bottom_hb), filter_lb, FALSE, FALSE, 3); - gtk_widget_show(filter_lb); - - filter_te = gtk_entry_new(); - gtk_box_pack_start(GTK_BOX(bottom_hb), filter_te, TRUE, TRUE, 3); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY, filter_te); - - gtk_signal_connect(GTK_OBJECT(filter_te), "destroy", - GTK_SIGNAL_FUNC(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]) { - gtk_entry_set_text(GTK_ENTRY(name_te), "New filter"); - gtk_entry_set_text(GTK_ENTRY(filter_te), filter_te_str); - } + fl_entry = fl_entry->next; + } +#if GTK_MAJOR_VERSION >= 2 + g_object_unref(G_OBJECT(store)); +#endif - gtk_box_pack_start(GTK_BOX(main_vb), filter_pg, TRUE, TRUE, 0); - gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_PARENT_FILTER_TE_KEY, - parent_filter_te); + /* Middle row: Filter name entry */ + middle_hb = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(filter_pg), middle_hb); + gtk_widget_show(middle_hb); + + name_lb = gtk_label_new("Filter name:"); + gtk_box_pack_start(GTK_BOX(middle_hb), name_lb, FALSE, FALSE, 3); + gtk_widget_show(name_lb); + + name_te = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(middle_hb), name_te, TRUE, TRUE, 3); +#if GTK_MAJOR_VERSION < 2 + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_NAME_TE_KEY, name_te); + gtk_signal_connect(GTK_OBJECT(name_te), "destroy", + GTK_SIGNAL_FUNC(filter_name_te_destroy_cb), NULL); +#else + g_object_set_data(G_OBJECT(main_w), E_FILT_NAME_TE_KEY, name_te); + g_signal_connect(G_OBJECT(name_te), "destroy", + G_CALLBACK(filter_name_te_destroy_cb), NULL); +#endif + gtk_widget_show(name_te); - bbox = gtk_hbutton_box_new(); - gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); - gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); - gtk_container_add(GTK_CONTAINER(main_vb), bbox); - gtk_widget_show(bbox); + /* Bottom row: Filter text entry */ + bottom_hb = gtk_hbox_new(FALSE, 5); + gtk_container_add(GTK_CONTAINER(filter_pg), bottom_hb); + gtk_widget_show(bottom_hb); - if (parent_filter_te != NULL) { - /* - * We have a filter text entry that we can fill in if - * the "OK" button is clicked, so put in an "OK" button. - */ - ok_bt = gtk_button_new_with_label ("OK"); - gtk_signal_connect(GTK_OBJECT(ok_bt), "clicked", - GTK_SIGNAL_FUNC(filter_dlg_ok_cb), NULL); - GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), ok_bt, TRUE, TRUE, 0); - gtk_widget_grab_default(ok_bt); - gtk_widget_show(ok_bt); - - /* Catch the "activate" signal on the filter name and filter - expression text entries, so that if the user types Return - there, we act as if the "OK" button had been selected, as - happens if Return is typed if some widget that *doesn't* - handle the Return key has the input focus. */ - dlg_set_activate(name_te, ok_bt); - dlg_set_activate(filter_te, ok_bt); - } + filter_lb = gtk_label_new("Filter string:"); + gtk_box_pack_start(GTK_BOX(bottom_hb), filter_lb, FALSE, FALSE, 3); + gtk_widget_show(filter_lb); - if (construct_args->wants_apply_button) { - apply_bt = gtk_button_new_with_label ("Apply"); - gtk_signal_connect(GTK_OBJECT(apply_bt), "clicked", - GTK_SIGNAL_FUNC(filter_dlg_apply_cb), NULL); - GTK_WIDGET_SET_FLAGS(apply_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), apply_bt, TRUE, TRUE, 0); - gtk_widget_show(apply_bt); - } + filter_te = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(bottom_hb), filter_te, TRUE, TRUE, 3); +#if GTK_MAJOR_VERSION < 2 + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_FILTER_TE_KEY, filter_te); - save_bt = gtk_button_new_with_label ("Save"); - gtk_signal_connect(GTK_OBJECT(save_bt), "clicked", - GTK_SIGNAL_FUNC(filter_dlg_save_cb), filter_list_p); - GTK_WIDGET_SET_FLAGS(save_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), save_bt, TRUE, TRUE, 0); - gtk_widget_show(save_bt); + gtk_signal_connect(GTK_OBJECT(filter_te), "destroy", + GTK_SIGNAL_FUNC(filter_filter_te_destroy_cb), NULL); +#else + g_object_set_data(G_OBJECT(main_w), E_FILT_FILTER_TE_KEY, filter_te); - close_bt = gtk_button_new_with_label ("Close"); - gtk_signal_connect(GTK_OBJECT(close_bt), "clicked", - GTK_SIGNAL_FUNC(filter_dlg_close_cb), GTK_OBJECT(main_w)); - GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT); - gtk_box_pack_start(GTK_BOX(bbox), close_bt, TRUE, TRUE, 0); - gtk_widget_show(close_bt); + g_signal_connect(G_OBJECT(filter_te), "destroy", + G_CALLBACK(filter_filter_te_destroy_cb), NULL); +#endif + gtk_widget_show(filter_te); + +#if GTK_MAJOR_VERSION < 2 + if (l_select) { + gtk_list_select_child(GTK_LIST(filter_l), l_select); + } else if (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); + } +#else + 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); + } +#endif - /* - * Catch the "key_press_event" signal in the window, so that we can - * catch the ESC key being pressed and act as if the "Close" button - * had been selected. - */ - dlg_set_cancel(main_w, close_bt); + gtk_box_pack_start(GTK_BOX(main_vb), filter_pg, TRUE, TRUE, 0); +#if GTK_MAJOR_VERSION < 2 + gtk_object_set_data(GTK_OBJECT(main_w), E_FILT_PARENT_FILTER_TE_KEY, + parent_filter_te); +#else + g_object_set_data(G_OBJECT(main_w), E_FILT_PARENT_FILTER_TE_KEY, + parent_filter_te); +#endif + + bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout (GTK_BUTTON_BOX (bbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5); + gtk_container_add(GTK_CONTAINER(main_vb), bbox); + gtk_widget_show(bbox); + + if (parent_filter_te != NULL) { + /* + * We have a filter text entry that we can fill in if + * the "OK" button is clicked, so put in an "OK" button. + */ +#if GTK_MAJOR_VERSION < 2 + ok_bt = gtk_button_new_with_label ("OK"); + gtk_signal_connect(GTK_OBJECT(ok_bt), "clicked", + GTK_SIGNAL_FUNC(filter_dlg_ok_cb), NULL); +#else + ok_bt = gtk_button_new_from_stock(GTK_STOCK_OK); + g_signal_connect(G_OBJECT(ok_bt), "clicked", + G_CALLBACK(filter_dlg_ok_cb), NULL); +#endif + GTK_WIDGET_SET_FLAGS(ok_bt, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(bbox), ok_bt, TRUE, TRUE, 0); + gtk_widget_grab_default(ok_bt); + gtk_widget_show(ok_bt); + + /* Catch the "activate" signal on the filter name and filter + expression text entries, so that if the user types Return + there, we act as if the "OK" button had been selected, as + happens if Return is typed if some widget that *doesn't* + handle the Return key has the input focus. */ + dlg_set_activate(name_te, ok_bt); + dlg_set_activate(filter_te, ok_bt); + } - remember_filter_dialog(main_w, filter_dialogs); + if (construct_args->wants_apply_button) { +#if GTK_MAJOR_VERSION < 2 + apply_bt = gtk_button_new_with_label ("Apply"); + gtk_signal_connect(GTK_OBJECT(apply_bt), "clicked", + GTK_SIGNAL_FUNC(filter_dlg_apply_cb), NULL); +#else + apply_bt = gtk_button_new_from_stock(GTK_STOCK_APPLY); + g_signal_connect(G_OBJECT(apply_bt), "clicked", + G_CALLBACK(filter_dlg_apply_cb), NULL); +#endif + GTK_WIDGET_SET_FLAGS(apply_bt, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(bbox), apply_bt, TRUE, TRUE, 0); + gtk_widget_show(apply_bt); + } - gtk_widget_show(main_w); +#if GTK_MAJOR_VERSION < 2 + save_bt = gtk_button_new_with_label ("Save"); + gtk_signal_connect(GTK_OBJECT(save_bt), "clicked", + GTK_SIGNAL_FUNC(filter_dlg_save_cb), filter_list_p); +#else + save_bt = gtk_button_new_from_stock(GTK_STOCK_SAVE); + g_signal_connect(G_OBJECT(save_bt), "clicked", + G_CALLBACK(filter_dlg_save_cb), filter_list_p); +#endif + GTK_WIDGET_SET_FLAGS(save_bt, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(bbox), save_bt, TRUE, TRUE, 0); + gtk_widget_show(save_bt); + +#if GTK_MAJOR_VERSION < 2 + close_bt = gtk_button_new_with_label ("Close"); + gtk_signal_connect(GTK_OBJECT(close_bt), "clicked", + GTK_SIGNAL_FUNC(filter_dlg_close_cb), + GTK_OBJECT(main_w)); +#else + close_bt = gtk_button_new_from_stock(GTK_STOCK_CLOSE); + g_signal_connect(G_OBJECT(close_bt), "clicked", + G_CALLBACK(filter_dlg_close_cb), G_OBJECT(main_w)); +#endif + GTK_WIDGET_SET_FLAGS(close_bt, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(bbox), close_bt, TRUE, TRUE, 0); + gtk_widget_show(close_bt); - return main_w; + /* + * Catch the "key_press_event" signal in the window, so that we can + * catch the ESC key being pressed and act as if the "Close" button + * had been selected. + */ + dlg_set_cancel(main_w, close_bt); + + remember_filter_dialog(main_w, filter_dialogs); + + gtk_widget_show(main_w); + + return main_w; } static void 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; - filter_def *filt; + 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; + filter_def *filt; +#if GTK_MAJOR_VERSION < 2 + GList *sl; + GtkObject *l_item; +#else + GtkTreeSelection *sel; + GtkTreeModel *model; + GtkTreeIter iter; + + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l)); +#endif - 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) { - /* - * 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); - if (flp) { - /* - * Yes - put it in the text entry widget. - */ - filt = (filter_def *) flp->data; - gtk_entry_set_text(GTK_ENTRY(parent_filter_te), - filt->strval); - - /* - * Are we supposed to cause the filter we - * put there to be applied? - */ - if (activate != NULL) { - /* - * Yes - do so. - */ - gtk_signal_emit_by_name(GTK_OBJECT(parent_filter_te), - "activate"); - } - } - } - } + 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? + */ +#if GTK_MAJOR_VERSION < 2 + sl = GTK_LIST(filter_l)->selection; + if (sl != NULL) { +#else + if (gtk_tree_selection_get_selected(sel, &model, &iter)) { +#endif + /* + * Yes. Is there a filter definition for that filter? + */ +#if GTK_MAJOR_VERSION < 2 + l_item = GTK_OBJECT(sl->data); + flp = (GList *)gtk_object_get_data(l_item, + E_FILT_LIST_ITEM_MODEL_KEY); +#else + gtk_tree_model_get(model, &iter, 1, &flp, -1); +#endif + if (flp) { + /* + * Yes - put it in the text entry widget. + */ + filt = (filter_def *) flp->data; + gtk_entry_set_text(GTK_ENTRY(parent_filter_te), + filt->strval); + + /* + * Are we supposed to cause the filter we + * put there to be applied? + */ + if (activate != NULL) { + /* + * Yes - do so. + */ +#if GTK_MAJOR_VERSION < 2 + gtk_signal_emit_by_name(GTK_OBJECT(parent_filter_te), + "activate"); +#else + g_signal_emit_by_name(G_OBJECT(parent_filter_te), + "activate"); +#endif + } + } + } + } - gtk_widget_destroy(main_w); + gtk_widget_destroy(main_w); } static void @@ -723,8 +909,13 @@ filter_apply(GtkWidget *main_w, gboolean destroy) * to destroy it. */ if (construct_args->activate_on_ok) { +#if GTK_MAJOR_VERSION < 2 gtk_signal_emit_by_name(GTK_OBJECT(parent_filter_te), - "activate"); + "activate"); +#else + g_signal_emit_by_name(G_OBJECT(parent_filter_te), + "activate"); +#endif } } } @@ -825,86 +1016,132 @@ filter_dlg_destroy(GtkWidget *win, gpointer data) gtk_widget_destroy(GTK_WIDGET(win)); } +#if GTK_MAJOR_VERSION < 2 static gint filter_sel_list_button_cb (GtkWidget *widget, GdkEventButton *event, gpointer func_data) +#else +static gint +filter_sel_list_button_cb (GtkWidget *list, GdkEventButton *event, + gpointer data _U_) +#endif { +#if GTK_MAJOR_VERSION < 2 GtkWidget *parent = func_data; GtkSignalFunc func; +#else + void (* func)(GtkWidget *, gpointer, gpointer); +#endif gpointer func_arg; gpointer func_activate; +#if GTK_MAJOR_VERSION < 2 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); + func_activate = gtk_object_get_data(GTK_OBJECT(parent), + E_FILT_DBLACTIVATE_KEY); if (func) (*func)(func_data, func_arg, func_activate); } +#else + if (event->type == GDK_2BUTTON_PRESS) { + func = g_object_get_data(G_OBJECT(list), E_FILT_DBLFUNC_KEY); + func_arg = g_object_get_data(G_OBJECT(list), E_FILT_DBLARG_KEY); + func_activate = g_object_get_data(G_OBJECT(list), + E_FILT_DBLACTIVATE_KEY); + + if (func) + (*func)(list, func_arg, func_activate); + } +#endif return FALSE; } +#if GTK_MAJOR_VERSION < 2 static void filter_sel_list_cb(GtkWidget *l, gpointer data _U_) +#else +static void +filter_sel_list_cb(GtkTreeSelection *sel, gpointer data _U_) +#endif { - 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); - filter_def *filt; - gchar *name = "", *strval = ""; - GList *sl, *flp; - GtkObject *l_item; - gint sensitivity = FALSE; - - 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 (flp) { - filt = (filter_def *) flp->data; - name = filt->name; - strval = filt->strval; - sensitivity = TRUE; +#if GTK_MAJOR_VERSION < 2 + GtkWidget *main_w = gtk_widget_get_toplevel(l); + GList *sl; + GtkObject *l_item; +#else + GtkWidget *filter_l = GTK_WIDGET(gtk_tree_selection_get_tree_view(sel)); + GtkWidget *main_w = gtk_widget_get_toplevel(filter_l); + GtkTreeModel *model; + GtkTreeIter iter; +#endif + 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 *flp; + gint sensitivity = FALSE; + +#if GTK_MAJOR_VERSION < 2 + 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); +#else + if (gtk_tree_selection_get_selected(sel, &model, &iter)) { + gtk_tree_model_get(model, &iter, 1, &flp, -1); +#endif + if (flp) { + filt = (filter_def *) flp->data; + name = filt->name; + strval = filt->strval; + sensitivity = TRUE; + } } - } - /* - * Did you know that this function is called when the window is destroyed? - * Funny, that. - * This means that we have to: - * - * attach to the top-level window data items containing pointers to - * the widgets we affect here; - * - * give each of those widgets their own destroy callbacks; - * - * clear that pointer when the widget is destroyed; - * - * don't do anything to the widget if the pointer we get back is - * null; - * - * so that if we're called after any of the widgets we'd affect are - * destroyed, we know that we shouldn't do anything to those widgets. - */ - if (name_te != NULL) - gtk_entry_set_text(GTK_ENTRY(name_te), name); - if (filter_te != NULL) - gtk_entry_set_text(GTK_ENTRY(filter_te), strval); - if (chg_bt != NULL) - gtk_widget_set_sensitive(chg_bt, sensitivity); - if (copy_bt != NULL) - gtk_widget_set_sensitive(copy_bt, sensitivity); - if (del_bt != NULL) - gtk_widget_set_sensitive(del_bt, sensitivity); + /* + * Did you know that this function is called when the window is destroyed? + * Funny, that. + * This means that we have to: + * + * attach to the top-level window data items containing pointers to + * the widgets we affect here; + * + * give each of those widgets their own destroy callbacks; + * + * clear that pointer when the widget is destroyed; + * + * don't do anything to the widget if the pointer we get back is + * null; + * + * so that if we're called after any of the widgets we'd affect are + * destroyed, we know that we shouldn't do anything to those widgets. + */ + if (name_te != NULL) + gtk_entry_set_text(GTK_ENTRY(name_te), name); + if (filter_te != NULL) + gtk_entry_set_text(GTK_ENTRY(filter_te), strval); + if (chg_bt != NULL) + gtk_widget_set_sensitive(chg_bt, sensitivity); + if (copy_bt != NULL) + gtk_widget_set_sensitive(copy_bt, sensitivity); + if (del_bt != NULL) + gtk_widget_set_sensitive(del_bt, sensitivity); } static void @@ -933,26 +1170,46 @@ typedef struct { 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); - new_filter_cb_args_t *args = user_data; - filter_def *nfilt = args->nflp->data; - GtkWidget *nl_lb, *nl_item; - - 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) { - /* Select the item. */ - gtk_list_select_child(GTK_LIST(filter_l), nl_item); - } + GtkWidget *main_w = data; +#if GTK_MAJOR_VERSION < 2 + GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), + E_FILT_FILTER_L_KEY); + GtkWidget *nl_lb, *nl_item; +#else + GtkTreeView *filter_l; + GtkListStore *store; + GtkTreeIter iter; +#endif + new_filter_cb_args_t *args = user_data; + filter_def *nfilt = args->nflp->data; + +#if GTK_MAJOR_VERSION < 2 + 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) { + /* Select the item. */ + gtk_list_select_child(GTK_LIST(filter_l), nl_item); + } +#else + 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_tree_selection_select_iter(gtk_tree_view_get_selection(filter_l), + &iter); + } +#endif } static void @@ -989,70 +1246,121 @@ filter_new_bt_clicked_cb(GtkWidget *w, gpointer data) } } +#if GTK_MAJOR_VERSION < 2 static void chg_list_item_cb(GtkWidget *nl_item, gpointer data) +#else +static gboolean +chg_list_item_cb(GtkTreeModel *model, GtkTreePath *path _U_, GtkTreeIter *iter, + gpointer data) +#endif { - 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); - - /* Is this the GtkList 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); - } + GList *flp = data; + filter_def *filt = flp->data; +#if GTK_MAJOR_VERSION < 2 + 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); +#else + GList *nl_model; +#endif + +#if GTK_MAJOR_VERSION >= 2 + gtk_tree_model_get(model, iter, 1, &nl_model, -1); +#endif + /* 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. */ +#if GTK_MAJOR_VERSION < 2 + gtk_label_set(nl_lb, filt->name); +#else + gtk_list_store_set(GTK_LIST_STORE(model), iter, 0, filt->name, -1); + return TRUE; +#endif + } +#if GTK_MAJOR_VERSION >= 2 + return FALSE; +#endif } 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); - - gtk_container_foreach(GTK_CONTAINER(filter_l), chg_list_item_cb, user_data); + GtkWidget *main_w = data; + GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), + E_FILT_FILTER_L_KEY); + +#if GTK_MAJOR_VERSION < 2 + gtk_container_foreach(GTK_CONTAINER(filter_l), chg_list_item_cb, user_data); +#else + gtk_tree_model_foreach(gtk_tree_view_get_model(GTK_TREE_VIEW(filter_l)), + chg_list_item_cb, user_data); +#endif } 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); - filter_def *filt; - gchar *name = "", *strval = ""; - GList *sl, *fl_entry; - GtkObject *l_item; - GtkLabel *nl_lb; - filter_list_type_t list = *(filter_list_type_t *)data; - - sl = GTK_LIST(filter_l)->selection; - name = gtk_entry_get_text(GTK_ENTRY(name_te)); - strval = gtk_entry_get_text(GTK_ENTRY(filter_te)); + 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); + filter_def *filt; + GList *fl_entry; + filter_list_type_t list = *(filter_list_type_t *)data; +#if GTK_MAJOR_VERSION < 2 + gchar *name = "", *strval = ""; + GList *sl; + GtkObject *l_item; + GtkLabel *nl_lb; +#else + const gchar *name, *strval; + GtkTreeSelection *sel; + GtkTreeModel *model; + GtkTreeIter iter; +#endif - 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) { - filt = (filter_def *) fl_entry->data; - - if (strlen(name) > 0 && strlen(strval) > 0 && filt) { - g_free(filt->name); - g_free(filt->strval); - filt->name = g_strdup(name); - filt->strval = g_strdup(strval); - - /* 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); - } +#if GTK_MAJOR_VERSION < 2 + sl = GTK_LIST(filter_l)->selection; +#else + sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(filter_l)); +#endif + name = gtk_entry_get_text(GTK_ENTRY(name_te)); + strval = gtk_entry_get_text(GTK_ENTRY(filter_te)); + + /* if something was selected */ +#if GTK_MAJOR_VERSION < 2 + if (sl) { + 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) { +#else + if (gtk_tree_selection_get_selected(sel, &model, &iter)) { + gtk_tree_model_get(model, &iter, 1, &fl_entry, -1); + if (fl_entry != NULL) { +#endif + filt = (filter_def *) fl_entry->data; + + if (strlen(name) > 0 && strlen(strval) > 0 && filt) { + g_free(filt->name); + g_free(filt->strval); + filt->name = g_strdup(name); + filt->strval = g_strdup(strval); + + /* 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); + } + } } - } } static void @@ -1066,34 +1374,51 @@ filter_chg_bt_destroy_cb(GtkWidget *chg_bt, gpointer data _U_) 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; - 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; + 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 *fl_entry, *nfl_entry; + gchar *prefix = "Copy of ", *name; + filter_def *filt; + filter_list_type_t list = *(filter_list_type_t *)data; + new_filter_cb_args_t args; +#if GTK_MAJOR_VERSION < 2 + GList *sl; + GtkObject *l_item; +#else + GtkTreeSelection *sel; + GtkTreeModel *model; + GtkTreeIter iter; +#endif - 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); - if (fl_entry != NULL) { - /* 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); - nfl_entry = add_to_filter_list(list, name, filt->strval); - g_free(name); - - /* Update all the filter list widgets, not just the one in - the dialog box in which we clicked on "Copy". */ - args.active_filter_l = filter_l; - args.nflp = nfl_entry; - g_list_foreach(get_filter_dialog_list(list), new_filter_cb, &args); +#if GTK_MAJOR_VERSION < 2 + sl = GTK_LIST(filter_l)->selection; + /* if something was selected */ + if (sl) { + l_item = GTK_OBJECT(sl->data); + fl_entry = (GList *) gtk_object_get_data(l_item, E_FILT_LIST_ITEM_MODEL_KEY); +#else + 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); +#endif + if (fl_entry != NULL) { + /* 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); + nfl_entry = add_to_filter_list(list, name, filt->strval); + g_free(name); + + /* Update all the filter list widgets, not just the one in + the dialog box in which we clicked on "Copy". */ + args.active_filter_l = filter_l; + args.nflp = nfl_entry; + g_list_foreach(get_filter_dialog_list(list), new_filter_cb, &args); + } } - } } static void @@ -1107,38 +1432,78 @@ filter_copy_bt_destroy_cb(GtkWidget *copy_bt, gpointer data _U_) 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 *main_w = data; + GtkWidget *filter_l = gtk_object_get_data(GTK_OBJECT(main_w), + E_FILT_FILTER_L_KEY); +#if GTK_MAJOR_VERSION < 2 + gint pos = *(gint *)user_data; +#else + gchar *pos = (gchar *)user_data; + GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(filter_l)); + GtkTreeIter iter; +#endif - gtk_list_clear_items(GTK_LIST(filter_l), pos, pos + 1); +#if GTK_MAJOR_VERSION < 2 + gtk_list_clear_items(GTK_LIST(filter_l), pos, pos + 1); +#else + gtk_tree_model_get_iter_from_string(model, &iter, pos); + gtk_list_store_remove(GTK_LIST_STORE(model), &iter); +#endif } 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); - filter_list_type_t list = *(filter_list_type_t *)data; - GList *sl, *fl_entry; - GtkObject *l_item; - gint pos; - - 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); - 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); + GtkWidget *main_w = gtk_widget_get_toplevel(w); + 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; +#if GTK_MAJOR_VERSION < 2 + GList *sl; + GtkObject *l_item; + gint pos; +#else + gchar *pos; + GtkTreeSelection *sel; + GtkTreeModel *model; + GtkTreeIter iter; + GtkTreePath *path; +#endif + +#if GTK_MAJOR_VERSION < 2 + 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); +#else + 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); + path = gtk_tree_model_get_path(model, &iter); + pos = gtk_tree_path_to_string(path); + gtk_tree_path_free(path); +#endif + 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". */ +#if GTK_MAJOR_VERSION < 2 + g_list_foreach(get_filter_dialog_list(list), delete_filter_cb, + &pos); +#else + g_list_foreach(get_filter_dialog_list(list), delete_filter_cb, pos); +#endif + } +#if GTK_MAJOR_VERSION >= 2 + g_free(pos); +#endif } - } } static void |