aboutsummaryrefslogtreecommitdiffstats
path: root/gtk
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2004-03-20 06:34:09 +0000
committerGuy Harris <guy@alum.mit.edu>2004-03-20 06:34:09 +0000
commitddc5a1773ac4fa682eaff622d43b3e7bf16c309c (patch)
tree0f0fdefb2f8b17a96bdeff5a2fdcb86a07ba765b /gtk
parent45e7bf5962d53f4d3abe493fd276bab0cab36d1d (diff)
From Tomas Kukosa:
add Expand Tree to the View menu; make the Expand Tree context menu active iff the currently-selected item has a subtree; fix the GTK2 code for Expand Tree. svn path=/trunk/; revision=10415
Diffstat (limited to 'gtk')
-rw-r--r--gtk/main.c18
-rw-r--r--gtk/menu.c9
-rw-r--r--gtk/proto_draw.c14
-rw-r--r--gtk/proto_draw.h3
4 files changed, 24 insertions, 20 deletions
diff --git a/gtk/main.c b/gtk/main.c
index 27df938fc5..5074e7dd71 100644
--- a/gtk/main.c
+++ b/gtk/main.c
@@ -1,6 +1,6 @@
/* main.c
*
- * $Id: main.c,v 1.418 2004/03/19 06:23:38 guy Exp $
+ * $Id: main.c,v 1.419 2004/03/20 06:34:08 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -1070,11 +1070,7 @@ void expand_tree_cb(GtkWidget *widget _U_, gpointer data _U_) {
#if GTK_MAJOR_VERSION < 2
GtkCTreeNode *node;
#else
- GtkTreeModel *model;
GtkTreePath *path;
- GtkTreeIter iter;
- field_info *fi;
- gboolean valid;
#endif
#if GTK_MAJOR_VERSION < 2
@@ -1082,17 +1078,7 @@ void expand_tree_cb(GtkWidget *widget _U_, gpointer data _U_) {
g_assert(node);
gtk_ctree_expand_recursive(GTK_CTREE(tree_view), node);
#else
- model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree_view));
- path = NULL;
- valid = gtk_tree_model_get_iter_first(model, &iter);
- while (valid) {
- gtk_tree_model_get(model, &iter, 1, &fi, -1);
- if (fi == cfile.finfo_selected) {
- path = gtk_tree_model_get_path(model, &iter);
- break;
- }
- valid = gtk_tree_model_iter_next(model, &iter);
- }
+ path = tree_find_by_field_info(GTK_TREE_VIEW(tree_view), cfile.finfo_selected);
g_assert(path);
gtk_tree_view_expand_row(GTK_TREE_VIEW(tree_view), path, TRUE);
gtk_tree_path_free(path);
diff --git a/gtk/menu.c b/gtk/menu.c
index 968c2bdb3c..d64c609d6d 100644
--- a/gtk/menu.c
+++ b/gtk/menu.c
@@ -1,7 +1,7 @@
/* menu.c
* Menu routines
*
- * $Id: menu.c,v 1.179 2004/03/19 06:23:38 guy Exp $
+ * $Id: menu.c,v 1.180 2004/03/20 06:34:09 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -234,6 +234,7 @@ static GtkItemFactoryEntry menu_items[] =
0, NULL, NULL),
ITEM_FACTORY_ENTRY("/View/_Expand All", NULL, expand_all_cb,
0, NULL, NULL),
+ ITEM_FACTORY_ENTRY("/View/Expand Tree", NULL, expand_tree_cb, 0, NULL, NULL),
ITEM_FACTORY_ENTRY("/View/<separator>", NULL, NULL, 0, "<Separator>", NULL),
ITEM_FACTORY_STOCK_ENTRY("/View/_Coloring Rules...", NULL, color_display_cb,
0, GTK_STOCK_SELECT_COLOR),
@@ -1645,6 +1646,8 @@ set_menus_for_selected_packet(capture_file *cf)
cf->current_frame != NULL);
set_menu_sensitivity(tree_view_menu_factory, "/Expand All",
cf->current_frame != NULL);
+ set_menu_sensitivity(main_menu_factory, "/View/Expand Tree",
+ cf->current_frame != NULL);
set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree",
cf->current_frame != NULL);
set_menu_sensitivity(main_menu_factory, "/View/Show Packet in New Window",
@@ -1762,7 +1765,8 @@ set_menus_for_selected_tree_row(capture_file *cf)
proto_can_match_selected(cf->finfo_selected, cf->edt));
set_menu_sensitivity(tree_view_menu_factory, "/Protocol Properties...",
properties);
- set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree", TRUE);
+ set_menu_sensitivity(main_menu_factory, "/View/Expand Tree", cf->finfo_selected->tree_type != -1);
+ set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree", cf->finfo_selected->tree_type != -1);
} else {
set_menu_sensitivity(main_menu_factory,
"/Go/Go to Corresponding Packet", FALSE);
@@ -1774,6 +1778,7 @@ set_menus_for_selected_tree_row(capture_file *cf)
set_menu_sensitivity(tree_view_menu_factory, "/Prepare", FALSE);
set_menu_sensitivity(tree_view_menu_factory, "/Protocol Properties...",
FALSE);
+ set_menu_sensitivity(main_menu_factory, "/View/Expand Tree", FALSE);
set_menu_sensitivity(tree_view_menu_factory, "/Expand Tree", FALSE);
}
diff --git a/gtk/proto_draw.c b/gtk/proto_draw.c
index e5361121e4..4bc6284977 100644
--- a/gtk/proto_draw.c
+++ b/gtk/proto_draw.c
@@ -1,7 +1,7 @@
/* proto_draw.c
* Routines for GTK+ packet display
*
- * $Id: proto_draw.c,v 1.89 2004/02/20 17:31:00 ulfl Exp $
+ * $Id: proto_draw.c,v 1.90 2004/03/20 06:34:09 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -337,6 +337,18 @@ lookup_finfo(GtkTreeModel *model, GtkTreePath *path _U_, GtkTreeIter *iter,
}
return FALSE;
}
+
+GtkTreePath *tree_find_by_field_info(GtkTreeView *tree_view, field_info *finfo) {
+ GtkTreeModel *model;
+ struct field_lookup_info fli;
+
+ model = gtk_tree_view_get_model(tree_view);
+ fli.fi = finfo;
+ gtk_tree_model_foreach(model, lookup_finfo, &fli);
+
+ return gtk_tree_model_get_path(model, &fli.iter);
+}
+
#endif
/* If the user selected a certain byte in the byte view, try to find
diff --git a/gtk/proto_draw.h b/gtk/proto_draw.h
index 1cc0147759..0300abce34 100644
--- a/gtk/proto_draw.h
+++ b/gtk/proto_draw.h
@@ -1,7 +1,7 @@
/* proto_draw.h
* Definitions for GTK+ packet display structures and routines
*
- * $Id: proto_draw.h,v 1.24 2004/01/27 20:36:48 guy Exp $
+ * $Id: proto_draw.h,v 1.25 2004/03/20 06:34:09 guy Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -64,6 +64,7 @@ void packet_hex_print(GtkTextView *, const guint8 *, frame_data *, field_info *,
guint);
void packet_hex_reprint(GtkTextView *);
void set_ptree_font_all(PangoFontDescription *font);
+GtkTreePath *tree_find_by_field_info(GtkTreeView *tree_view, field_info *finfo);
#endif
extern GtkWidget * main_tree_view_new(e_prefs *prefs, GtkWidget **tree_view_p);