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"));