diff --git a/src/libsysprof-gtk/sysprof-callgraph-view-private.h b/src/libsysprof-gtk/sysprof-callgraph-view-private.h
index def91228..934cea32 100644
--- a/src/libsysprof-gtk/sysprof-callgraph-view-private.h
+++ b/src/libsysprof-gtk/sysprof-callgraph-view-private.h
@@ -38,6 +38,7 @@ struct _SysprofCallgraphView
GtkColumnView *descendants_column_view;
GtkColumnView *functions_column_view;
GtkColumnView *traceables_column_view;
+ GtkColumnView *traceable_column_view;
GtkCustomSorter *descendants_name_sorter;
GtkCustomSorter *functions_name_sorter;
GtkScrolledWindow *scrolled_window;
diff --git a/src/libsysprof-gtk/sysprof-callgraph-view.c b/src/libsysprof-gtk/sysprof-callgraph-view.c
index d2d30aee..d503d24d 100644
--- a/src/libsysprof-gtk/sysprof-callgraph-view.c
+++ b/src/libsysprof-gtk/sysprof-callgraph-view.c
@@ -60,6 +60,29 @@ callers_selection_changed_cb (SysprofCallgraphView *self,
}
}
+static void
+traceables_selection_changed_cb (SysprofCallgraphView *self,
+ guint position,
+ guint n_items,
+ GtkSingleSelection *single)
+{
+ GObject *object;
+
+ g_assert (SYSPROF_IS_CALLGRAPH_VIEW (self));
+ g_assert (GTK_IS_SINGLE_SELECTION (single));
+
+ gtk_column_view_set_model (self->traceable_column_view, NULL);
+
+ if ((object = gtk_single_selection_get_selected_item (single)))
+ {
+ SysprofDocumentTraceable *traceable = SYSPROF_DOCUMENT_TRACEABLE (object);
+ g_autoptr(GListModel) model = sysprof_document_list_symbols_in_traceable (self->document, traceable);
+ g_autoptr(GtkNoSelection) no = gtk_no_selection_new (g_object_ref (model));
+
+ gtk_column_view_set_model (self->traceable_column_view, GTK_SELECTION_MODEL (no));
+ }
+}
+
static void
sysprof_callgraph_view_list_traceables_cb (GObject *object,
GAsyncResult *result,
@@ -77,7 +100,14 @@ sysprof_callgraph_view_list_traceables_cb (GObject *object,
if ((model = sysprof_callgraph_frame_list_traceables_finish (frame, result, &error)))
{
g_autoptr(GtkSingleSelection) single = gtk_single_selection_new (g_object_ref (model));
+
+ g_signal_connect_object (single,
+ "selection-changed",
+ G_CALLBACK (traceables_selection_changed_cb),
+ self,
+ G_CONNECT_SWAPPED);
gtk_column_view_set_model (self->traceables_column_view, GTK_SELECTION_MODEL (single));
+ traceables_selection_changed_cb (self, 0, 0, single);
}
}
@@ -301,6 +331,7 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass)
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, functions_name_sorter);
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, paned);
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, scrolled_window);
+ gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, traceable_column_view);
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, traceables_column_view);
gtk_widget_class_bind_template_callback (widget_class, sysprof_callgraph_view_key_pressed_cb);
gtk_widget_class_bind_template_callback (widget_class, format_time_offset);
@@ -456,6 +487,9 @@ sysprof_callgraph_view_queue_reload (SysprofCallgraphView *self)
gtk_column_view_set_model (self->descendants_column_view, NULL);
gtk_column_view_set_model (self->functions_column_view, NULL);
+ gtk_column_view_set_model (self->callers_column_view, NULL);
+ gtk_column_view_set_model (self->traceables_column_view, NULL);
+ gtk_column_view_set_model (self->traceable_column_view, NULL);
g_clear_handle_id (&self->reload_source, g_source_remove);
g_cancellable_cancel (self->cancellable);
diff --git a/src/libsysprof-gtk/sysprof-callgraph-view.ui b/src/libsysprof-gtk/sysprof-callgraph-view.ui
index ce003a34..ac06e40c 100644
--- a/src/libsysprof-gtk/sysprof-callgraph-view.ui
+++ b/src/libsysprof-gtk/sysprof-callgraph-view.ui
@@ -197,44 +197,14 @@
+
+
+
+
+
+ PID
+ true
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+ GtkListItem
+
+
+
+
+
+
+]]>
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+ Stack Trace
+ true
+
+
+
+
+
+
+
+ ellipsize-middle
+
+
+ GtkListItem
+
+
+
+
+
+
+]]>
+
+
+
+
+
+
+
+ Frame
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ GtkListItem
+
+
+
+
+
]]>