From 08927ef4f7ecffc4cc0cb494d3d7f50417f1c3bc Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Mon, 7 Aug 2023 13:48:54 -0700 Subject: [PATCH] sysprof: hoist capture open dialog into sysprof-window.c This allows it to be reused from the window without having to have pages in the greeter. --- src/sysprof/sysprof-greeter.c | 82 +---------------------------------- src/sysprof/sysprof-greeter.h | 10 +---- src/sysprof/sysprof-window.c | 79 ++++++++++++++++++++++++++++----- src/sysprof/sysprof-window.h | 1 + 4 files changed, 71 insertions(+), 101 deletions(-) diff --git a/src/sysprof/sysprof-greeter.c b/src/sysprof/sysprof-greeter.c index 731f7b15..344f74a9 100644 --- a/src/sysprof/sysprof-greeter.c +++ b/src/sysprof/sysprof-greeter.c @@ -301,71 +301,12 @@ sysprof_greeter_record_to_file_action (GtkWidget *widget, g_object_ref (self)); } -static void -sysprof_greeter_choose_file_for_open_cb (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GtkFileDialog *dialog = (GtkFileDialog *)object; - g_autoptr(SysprofGreeter) 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_GREETER (self)); - - if ((file = gtk_file_dialog_open_finish (dialog, result, &error))) - { - if (g_file_is_native (file)) - { - sysprof_window_open (SYSPROF_APPLICATION_DEFAULT, file); - gtk_window_destroy (GTK_WINDOW (self)); - } - else - { - GtkWidget *message; - - message = adw_message_dialog_new (NULL, - _("Must Capture to Local File"), - _("You must choose a local file to capture using Sysprof")); - adw_message_dialog_add_response (ADW_MESSAGE_DIALOG (message), "close", _("Close")); - gtk_window_present (GTK_WINDOW (message)); - } - } -} - static void sysprof_greeter_select_file_action (GtkWidget *widget, const char *action_name, GVariant *param) { - SysprofGreeter *self = (SysprofGreeter *)widget; - g_autoptr(GtkFileDialog) dialog = NULL; - g_autoptr(GtkFileFilter) filter = NULL; - g_autoptr(GListStore) filters = NULL; - - g_assert (SYSPROF_IS_GREETER (self)); - - dialog = gtk_file_dialog_new (); - gtk_file_dialog_set_title (dialog, _("Open Recording")); - gtk_file_dialog_set_accept_label (dialog, _("Open")); - gtk_file_dialog_set_modal (dialog, TRUE); - - filter = gtk_file_filter_new (); - gtk_file_filter_set_name (filter, _("Sysprof Capture (*.syscap)")); - gtk_file_filter_add_mime_type (filter, "application/x-sysprof-capture"); - gtk_file_filter_add_suffix (filter, "syscap"); - - filters = g_list_store_new (GTK_TYPE_FILE_FILTER); - g_list_store_append (filters, filter); - gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters)); - - gtk_file_dialog_open (dialog, - GTK_WINDOW (self), - NULL, - sysprof_greeter_choose_file_for_open_cb, - g_object_ref (self)); + sysprof_window_open_file (GTK_WINDOW (widget)); } static char * @@ -387,8 +328,6 @@ sidebar_row_activated_cb (SysprofGreeter *self, adw_view_stack_set_visible_child (self->view_stack, adw_view_stack_page_get_child (page)); - //adw_window_title_set_title (self->view_title, - //adw_view_stack_page_get_title (page)); } static GtkWidget * @@ -605,22 +544,3 @@ 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; - - 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 690ac510..1021d18e 100644 --- a/src/sysprof/sysprof-greeter.h +++ b/src/sysprof/sysprof-greeter.h @@ -28,14 +28,6 @@ G_BEGIN_DECLS G_DECLARE_FINAL_TYPE (SysprofGreeter, sysprof_greeter, SYSPROF, GREETER, AdwWindow) -typedef enum _SysprofGreeterPage -{ - SYSPROF_GREETER_PAGE_RECORD, - SYSPROF_GREETER_PAGE_OPEN, -} SysprofGreeterPage; - -GtkWidget *sysprof_greeter_new (void); -void sysprof_greeter_set_page (SysprofGreeter *self, - SysprofGreeterPage page); +GtkWidget *sysprof_greeter_new (void); G_END_DECLS diff --git a/src/sysprof/sysprof-window.c b/src/sysprof/sysprof-window.c index 3c58bccb..7a5f684a 100644 --- a/src/sysprof/sysprof-window.c +++ b/src/sysprof/sysprof-window.c @@ -94,18 +94,67 @@ sysprof_window_update_zoom_actions (SysprofWindow *self) } static void -show_greeter (SysprofWindow *self, - SysprofGreeterPage page) +sysprof_window_open_file_cb (GObject *object, + GAsyncResult *result, + gpointer user_data) { - SysprofGreeter *greeter; + GtkFileDialog *dialog = (GtkFileDialog *)object; + g_autoptr(GtkWindow) transient_for = user_data; + g_autoptr(GError) error = NULL; + g_autoptr(GFile) file = NULL; - g_assert (SYSPROF_IS_WINDOW (self)); + g_assert (GTK_IS_FILE_DIALOG (dialog)); + g_assert (G_IS_ASYNC_RESULT (result)); + g_assert (!transient_for || GTK_IS_WINDOW (transient_for)); - greeter = g_object_new (SYSPROF_TYPE_GREETER, - "transient-for", self, - NULL); - sysprof_greeter_set_page (greeter, page); - gtk_window_present (GTK_WINDOW (greeter)); + if ((file = gtk_file_dialog_open_finish (dialog, result, &error))) + { + if (g_file_is_native (file)) + { + sysprof_window_open (SYSPROF_APPLICATION_DEFAULT, file); + + if (transient_for && !SYSPROF_IS_WINDOW (transient_for)) + gtk_window_destroy (transient_for); + } + else + { + GtkWidget *message; + + message = adw_message_dialog_new (NULL, + _("Must Capture to Local File"), + _("You must choose a local file to capture using Sysprof")); + adw_message_dialog_add_response (ADW_MESSAGE_DIALOG (message), "close", _("Close")); + gtk_window_present (GTK_WINDOW (message)); + } + } +} + +void +sysprof_window_open_file (GtkWindow *parent) +{ + g_autoptr(GtkFileDialog) dialog = NULL; + g_autoptr(GtkFileFilter) filter = NULL; + g_autoptr(GListStore) filters = NULL; + + dialog = gtk_file_dialog_new (); + gtk_file_dialog_set_title (dialog, _("Open Recording")); + gtk_file_dialog_set_accept_label (dialog, _("Open")); + gtk_file_dialog_set_modal (dialog, TRUE); + + filter = gtk_file_filter_new (); + gtk_file_filter_set_name (filter, _("Sysprof Capture (*.syscap)")); + gtk_file_filter_add_mime_type (filter, "application/x-sysprof-capture"); + gtk_file_filter_add_suffix (filter, "syscap"); + + filters = g_list_store_new (GTK_TYPE_FILE_FILTER); + g_list_store_append (filters, filter); + gtk_file_dialog_set_filters (dialog, G_LIST_MODEL (filters)); + + gtk_file_dialog_open (dialog, + parent, + NULL, + sysprof_window_open_file_cb, + parent ? g_object_ref (parent) : NULL); } static void @@ -113,7 +162,7 @@ sysprof_window_open_capture_action (GtkWidget *widget, const char *action_name, GVariant *param) { - show_greeter (SYSPROF_WINDOW (widget), SYSPROF_GREETER_PAGE_OPEN); + sysprof_window_open_file (GTK_WINDOW (widget)); } static void @@ -121,7 +170,15 @@ sysprof_window_record_capture_action (GtkWidget *widget, const char *action_name, GVariant *param) { - show_greeter (SYSPROF_WINDOW (widget), SYSPROF_GREETER_PAGE_RECORD); + SysprofWindow *self = (SysprofWindow *)widget; + SysprofGreeter *greeter; + + g_assert (SYSPROF_IS_WINDOW (self)); + + greeter = g_object_new (SYSPROF_TYPE_GREETER, + "transient-for", self, + NULL); + gtk_window_present (GTK_WINDOW (greeter)); } static void diff --git a/src/sysprof/sysprof-window.h b/src/sysprof/sysprof-window.h index 649d3fc8..4da9a635 100644 --- a/src/sysprof/sysprof-window.h +++ b/src/sysprof/sysprof-window.h @@ -35,6 +35,7 @@ G_DECLARE_FINAL_TYPE (SysprofWindow, sysprof_window, SYSPROF, WINDOW, AdwApplica GtkWidget *sysprof_window_new (SysprofApplication *app, SysprofDocument *document); +void sysprof_window_open_file (GtkWindow *transient_for); void sysprof_window_open (SysprofApplication *app, GFile *file); void sysprof_window_open_fd (SysprofApplication *app,