diff --git a/epan/proto.c b/epan/proto.c index 2f4b033fe0..d873cc4a67 100644 --- a/epan/proto.c +++ b/epan/proto.c @@ -304,7 +304,7 @@ static void save_same_name_hfinfo(gpointer data) /* Points to the first element of an array of Booleans, indexed by a subtree item type; that array element is TRUE if subtrees of an item of that type are to be expanded. */ -gboolean *tree_is_expanded; +static gboolean *tree_is_expanded; /* Number of elements in that array. */ int num_tree_types; @@ -7404,6 +7404,20 @@ proto_check_field_name(const gchar *field_name) return wrs_check_charset(fld_abbrev_chars, field_name); } +gboolean +tree_expanded(int tree_type) +{ + g_assert(tree_type >= 0 && tree_type < num_tree_types); + return tree_is_expanded[tree_type]; +} + +void +tree_expanded_set(int tree_type, gboolean value) +{ + g_assert(tree_type >= 0 && tree_type < num_tree_types); + tree_is_expanded[tree_type] = value; +} + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * diff --git a/epan/proto.h b/epan/proto.h index e82747f9c8..e224364cb0 100644 --- a/epan/proto.h +++ b/epan/proto.h @@ -1852,17 +1852,16 @@ WS_DLL_PUBLIC void proto_registrar_dump_fields(void); WS_DLL_PUBLIC void proto_registrar_dump_ftypes(void); - -/** Points to the first element of an array of Booleans, indexed by - a subtree item type. That array element is TRUE if subtrees of - an item of that type are to be expanded. With MSVC and a - libwireshark.dll, we need a special declaration. */ -WS_DLL_PUBLIC gboolean *tree_is_expanded; - /** Number of elements in the tree_is_expanded array. With MSVC and a * libwireshark.dll, we need a special declaration. */ WS_DLL_PUBLIC int num_tree_types; +/** Returns TRUE if subtrees of that type are to be expanded. */ +WS_DLL_PUBLIC gboolean tree_expanded(int tree_type); + +/** Sets if subtrees of that type are to be expanded. */ +WS_DLL_PUBLIC void tree_expanded_set(int tree_type, gboolean value); + /** glib doesn't have g_ptr_array_len of all things!*/ #ifndef g_ptr_array_len #define g_ptr_array_len(a) ((a)?(a)->len:0) diff --git a/print.c b/print.c index bb4e6911c2..fd6dde9683 100644 --- a/print.c +++ b/print.c @@ -238,7 +238,7 @@ void proto_tree_print_node(proto_node *node, gpointer data) g_assert((fi->tree_type >= -1) && (fi->tree_type < num_tree_types)); if ((pdata->print_dissections == print_dissections_expanded) || ((pdata->print_dissections == print_dissections_as_displayed) && - (fi->tree_type >= 0) && tree_is_expanded[fi->tree_type])) { + (fi->tree_type >= 0) && tree_expanded(fi->tree_type))) { if (node->first_child != NULL) { pdata->level++; proto_tree_children_foreach(node, diff --git a/ui/gtk/packet_panes.c b/ui/gtk/packet_panes.c index ab3a808b0c..15a8ec5736 100644 --- a/ui/gtk/packet_panes.c +++ b/ui/gtk/packet_panes.c @@ -214,11 +214,8 @@ expand_tree(GtkTreeView *tree_view, GtkTreeIter *iter, * Nodes with "finfo->tree_type" of -1 have no ett_ value, and * are thus presumably leaf nodes and cannot be expanded. */ - if (finfo->tree_type != -1) { - g_assert(finfo->tree_type >= 0 && - finfo->tree_type < num_tree_types); - tree_is_expanded[finfo->tree_type] = TRUE; - } + if (finfo->tree_type != -1) + tree_expanded_set(finfo->tree_type, TRUE); } static void @@ -236,11 +233,8 @@ collapse_tree(GtkTreeView *tree_view, GtkTreeIter *iter, * Nodes with "finfo->tree_type" of -1 have no ett_ value, and * are thus presumably leaf nodes and cannot be collapsed. */ - if (finfo->tree_type != -1) { - g_assert(finfo->tree_type >= 0 && - finfo->tree_type < num_tree_types); - tree_is_expanded[finfo->tree_type] = FALSE; - } + if (finfo->tree_type != -1) + tree_expanded_set(finfo->tree_type, FALSE); } struct field_lookup_info { @@ -1288,9 +1282,10 @@ void expand_all_tree(proto_tree *protocol_tree _U_, GtkWidget *tree_view) { int i; - for(i=0; i < num_tree_types; i++) { - tree_is_expanded[i] = TRUE; - } + + for(i=0; i < num_tree_types; i++) + tree_expanded_set(i, TRUE); + gtk_tree_view_expand_all(GTK_TREE_VIEW(tree_view)); } @@ -1298,9 +1293,10 @@ void collapse_all_tree(proto_tree *protocol_tree _U_, GtkWidget *tree_view) { int i; - for(i=0; i < num_tree_types; i++) { - tree_is_expanded[i] = FALSE; - } + + for(i=0; i < num_tree_types; i++) + tree_expanded_set(i, FALSE); + gtk_tree_view_collapse_all(GTK_TREE_VIEW(tree_view)); } @@ -1377,7 +1373,7 @@ expand_finfos(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointe g_assert(fi->tree_type >= 0 && fi->tree_type < num_tree_types); - if (tree_is_expanded[fi->tree_type]) + if (tree_expanded(fi->tree_type)) gtk_tree_view_expand_to_path(tree_view, path); else gtk_tree_view_collapse_row(tree_view, path); diff --git a/ui/qt/proto_tree.cpp b/ui/qt/proto_tree.cpp index c63b26a149..1dcec3b5b1 100644 --- a/ui/qt/proto_tree.cpp +++ b/ui/qt/proto_tree.cpp @@ -140,7 +140,7 @@ proto_tree_draw_node(proto_node *node, gpointer data) } if (is_branch) { - if (tree_is_expanded[fi->tree_type]) { + if (tree_expanded(fi->tree_type)) { item->setExpanded(true); } else { item->setExpanded(false); @@ -334,7 +334,7 @@ void ProtoTree::expand(const QModelIndex & index) { if (fi->tree_type != -1) { g_assert(fi->tree_type >= 0 && fi->tree_type < num_tree_types); - tree_is_expanded[fi->tree_type] = TRUE; + tree_expanded_set(fi->tree_type, TRUE); } } @@ -351,7 +351,7 @@ void ProtoTree::collapse(const QModelIndex & index) { if (fi->tree_type != -1) { g_assert(fi->tree_type >= 0 && fi->tree_type < num_tree_types); - tree_is_expanded[fi->tree_type] = FALSE; + tree_expanded_set(fi->tree_type, FALSE); } } @@ -388,7 +388,7 @@ void ProtoTree::expandAll() { int i; for(i=0; i < num_tree_types; i++) { - tree_is_expanded[i] = TRUE; + tree_expanded_set(i, TRUE); } QTreeWidget::expandAll(); } @@ -397,7 +397,7 @@ void ProtoTree::collapseAll() { int i; for(i=0; i < num_tree_types; i++) { - tree_is_expanded[i] = FALSE; + tree_expanded_set(i, FALSE); } QTreeWidget::collapseAll(); }