sysprof: make escape stop the current profiler

This commit is contained in:
Christian Hergert
2019-05-20 18:26:25 -07:00
parent 28def4c34e
commit f330de967b
3 changed files with 46 additions and 11 deletions

View File

@ -254,13 +254,11 @@ stop_recording_cb (GSimpleAction *action,
gpointer user_data) gpointer user_data)
{ {
SysprofDisplay *self = user_data; SysprofDisplay *self = user_data;
SysprofDisplayPrivate *priv = sysprof_display_get_instance_private (self);
g_assert (G_IS_SIMPLE_ACTION (action)); g_assert (G_IS_SIMPLE_ACTION (action));
g_assert (SYSPROF_IS_DISPLAY (self)); g_assert (SYSPROF_IS_DISPLAY (self));
if (priv->profiler != NULL) sysprof_display_stop_recording (self);
sysprof_profiler_stop (priv->profiler);
} }
static void static void
@ -572,3 +570,14 @@ sysprof_display_get_can_save (SysprofDisplay *self)
return sysprof_capture_view_get_reader (priv->capture_view) != NULL; return sysprof_capture_view_get_reader (priv->capture_view) != NULL;
} }
void
sysprof_display_stop_recording (SysprofDisplay *self)
{
SysprofDisplayPrivate *priv = sysprof_display_get_instance_private (self);
g_return_if_fail (SYSPROF_IS_DISPLAY (self));
if (priv->profiler != NULL)
sysprof_profiler_stop (priv->profiler);
}

View File

@ -41,19 +41,21 @@ struct _SysprofDisplayClass
} __attribute__((aligned(8))); } __attribute__((aligned(8)));
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
GtkWidget *sysprof_display_new (void); GtkWidget *sysprof_display_new (void);
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
gchar *sysprof_display_dup_title (SysprofDisplay *self); gchar *sysprof_display_dup_title (SysprofDisplay *self);
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
SysprofProfiler *sysprof_display_get_profiler (SysprofDisplay *self); SysprofProfiler *sysprof_display_get_profiler (SysprofDisplay *self);
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
gboolean sysprof_display_is_empty (SysprofDisplay *self); gboolean sysprof_display_is_empty (SysprofDisplay *self);
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
void sysprof_display_open (SysprofDisplay *self, void sysprof_display_open (SysprofDisplay *self,
GFile *file); GFile *file);
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
void sysprof_display_save (SysprofDisplay *self); void sysprof_display_save (SysprofDisplay *self);
SYSPROF_AVAILABLE_IN_ALL SYSPROF_AVAILABLE_IN_ALL
gboolean sysprof_display_get_can_save (SysprofDisplay *self); gboolean sysprof_display_get_can_save (SysprofDisplay *self);
SYSPROF_AVAILABLE_IN_ALL
void sysprof_display_stop_recording (SysprofDisplay *self);
G_END_DECLS G_END_DECLS

View File

@ -133,6 +133,21 @@ save_capture_cb (GSimpleAction *action,
sysprof_notebook_save (self->notebook); sysprof_notebook_save (self->notebook);
} }
static void
stop_recording_cb (GSimpleAction *action,
GVariant *param,
gpointer user_data)
{
SysprofWindow *self = user_data;
SysprofDisplay *current;
g_assert (G_IS_SIMPLE_ACTION (action));
g_assert (SYSPROF_IS_WINDOW (self));
if ((current = sysprof_notebook_get_current (self->notebook)))
sysprof_display_stop_recording (current);
}
static void static void
sysprof_window_finalize (GObject *object) sysprof_window_finalize (GObject *object)
{ {
@ -164,11 +179,13 @@ sysprof_window_class_init (SysprofWindowClass *klass)
static void static void
sysprof_window_init (SysprofWindow *self) sysprof_window_init (SysprofWindow *self)
{ {
DzlShortcutController *controller;
static GActionEntry actions[] = { static GActionEntry actions[] = {
{ "close-tab", close_tab_cb }, { "close-tab", close_tab_cb },
{ "new-tab", new_tab_cb }, { "new-tab", new_tab_cb },
{ "switch-tab", switch_tab_cb, "i" }, { "switch-tab", switch_tab_cb, "i" },
{ "save-capture", save_capture_cb }, { "save-capture", save_capture_cb },
{ "stop-recording", stop_recording_cb },
}; };
gtk_widget_init_template (GTK_WIDGET (self)); gtk_widget_init_template (GTK_WIDGET (self));
@ -189,6 +206,13 @@ sysprof_window_init (SysprofWindow *self)
g_object_bind_property (self->notebook, "current", self->bindings, "source", g_object_bind_property (self->notebook, "current", self->bindings, "source",
G_BINDING_SYNC_CREATE); G_BINDING_SYNC_CREATE);
controller = dzl_shortcut_controller_find (GTK_WIDGET (self));
dzl_shortcut_controller_add_command_action (controller,
"org.gnome.sysprof3.stop-recording",
"Escape",
DZL_SHORTCUT_PHASE_BUBBLE,
"win.stop-recording");
dzl_gtk_widget_action_set (GTK_WIDGET (self), "win", "save-capture", dzl_gtk_widget_action_set (GTK_WIDGET (self), "win", "save-capture",
"enabled", FALSE, "enabled", FALSE,
NULL); NULL);