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