mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2025-12-31 20:36:25 +00:00
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:
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user