From 68424bb4a5da1b547654042e583d24ba1534ff36 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 12 Jun 2023 12:42:17 -0700 Subject: [PATCH] libsysprof-gtk: allow sorting descendants name column --- .../sysprof-callgraph-view-private.h | 1 + src/libsysprof-gtk/sysprof-callgraph-view.c | 15 +++++++++++++++ src/libsysprof-gtk/sysprof-callgraph-view.ui | 4 ++++ 3 files changed, 20 insertions(+) diff --git a/src/libsysprof-gtk/sysprof-callgraph-view-private.h b/src/libsysprof-gtk/sysprof-callgraph-view-private.h index 61f7edf8..eb7eb4bb 100644 --- a/src/libsysprof-gtk/sysprof-callgraph-view-private.h +++ b/src/libsysprof-gtk/sysprof-callgraph-view-private.h @@ -37,6 +37,7 @@ struct _SysprofCallgraphView GtkColumnView *callers_column_view; GtkColumnView *descendants_column_view; GtkColumnView *functions_column_view; + GtkCustomSorter *descendants_name_sorter; GtkCustomSorter *functions_name_sorter; GtkScrolledWindow *scrolled_window; GtkWidget *paned; diff --git a/src/libsysprof-gtk/sysprof-callgraph-view.c b/src/libsysprof-gtk/sysprof-callgraph-view.c index db81bff5..46b11873 100644 --- a/src/libsysprof-gtk/sysprof-callgraph-view.c +++ b/src/libsysprof-gtk/sysprof-callgraph-view.c @@ -216,6 +216,7 @@ sysprof_callgraph_view_class_init (SysprofCallgraphViewClass *klass) gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT); 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_name_sorter); 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, paned); @@ -233,6 +234,18 @@ sysprof_callgraph_view_init (SysprofCallgraphView *self) gtk_widget_init_template (GTK_WIDGET (self)); } +static int +descendants_name_compare (gconstpointer a, + gconstpointer b, + gpointer user_data) +{ + SysprofCallgraphFrame *frame_a = (SysprofCallgraphFrame *)a; + SysprofCallgraphFrame *frame_b = (SysprofCallgraphFrame *)b; + + return g_strcmp0 (sysprof_symbol_get_name (sysprof_callgraph_frame_get_symbol (frame_a)), + sysprof_symbol_get_name (sysprof_callgraph_frame_get_symbol (frame_b))); +} + static int functions_name_compare (gconstpointer a, gconstpointer b, @@ -315,6 +328,8 @@ sysprof_callgraph_view_reload_cb (GObject *object, gtk_column_view_set_model (self->functions_column_view, GTK_SELECTION_MODEL (functions_selection)); + gtk_custom_sorter_set_sort_func (self->descendants_name_sorter, + descendants_name_compare, NULL, NULL); gtk_custom_sorter_set_sort_func (self->functions_name_sorter, functions_name_compare, NULL, NULL); diff --git a/src/libsysprof-gtk/sysprof-callgraph-view.ui b/src/libsysprof-gtk/sysprof-callgraph-view.ui index 7fb41325..fa893413 100644 --- a/src/libsysprof-gtk/sysprof-callgraph-view.ui +++ b/src/libsysprof-gtk/sysprof-callgraph-view.ui @@ -109,6 +109,10 @@ Descendants true + + + +