aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/filter_prefs.c
diff options
context:
space:
mode:
authorOlivier Abad <oabad@noos.fr>2002-11-03 17:38:45 +0000
committerOlivier Abad <oabad@noos.fr>2002-11-03 17:38:45 +0000
commit05ef1fc475a3e569a641424a75b81f74d90ba8ca (patch)
treee205dc0b1cb685304fd20edb3ebd398884c30ba3 /gtk/filter_prefs.c
parentae2198ea4ecf9896ef2dc3ed54526fbfbe764077 (diff)
Merge gtk and gtk2 directories.
svn path=/trunk/; revision=6552
Diffstat (limited to 'gtk/filter_prefs.c')
-rw-r--r--gtk/filter_prefs.c1385
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