From 95a7ceb1ae7d134cc627fa56b6312d3f88877497 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Fri, 14 Jul 2023 19:28:38 -0700 Subject: [PATCH] libsysprof-gtk: fix filtering of items in table --- src/libsysprof-gtk/sysprof-mark-table.c | 62 ++++-------------------- src/libsysprof-gtk/sysprof-mark-table.ui | 27 +++++++++++ 2 files changed, 36 insertions(+), 53 deletions(-) diff --git a/src/libsysprof-gtk/sysprof-mark-table.c b/src/libsysprof-gtk/sysprof-mark-table.c index e5ef6055..8bc667e8 100644 --- a/src/libsysprof-gtk/sysprof-mark-table.c +++ b/src/libsysprof-gtk/sysprof-mark-table.c @@ -21,6 +21,7 @@ #include "config.h" #include "sysprof-css-private.h" +#include "sysprof-time-filter-model.h" #include "sysprof-mark-table.h" #include "sysprof-time-label.h" @@ -47,43 +48,6 @@ G_DEFINE_FINAL_TYPE (SysprofMarkTable, sysprof_mark_table, GTK_TYPE_WIDGET) static GParamSpec *properties [N_PROPS]; -static void -sysprof_mark_table_disconnect (SysprofMarkTable *self) -{ - g_assert (SYSPROF_IS_MARK_TABLE (self)); - g_assert (SYSPROF_IS_SESSION (self->session)); - - gtk_column_view_set_model (self->column_view, NULL); -} - -static void -sysprof_mark_table_connect (SysprofMarkTable *self) -{ - g_autoptr(GtkSingleSelection) single = NULL; - GtkFilterListModel *model; - SysprofDocument *document; - GtkSorter *column_sorter; - GtkSortListModel *sort_model; - - g_assert (SYSPROF_IS_MARK_TABLE (self)); - g_assert (SYSPROF_IS_SESSION (self->session)); - - column_sorter = gtk_column_view_get_sorter (self->column_view); - - document = sysprof_session_get_document (self->session); - model = gtk_filter_list_model_new (sysprof_document_list_marks (document), NULL); - g_object_bind_property (self->session, "filter", model, "filter", - G_BINDING_SYNC_CREATE); - sort_model = gtk_sort_list_model_new (G_LIST_MODEL (model), g_object_ref (column_sorter)); - single = gtk_single_selection_new (G_LIST_MODEL (sort_model)); - - gtk_column_view_set_model (self->column_view, GTK_SELECTION_MODEL (single)); - - gtk_column_view_sort_by_column (self->column_view, - self->start_column, - GTK_SORT_ASCENDING); -} - static void sysprof_mark_table_activate_cb (SysprofMarkTable *self, guint position, @@ -115,10 +79,7 @@ sysprof_mark_table_dispose (GObject *object) SysprofMarkTable *self = (SysprofMarkTable *)object; if (self->session) - { - sysprof_mark_table_disconnect (self); - g_clear_object (&self->session); - } + g_clear_object (&self->session); g_clear_pointer (&self->box, gtk_widget_unparent); @@ -191,6 +152,7 @@ sysprof_mark_table_class_init (SysprofMarkTableClass *klass) g_resources_register (libsysprof_gtk_get_resource ()); g_type_ensure (SYSPROF_TYPE_DOCUMENT_MARK); + g_type_ensure (SYSPROF_TYPE_TIME_FILTER_MODEL); g_type_ensure (SYSPROF_TYPE_TIME_LABEL); } @@ -200,6 +162,10 @@ sysprof_mark_table_init (SysprofMarkTable *self) _sysprof_css_init (); gtk_widget_init_template (GTK_WIDGET (self)); + + gtk_column_view_sort_by_column (self->column_view, + self->start_column, + GTK_SORT_ASCENDING); } GtkWidget * @@ -229,16 +195,6 @@ sysprof_mark_table_set_session (SysprofMarkTable *self, g_return_if_fail (SYSPROF_IS_MARK_TABLE (self)); g_return_if_fail (!session || SYSPROF_IS_SESSION (session)); - if (self->session == session) - return; - - if (self->session) - sysprof_mark_table_disconnect (self); - - g_set_object (&self->session, session); - - if (session) - sysprof_mark_table_connect (self); - - g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SESSION]); + if (g_set_object (&self->session, session)) + g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_SESSION]); } diff --git a/src/libsysprof-gtk/sysprof-mark-table.ui b/src/libsysprof-gtk/sysprof-mark-table.ui index 98d8f6a9..2181a0cf 100644 --- a/src/libsysprof-gtk/sysprof-mark-table.ui +++ b/src/libsysprof-gtk/sysprof-mark-table.ui @@ -14,6 +14,33 @@ true + + + + + + column_view + + + + + + SysprofMarkTable + + + + + + SysprofMarkTable + + + + + + + + + Start