aboutsummaryrefslogtreecommitdiffstats
path: root/ui/gtk/packet_list.c
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2012-11-22 12:33:21 +0000
committerAnders Broman <anders.broman@ericsson.com>2012-11-22 12:33:21 +0000
commitfbce97738b578e1cda3c3053e9717f2fd403a911 (patch)
tree85f3e89694f8851f4ee421def4649b203c02ae81 /ui/gtk/packet_list.c
parent79974a41b089818c6bfd59a8b5edf3f0f595a168 (diff)
From Preben Guldberg:
Add a tooltip for a pkt_comment column to show packet comment. Modified to check frame data for packet_comment and show it as a tooltip for the entire row. https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=7995 svn path=/trunk/; revision=46141
Diffstat (limited to 'ui/gtk/packet_list.c')
-rw-r--r--ui/gtk/packet_list.c47
1 files changed, 47 insertions, 0 deletions
diff --git a/ui/gtk/packet_list.c b/ui/gtk/packet_list.c
index 397e5108d4..c6f19453cb 100644
--- a/ui/gtk/packet_list.c
+++ b/ui/gtk/packet_list.c
@@ -100,6 +100,7 @@ static void show_cell_data_func(GtkTreeViewColumn *col,
gpointer data);
static gint row_number_from_iter(GtkTreeIter *iter);
static void scroll_to_current(void);
+static gboolean query_packet_list_tooltip_cb(GtkWidget *widget, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer data _U_);
void packet_list_set_sel_browse(gboolean val, gboolean force_set);
@@ -747,6 +748,9 @@ create_view_and_model(void)
g_signal_connect(packetlist->view, "button_press_event", G_CALLBACK(popup_menu_handler),
g_object_get_data(G_OBJECT(popup_menu_object), PM_PACKET_LIST_KEY));
column_changed_handler_id = g_signal_connect(packetlist->view, "columns-changed", G_CALLBACK(column_dnd_changed_cb), NULL);
+ g_object_set(packetlist->view, "has-tooltip", TRUE, NULL);
+ g_signal_connect(packetlist->view, "query-tooltip",
+ G_CALLBACK(query_packet_list_tooltip_cb), NULL);
g_object_set_data(G_OBJECT(popup_menu_object), E_MPACKET_LIST_KEY, packetlist);
/* g_object_unref(packetlist); */ /* Destroy automatically with view for now */ /* XXX - Messes up freezing & thawing */
@@ -1784,3 +1788,46 @@ packet_list_colorize_packets(void)
packet_list_reset_colorized(packetlist);
gtk_widget_queue_draw (packetlist->view);
}
+
+static gboolean
+query_packet_list_tooltip_cb(GtkWidget *widget, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer data _U_)
+{
+ GtkTreeIter iter;
+ GtkTreeView *tree_view = GTK_TREE_VIEW(widget);
+ GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
+ GtkTreePath *path = NULL;
+ GtkTreeViewColumn *column;
+ gint col, num_cols;
+ frame_data *fdata;
+ GtkCellRenderer* renderer=NULL;
+ GList *renderer_list;
+ gboolean result = FALSE;
+
+ if (!gtk_tree_view_get_tooltip_context(tree_view, &x, &y, keyboard_tip, &model, &path, &iter))
+ return result;
+
+ if (gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(tree_view), x, y, NULL, &column, NULL, NULL)) {
+ num_cols = g_list_length(prefs.col_list);
+
+ for (col = 0; col < num_cols; col++) {
+ if (gtk_tree_view_get_column(tree_view, col) == column)
+ break;
+ }
+
+ fdata = packet_list_get_record(model, &iter);
+ if (fdata->opt_comment != NULL) {
+ gtk_tooltip_set_markup (tooltip, fdata->opt_comment);
+ renderer_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(column));
+ /* get the first renderer */
+ if (g_list_first(renderer_list)) {
+ renderer = (GtkCellRenderer*)g_list_nth_data(renderer_list, 0);
+ gtk_tree_view_set_tooltip_cell (tree_view, tooltip, path, column, renderer);
+ }
+ g_list_free(renderer_list);
+ result = TRUE;
+ }
+ }
+ gtk_tree_path_free(path);
+
+ return result;
+}