diff --git a/src/process-tree-view.c b/src/process-tree-view.c index cffa79e..25828b7 100644 --- a/src/process-tree-view.c +++ b/src/process-tree-view.c @@ -64,6 +64,7 @@ static void xtm_process_tree_view_finalize (GObject *object); static gboolean treeview_clicked (XtmProcessTreeView *treeview, GdkEventButton *event); static gboolean treeview_key_pressed (XtmProcessTreeView *treeview, GdkEventKey *event); +static gboolean treeview_query_tooltip (XtmProcessTreeView *treeview, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer data); static void column_task_pack_cells (XtmProcessTreeView *treeview, GtkTreeViewColumn *column); static void columns_changed (XtmProcessTreeView *treeview); static void read_columns_positions (XtmProcessTreeView *treeview); @@ -224,6 +225,9 @@ xtm_process_tree_view_init (XtmProcessTreeView *treeview) g_signal_connect (treeview, "columns-changed", G_CALLBACK (columns_changed), NULL); g_signal_connect (treeview, "button-press-event", G_CALLBACK (treeview_clicked), NULL); g_signal_connect (treeview, "key-press-event", G_CALLBACK (treeview_key_pressed), NULL); + + g_object_set (treeview, "has-tooltip", TRUE, NULL); + g_signal_connect (treeview, "query-tooltip", G_CALLBACK (treeview_query_tooltip), NULL); } static void @@ -586,6 +590,35 @@ treeview_key_pressed (XtmProcessTreeView *treeview, GdkEventKey *event) return FALSE; } +static gboolean +treeview_query_tooltip (XtmProcessTreeView *treeview, gint x, gint y, gboolean keyboard_tip, GtkTooltip *tooltip, gpointer data) +{ + GtkTreeIter iter; + GtkTreeModel *model = gtk_tree_view_get_model (GTK_TREE_VIEW (treeview)); + GtkTreePath *path = NULL; + gchar *pathstring; + gchar *markup; + + if (!gtk_tree_view_get_tooltip_context (GTK_TREE_VIEW (treeview), &x, &y, keyboard_tip, &model, &path, &iter)) + return FALSE; + + gtk_tree_model_get (model, &iter, -1); + pathstring = gtk_tree_path_to_string (path); + + markup = g_strdup_printf (_(" Starting task\n" + " Changing task\n" + " Terminating task")); + gtk_tooltip_set_markup (tooltip, markup); + + gtk_tree_view_set_tooltip_row (GTK_TREE_VIEW (treeview), tooltip, path); + + gtk_tree_path_free (path); + g_free (pathstring); + g_free (markup); + + return TRUE; +} + static void column_clicked (GtkTreeViewColumn *column, XtmProcessTreeView *treeview) { diff --git a/src/process-window.c b/src/process-window.c index c93ac3d..4d7b6f8 100644 --- a/src/process-window.c +++ b/src/process-window.c @@ -219,7 +219,6 @@ xtm_process_window_init (XtmProcessWindow *window) GtkWidget *icon; GtkToolItem *xwininfo; gint width, height; - gchar *markup; window->settings = xtm_settings_get_default (); @@ -312,11 +311,6 @@ xtm_process_window_init (XtmProcessWindow *window) window->treeview = xtm_process_tree_view_new (); gtk_widget_show (window->treeview); - markup = g_strdup_printf (_(" Starting task\n" - " Changing task\n" - " Terminating task")); - gtk_widget_set_tooltip_markup (GTK_WIDGET (gtk_builder_get_object (window->builder, "scrolledwindow")), markup); - g_free (markup); gtk_container_add (GTK_CONTAINER (gtk_builder_get_object (window->builder, "scrolledwindow")), window->treeview); window->filter_entry = GTK_WIDGET(gtk_builder_get_object (window->builder, "filter-entry"));