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