diff options
author | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2012-11-14 02:53:41 +0000 |
---|---|---|
committer | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2012-11-14 02:53:41 +0000 |
commit | e0da278d5f8192babe9ec0435d4415e3efb90b4f (patch) | |
tree | 731494651e9ff09c981be10008bd0a908ebf0805 /ui/gtk/conversations_table.c | |
parent | 9145ad578123e8c9e98502d42ce8ecb25d4741b4 (diff) |
After launching 'Follow stream' or one of the graphs, restore the
conversation selection.
svn path=/trunk/; revision=46027
Diffstat (limited to 'ui/gtk/conversations_table.c')
-rw-r--r-- | ui/gtk/conversations_table.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/ui/gtk/conversations_table.c b/ui/gtk/conversations_table.c index d2063dd24d..2e57a63654 100644 --- a/ui/gtk/conversations_table.c +++ b/ui/gtk/conversations_table.c @@ -2109,6 +2109,8 @@ draw_ct_table_data(conversations_table *ct) get_ct_table_address(ct, conversation, entries); conversation->iter_valid = TRUE; + + /* All entries, including fixed ones */ gtk_list_store_insert_with_values( store , &conversation->iter, G_MAXINT, SRC_ADR_COLUMN, entries[0], SRC_PORT_COLUMN, entries[1], @@ -2128,6 +2130,7 @@ draw_ct_table_data(conversations_table *ct) -1); } else { + /* Only changable entries */ gtk_list_store_set (store, &conversation->iter, PACKETS_COLUMN, conversation->tx_frames+conversation->rx_frames, BYTES_COLUMN, conversation->tx_bytes+conversation->rx_bytes, @@ -2156,6 +2159,16 @@ draw_ct_table_data(conversations_table *ct) gtk_tree_view_set_model(GTK_TREE_VIEW(ct->table), GTK_TREE_MODEL(store)); g_object_unref(store); } + + /* Restore conversation selection */ + if (ct->conversations && ct->reselection_idx != -1) { + /* Look up the same conversation */ + conv_t *conversation = &g_array_index(ct->conversations, conv_t, ct->reselection_idx); + if (conversation) { + gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(ct->table)), + &conversation->iter); + } + } } static void @@ -2506,6 +2519,9 @@ graph_cb(GtkWidget *follow_stream_bt, gboolean reverse_direction) else { simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Unknown stream: %s", ct->name); } + + /* Remember index of selected conversation you can try to restore after next redrawing */ + ct->reselection_idx = idx; } @@ -2572,6 +2588,9 @@ follow_stream_cb(GtkWidget *follow_stream_bt, gpointer data _U_) follow_udp_stream_cb(follow_stream_bt, data); else simple_dialog(ESD_TYPE_ERROR, ESD_BTN_OK, "Unknown stream: %s", ct->name); + + /* Remember index of selected conversation you can try to restore after next redrawing */ + ct->reselection_idx = idx; } @@ -2683,6 +2702,9 @@ init_conversation_table(gboolean hide_ports, const char *table_name, const char g_signal_connect(conversations->win, "delete_event", G_CALLBACK(window_delete_event_cb), NULL); g_signal_connect(conversations->win, "destroy", G_CALLBACK(ct_win_destroy_cb), conversations); + /* Initially there is no conversation selection to reselect */ + conversations->reselection_idx = -1; + gtk_widget_show_all(conversations->win); window_present(conversations->win); |