sysprof: add action to make root

This commit is contained in:
Christian Hergert
2023-07-19 16:48:00 -07:00
parent e15bc0c3b9
commit 4be91a73d8

View File

@ -251,28 +251,32 @@ functions_selection_changed_cb (SysprofCallgraphView *self,
} }
static void static void
descendant_activated_cb (SysprofCallgraphView *self, make_descendant_root_action (GtkWidget *widget,
guint position, const char *action_name,
GtkColumnView *column_view) GVariant *param)
{ {
SysprofCallgraphView *self = (SysprofCallgraphView *)widget;
g_autoptr(SysprofCallgraphFrame) frame = NULL; g_autoptr(SysprofCallgraphFrame) frame = NULL;
g_autoptr(GtkTreeListRow) row = NULL; g_autoptr(GtkTreeListRow) row = NULL;
GtkSelectionModel *model; GtkSelectionModel *model;
g_assert (SYSPROF_IS_CALLGRAPH_VIEW (self)); g_assert (SYSPROF_IS_CALLGRAPH_VIEW (self));
g_assert (GTK_IS_COLUMN_VIEW (column_view));
if ((model = gtk_column_view_get_model (column_view)) && if ((model = gtk_column_view_get_model (self->descendants_column_view)) &&
(row = g_list_model_get_item (G_LIST_MODEL (model), position)) && GTK_IS_SINGLE_SELECTION (model) &&
(frame = gtk_tree_list_row_get_item (row))) (row = gtk_single_selection_get_selected_item (GTK_SINGLE_SELECTION (model))) &&
GTK_IS_TREE_LIST_ROW (row) &&
(frame = gtk_tree_list_row_get_item (row)) &&
SYSPROF_IS_CALLGRAPH_FRAME (frame))
{ {
SysprofSymbol *symbol = sysprof_callgraph_frame_get_symbol (frame); SysprofSymbol *symbol = sysprof_callgraph_frame_get_symbol (frame);
sysprof_callgraph_descendants_async (self->callgraph, if (sysprof_symbol_get_kind (symbol) != SYSPROF_SYMBOL_KIND_ROOT)
symbol, sysprof_callgraph_descendants_async (self->callgraph,
NULL, symbol,
sysprof_callgraph_view_descendants_cb, NULL,
g_object_ref (self)); sysprof_callgraph_view_descendants_cb,
g_object_ref (self));
} }
} }
@ -432,13 +436,15 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass)
gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/sysprof-callgraph-view.ui"); gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/sysprof-callgraph-view.ui");
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
gtk_widget_class_set_css_name (widget_class, "callgraphview"); gtk_widget_class_set_css_name (widget_class, "callgraphview");
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, callers_column_view); gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, callers_column_view);
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, descendants_column_view); gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, descendants_column_view);
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, descendants_name_sorter); gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, descendants_name_sorter);
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, functions_column_view); gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, functions_column_view);
gtk_widget_class_bind_template_child (widget_class, SysprofCallgraphView, functions_name_sorter); 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, paned);
gtk_widget_class_bind_template_callback (widget_class, descendant_activated_cb);
gtk_widget_class_install_action (widget_class, "callgraph.make-descendant-root", NULL, make_descendant_root_action);
klass->augment_size = GLIB_SIZEOF_VOID_P; klass->augment_size = GLIB_SIZEOF_VOID_P;