From 845930173c94b722da3af4635010b204bb1c1e80 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Sat, 8 Jul 2023 15:54:25 -0700 Subject: [PATCH] sysprof: use greeter for opening new files Still to be implemented, but this moves from the window back to that flow. --- src/sysprof/sysprof-greeter.c | 35 ++++++++++++++++++++++-- src/sysprof/sysprof-greeter.h | 11 +++++++- src/sysprof/sysprof-greeter.ui | 6 +++-- src/sysprof/sysprof-window.c | 49 +++++++--------------------------- 4 files changed, 56 insertions(+), 45 deletions(-) diff --git a/src/sysprof/sysprof-greeter.c b/src/sysprof/sysprof-greeter.c index 3c64e684..2f24f758 100644 --- a/src/sysprof/sysprof-greeter.c +++ b/src/sysprof/sysprof-greeter.c @@ -34,8 +34,11 @@ struct _SysprofGreeter { AdwWindow parent_instance; + AdwViewStack *view_stack; GtkBox *toolbar; AdwPreferencesPage *record_page; + GtkWidget *open_page; + GtkWidget *recent_page; GtkSwitch *sample_native_stacks; GtkSwitch *record_disk_usage; GtkSwitch *record_network_usage; @@ -188,11 +191,16 @@ sysprof_greeter_class_init (SysprofGreeterClass *klass) object_class->set_property = sysprof_greeter_set_property; gtk_widget_class_set_template_from_resource (widget_class, "/org/gnome/sysprof/sysprof-greeter.ui"); - gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, toolbar); - gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, record_page); + + gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, open_page); + gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, recent_page); gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, record_disk_usage); gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, record_network_usage); + gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, record_page); gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, sample_native_stacks); + gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, toolbar); + gtk_widget_class_bind_template_child (widget_class, SysprofGreeter, view_stack); + gtk_widget_class_bind_template_callback (widget_class, sysprof_greeter_view_stack_notify_visible_child); gtk_widget_class_install_action (widget_class, "win.record-to-memory", NULL, sysprof_greeter_record_to_memory_action); @@ -209,3 +217,26 @@ sysprof_greeter_new (void) { return g_object_new (SYSPROF_TYPE_GREETER, NULL); } + +void +sysprof_greeter_set_page (SysprofGreeter *self, + SysprofGreeterPage page) +{ + g_return_if_fail (SYSPROF_IS_GREETER (self)); + + switch (page) + { + case SYSPROF_GREETER_PAGE_OPEN: + adw_view_stack_set_visible_child (self->view_stack, GTK_WIDGET (self->open_page)); + break; + + case SYSPROF_GREETER_PAGE_RECENT: + adw_view_stack_set_visible_child (self->view_stack, GTK_WIDGET (self->recent_page)); + break; + + default: + case SYSPROF_GREETER_PAGE_RECORD: + adw_view_stack_set_visible_child (self->view_stack, GTK_WIDGET (self->record_page)); + break; + } +} diff --git a/src/sysprof/sysprof-greeter.h b/src/sysprof/sysprof-greeter.h index 1021d18e..2b679ab5 100644 --- a/src/sysprof/sysprof-greeter.h +++ b/src/sysprof/sysprof-greeter.h @@ -28,6 +28,15 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (SysprofGreeter, sysprof_greeter, SYSPROF, GREETER, AdwWindow) -GtkWidget *sysprof_greeter_new (void); +typedef enum _SysprofGreeterPage +{ + SYSPROF_GREETER_PAGE_RECORD, + SYSPROF_GREETER_PAGE_RECENT, + SYSPROF_GREETER_PAGE_OPEN, +} SysprofGreeterPage; + +GtkWidget *sysprof_greeter_new (void); +void sysprof_greeter_set_page (SysprofGreeter *self, + SysprofGreeterPage page); G_END_DECLS diff --git a/src/sysprof/sysprof-greeter.ui b/src/sysprof/sysprof-greeter.ui index 037be9ef..3e80dce5 100644 --- a/src/sysprof/sysprof-greeter.ui +++ b/src/sysprof/sysprof-greeter.ui @@ -232,7 +232,8 @@ document-open-recent-symbolic Recent - + + @@ -241,7 +242,8 @@ document-open-symbolic Open - + + diff --git a/src/sysprof/sysprof-window.c b/src/sysprof/sysprof-window.c index 9dde2db6..da87a2f2 100644 --- a/src/sysprof/sysprof-window.c +++ b/src/sysprof/sysprof-window.c @@ -25,6 +25,7 @@ #include #include "sysprof-files-dialog.h" +#include "sysprof-greeter.h" #include "sysprof-metadata-dialog.h" #include "sysprof-window.h" @@ -46,53 +47,21 @@ G_DEFINE_FINAL_TYPE (SysprofWindow, sysprof_window, ADW_TYPE_APPLICATION_WINDOW) static GParamSpec *properties [N_PROPS]; -static void -sysprof_window_open_capture_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GtkFileDialog *dialog = (GtkFileDialog *)object; - g_autoptr(SysprofWindow) self = user_data; - g_autoptr(GError) error = NULL; - g_autoptr(GFile) file = NULL; - - g_assert (GTK_IS_FILE_DIALOG (dialog)); - g_assert (G_IS_ASYNC_RESULT (result)); - g_assert (SYSPROF_IS_WINDOW (self)); - - if ((file = gtk_file_dialog_open_finish (dialog, result, &error))) - sysprof_window_open (SYSPROF_APPLICATION_DEFAULT, file); -} - static void sysprof_window_open_capture_action (GtkWidget *widget, const char *action_name, GVariant *param) { - g_autoptr(GtkFileDialog) dialog = NULL; - g_autoptr(GtkFileFilter) filter = NULL; - g_autoptr(GListStore) filters = NULL; + SysprofWindow *self = (SysprofWindow *)widget; + SysprofGreeter *greeter; - g_assert (SYSPROF_IS_WINDOW (widget)); + g_assert (SYSPROF_IS_WINDOW (self)); - filter = gtk_file_filter_new (); - gtk_file_filter_add_pattern (filter, "*.syscap"); - gtk_file_filter_add_mime_type (filter, "application/x-sysprof-capture"); - gtk_file_filter_set_name (filter, _("Sysprof Capture (*.syscap)")); - - filters = g_list_store_new (GTK_TYPE_FILE_FILTER); - g_list_store_append (filters, filter); - - dialog = gtk_file_dialog_new (); - gtk_file_dialog_set_title (dialog, _("Open Recording")); - gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters)); - gtk_file_dialog_set_default_filter (dialog, filter); - - gtk_file_dialog_open (dialog, - GTK_WINDOW (widget), - NULL, - sysprof_window_open_capture_cb, - g_object_ref (widget)); + greeter = g_object_new (SYSPROF_TYPE_GREETER, + "transient-for", self, + NULL); + sysprof_greeter_set_page (greeter, SYSPROF_GREETER_PAGE_OPEN); + gtk_window_present (GTK_WINDOW (greeter)); } static void