diff options
author | Gerald Combs <gerald@wireshark.org> | 2010-05-25 23:55:33 +0000 |
---|---|---|
committer | Gerald Combs <gerald@wireshark.org> | 2010-05-25 23:55:33 +0000 |
commit | 237eef2ae7c9c4bb8b75fac76d79d3c3ad76fc51 (patch) | |
tree | dbbdd4b71bebbb1b3c5f09f834bcb7c3d9de5ff9 /gtk/gui_utils.c | |
parent | a34ed6fcffef2c2ba625373b4729f0e2f292cd33 (diff) |
r32323 broke packet detail tree expansion using the left/right keys on
X11. Add back the removed code and add checks for expandable items.
svn path=/trunk/; revision=32957
Diffstat (limited to 'gtk/gui_utils.c')
-rw-r--r-- | gtk/gui_utils.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/gtk/gui_utils.c b/gtk/gui_utils.c index b36e48aa38..44f1c40736 100644 --- a/gtk/gui_utils.c +++ b/gtk/gui_utils.c @@ -1185,7 +1185,7 @@ tree_view_key_pressed_cb(GtkWidget *tree, GdkEventKey *event, gpointer user_data GtkTreeIter parent; GtkTreeModel* model; GtkTreePath* path; - gboolean expanded; + gboolean expanded, expandable; int rc = FALSE; selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree)); @@ -1201,14 +1201,18 @@ tree_view_key_pressed_cb(GtkWidget *tree, GdkEventKey *event, gpointer user_data if(!path) { return FALSE; } + + /* Always FALSE when we're in the packet list (at least until we add sub-packets) */ expanded = gtk_tree_view_row_expanded(GTK_TREE_VIEW(tree), path); + expandable = gtk_tree_model_iter_has_child(model, &iter); switch (event->keyval) { case GDK_Left: if(expanded) { - /* subtree is expanded, collapse it by letting default callback handle it. */ - rc = FALSE; - break; + /* Subtree is expanded. Collapse it. */ + gtk_tree_view_collapse_row(GTK_TREE_VIEW(tree), path); + rc = TRUE; + break; } /* No break - fall through to jumping to the parent */ case GDK_BackSpace: @@ -1230,6 +1234,16 @@ tree_view_key_pressed_cb(GtkWidget *tree, GdkEventKey *event, gpointer user_data break; } break; + case GDK_Right: + if (expandable) { + /* We have a subtree. Try to expand it. */ + gtk_tree_view_expand_row(GTK_TREE_VIEW(tree), path, FALSE /* !open_all */); + rc = TRUE; + break; + } else { + rc = FALSE; + break; + } case GDK_Return: case GDK_KP_Enter: /* Reverse the current state. */ |