sysprof: use greeter for opening new files

Still to be implemented, but this moves from the window back to that flow.
This commit is contained in:
Christian Hergert
2023-07-08 15:54:25 -07:00
parent e76bb4ae44
commit 845930173c
4 changed files with 56 additions and 45 deletions

View File

@ -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;
}
}

View File

@ -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

View File

@ -232,7 +232,8 @@
<property name="icon-name">document-open-recent-symbolic</property>
<property name="title" translatable="yes">Recent</property>
<property name="child">
<object class="GtkLabel"/>
<object class="GtkLabel" id="recent_page">
</object>
</property>
</object>
</child>
@ -241,7 +242,8 @@
<property name="icon-name">document-open-symbolic</property>
<property name="title" translatable="yes">Open</property>
<property name="child">
<object class="GtkLabel"/>
<object class="GtkLabel" id="open_page">
</object>
</property>
</object>
</child>

View File

@ -25,6 +25,7 @@
#include <sysprof-gtk.h>
#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