mirror of
https://github.com/varun-r-mallya/sysprof.git
synced 2026-02-12 08:00:53 +00:00
libsysprof-ui: fix can-save propagation
This commit is contained in:
@ -75,6 +75,24 @@ sysprof_display_new (void)
|
|||||||
return g_object_new (SYSPROF_TYPE_DISPLAY, NULL);
|
return g_object_new (SYSPROF_TYPE_DISPLAY, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sysprof_display_load_cb (SysprofCaptureView *view,
|
||||||
|
GAsyncResult *result,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_autoptr(SysprofDisplay) self = user_data;
|
||||||
|
g_autoptr(GError) error = NULL;
|
||||||
|
|
||||||
|
g_assert (SYSPROF_IS_CAPTURE_VIEW (view));
|
||||||
|
g_assert (G_IS_ASYNC_RESULT (result));
|
||||||
|
g_assert (SYSPROF_IS_DISPLAY (self));
|
||||||
|
|
||||||
|
if (!sysprof_capture_view_load_finish (view, result, &error))
|
||||||
|
g_warning ("Failed to load capture: %s", error->message);
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_CAN_SAVE]);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_display_profiler_failed_cb (SysprofDisplay *self,
|
sysprof_display_profiler_failed_cb (SysprofDisplay *self,
|
||||||
const GError *error,
|
const GError *error,
|
||||||
@ -120,7 +138,11 @@ sysprof_display_profiler_stopped_cb (SysprofDisplay *self,
|
|||||||
goto notify;
|
goto notify;
|
||||||
}
|
}
|
||||||
|
|
||||||
sysprof_capture_view_load_async (priv->capture_view, reader, NULL, NULL, NULL);
|
sysprof_capture_view_load_async (priv->capture_view,
|
||||||
|
reader,
|
||||||
|
NULL,
|
||||||
|
(GAsyncReadyCallback) sysprof_display_load_cb,
|
||||||
|
g_object_ref (self));
|
||||||
gtk_stack_set_visible_child (priv->stack, GTK_WIDGET (priv->capture_view));
|
gtk_stack_set_visible_child (priv->stack, GTK_WIDGET (priv->capture_view));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,19 +315,6 @@ sysprof_display_get_property (GObject *object,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
sysprof_display_set_property (GObject *object,
|
|
||||||
guint prop_id,
|
|
||||||
const GValue *value,
|
|
||||||
GParamSpec *pspec)
|
|
||||||
{
|
|
||||||
switch (prop_id)
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_display_class_init (SysprofDisplayClass *klass)
|
sysprof_display_class_init (SysprofDisplayClass *klass)
|
||||||
{
|
{
|
||||||
@ -314,7 +323,6 @@ sysprof_display_class_init (SysprofDisplayClass *klass)
|
|||||||
|
|
||||||
object_class->finalize = sysprof_display_finalize;
|
object_class->finalize = sysprof_display_finalize;
|
||||||
object_class->get_property = sysprof_display_get_property;
|
object_class->get_property = sysprof_display_get_property;
|
||||||
object_class->set_property = sysprof_display_set_property;
|
|
||||||
|
|
||||||
widget_class->parent_set = sysprof_display_parent_set;
|
widget_class->parent_set = sysprof_display_parent_set;
|
||||||
|
|
||||||
@ -436,7 +444,11 @@ sysprof_display_open_cb (GObject *object,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
sysprof_capture_view_load_async (priv->capture_view, reader, NULL, NULL, NULL);
|
sysprof_capture_view_load_async (priv->capture_view,
|
||||||
|
reader,
|
||||||
|
NULL,
|
||||||
|
(GAsyncReadyCallback) sysprof_display_load_cb,
|
||||||
|
g_object_ref (self));
|
||||||
gtk_stack_set_visible_child (priv->stack, GTK_WIDGET (priv->capture_view));
|
gtk_stack_set_visible_child (priv->stack, GTK_WIDGET (priv->capture_view));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,6 +28,14 @@
|
|||||||
|
|
||||||
G_DEFINE_TYPE (SysprofNotebook, sysprof_notebook, GTK_TYPE_NOTEBOOK)
|
G_DEFINE_TYPE (SysprofNotebook, sysprof_notebook, GTK_TYPE_NOTEBOOK)
|
||||||
|
|
||||||
|
enum {
|
||||||
|
PROP_0,
|
||||||
|
PROP_CAN_SAVE,
|
||||||
|
N_PROPS
|
||||||
|
};
|
||||||
|
|
||||||
|
static GParamSpec *properties [N_PROPS];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sysprof_notebook_new:
|
* sysprof_notebook_new:
|
||||||
*
|
*
|
||||||
@ -43,6 +51,17 @@ sysprof_notebook_new (void)
|
|||||||
return g_object_new (SYSPROF_TYPE_NOTEBOOK, NULL);
|
return g_object_new (SYSPROF_TYPE_NOTEBOOK, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sysprof_notebook_notify_can_save_cb (SysprofNotebook *self,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
SysprofDisplay *display)
|
||||||
|
{
|
||||||
|
g_assert (SYSPROF_IS_NOTEBOOK (self));
|
||||||
|
g_assert (SYSPROF_IS_DISPLAY (display));
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (self), properties [PROP_CAN_SAVE]);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_notebook_page_added (GtkNotebook *notebook,
|
sysprof_notebook_page_added (GtkNotebook *notebook,
|
||||||
GtkWidget *child,
|
GtkWidget *child,
|
||||||
@ -57,6 +76,14 @@ sysprof_notebook_page_added (GtkNotebook *notebook,
|
|||||||
|
|
||||||
gtk_notebook_set_tab_label (notebook, child, tab);
|
gtk_notebook_set_tab_label (notebook, child, tab);
|
||||||
gtk_notebook_set_tab_reorderable (notebook, child, TRUE);
|
gtk_notebook_set_tab_reorderable (notebook, child, TRUE);
|
||||||
|
|
||||||
|
g_signal_connect_object (child,
|
||||||
|
"notify::can-save",
|
||||||
|
G_CALLBACK (sysprof_notebook_notify_can_save_cb),
|
||||||
|
notebook,
|
||||||
|
G_CONNECT_SWAPPED);
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (notebook), properties [PROP_CAN_SAVE]);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_notebook_set_show_tabs (notebook,
|
gtk_notebook_set_show_tabs (notebook,
|
||||||
@ -79,19 +106,68 @@ sysprof_notebook_page_removed (GtkNotebook *notebook,
|
|||||||
child = sysprof_display_new ();
|
child = sysprof_display_new ();
|
||||||
gtk_container_add (GTK_CONTAINER (notebook), child);
|
gtk_container_add (GTK_CONTAINER (notebook), child);
|
||||||
gtk_widget_show (child);
|
gtk_widget_show (child);
|
||||||
|
|
||||||
|
g_signal_handlers_disconnect_by_func (child,
|
||||||
|
G_CALLBACK (sysprof_notebook_notify_can_save_cb),
|
||||||
|
notebook);
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (notebook), properties [PROP_CAN_SAVE]);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtk_notebook_set_show_tabs (notebook,
|
gtk_notebook_set_show_tabs (notebook,
|
||||||
gtk_notebook_get_n_pages (notebook) > 1);
|
gtk_notebook_get_n_pages (notebook) > 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sysprof_notebook_switch_page (GtkNotebook *notebook,
|
||||||
|
GtkWidget *widget,
|
||||||
|
guint page)
|
||||||
|
{
|
||||||
|
g_assert (GTK_IS_NOTEBOOK (notebook));
|
||||||
|
g_assert (GTK_IS_WIDGET (widget));
|
||||||
|
|
||||||
|
GTK_NOTEBOOK_CLASS (sysprof_notebook_parent_class)->switch_page (notebook, widget, page);
|
||||||
|
|
||||||
|
g_object_notify_by_pspec (G_OBJECT (notebook), properties [PROP_CAN_SAVE]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sysprof_notebook_get_property (GObject *object,
|
||||||
|
guint prop_id,
|
||||||
|
GValue *value,
|
||||||
|
GParamSpec *pspec)
|
||||||
|
{
|
||||||
|
SysprofNotebook *self = (SysprofNotebook *)object;
|
||||||
|
|
||||||
|
switch (prop_id)
|
||||||
|
{
|
||||||
|
case PROP_CAN_SAVE:
|
||||||
|
g_value_set_boolean (value, sysprof_notebook_get_can_save (self));
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_notebook_class_init (SysprofNotebookClass *klass)
|
sysprof_notebook_class_init (SysprofNotebookClass *klass)
|
||||||
{
|
{
|
||||||
|
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||||
GtkNotebookClass *notebook_class = GTK_NOTEBOOK_CLASS (klass);
|
GtkNotebookClass *notebook_class = GTK_NOTEBOOK_CLASS (klass);
|
||||||
|
|
||||||
|
object_class->get_property = sysprof_notebook_get_property;
|
||||||
|
|
||||||
notebook_class->page_added = sysprof_notebook_page_added;
|
notebook_class->page_added = sysprof_notebook_page_added;
|
||||||
notebook_class->page_removed = sysprof_notebook_page_removed;
|
notebook_class->page_removed = sysprof_notebook_page_removed;
|
||||||
|
notebook_class->switch_page = sysprof_notebook_switch_page;
|
||||||
|
|
||||||
|
properties [PROP_CAN_SAVE] =
|
||||||
|
g_param_spec_boolean ("can-save",
|
||||||
|
"Can Save",
|
||||||
|
"If the current display can save a recording",
|
||||||
|
FALSE,
|
||||||
|
(G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -184,3 +260,16 @@ sysprof_notebook_save (SysprofNotebook *self)
|
|||||||
if ((display = sysprof_notebook_get_current (self)))
|
if ((display = sysprof_notebook_get_current (self)))
|
||||||
sysprof_display_save (display);
|
sysprof_display_save (display);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
sysprof_notebook_get_can_save (SysprofNotebook *self)
|
||||||
|
{
|
||||||
|
SysprofDisplay *display;
|
||||||
|
|
||||||
|
g_return_val_if_fail (SYSPROF_IS_NOTEBOOK (self), FALSE);
|
||||||
|
|
||||||
|
if ((display = sysprof_notebook_get_current (self)))
|
||||||
|
return sysprof_display_get_can_save (display);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|||||||
@ -51,5 +51,7 @@ void sysprof_notebook_open (SysprofNotebook *self,
|
|||||||
GFile *file);
|
GFile *file);
|
||||||
SYSPROF_AVAILABLE_IN_ALL
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
void sysprof_notebook_save (SysprofNotebook *self);
|
void sysprof_notebook_save (SysprofNotebook *self);
|
||||||
|
SYSPROF_AVAILABLE_IN_ALL
|
||||||
|
gboolean sysprof_notebook_get_can_save (SysprofNotebook *self);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|||||||
@ -32,8 +32,6 @@ struct _SysprofWindow
|
|||||||
{
|
{
|
||||||
GtkApplicationWindow parent_instance;
|
GtkApplicationWindow parent_instance;
|
||||||
|
|
||||||
DzlBindingGroup *display_bindings;
|
|
||||||
|
|
||||||
SysprofNotebook *notebook;
|
SysprofNotebook *notebook;
|
||||||
GtkMenuButton *menu_button;
|
GtkMenuButton *menu_button;
|
||||||
};
|
};
|
||||||
@ -55,6 +53,19 @@ sysprof_window_new (SysprofApplication *application)
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
sysprof_window_notify_can_save_cb (SysprofWindow *self,
|
||||||
|
GParamSpec *pspec,
|
||||||
|
SysprofNotebook *notebook)
|
||||||
|
{
|
||||||
|
g_assert (SYSPROF_IS_WINDOW (self));
|
||||||
|
g_assert (SYSPROF_IS_NOTEBOOK (notebook));
|
||||||
|
|
||||||
|
dzl_gtk_widget_action_set (GTK_WIDGET (self), "win", "save-capture",
|
||||||
|
"enabled", sysprof_notebook_get_can_save (notebook),
|
||||||
|
NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
new_tab_cb (GSimpleAction *action,
|
new_tab_cb (GSimpleAction *action,
|
||||||
GVariant *param,
|
GVariant *param,
|
||||||
@ -121,29 +132,9 @@ save_capture_cb (GSimpleAction *action,
|
|||||||
sysprof_notebook_save (self->notebook);
|
sysprof_notebook_save (self->notebook);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
sysprof_window_switch_page_cb (SysprofWindow *self,
|
|
||||||
GtkWidget *widget,
|
|
||||||
guint page_num,
|
|
||||||
SysprofNotebook *notebook)
|
|
||||||
{
|
|
||||||
SysprofDisplay *current;
|
|
||||||
|
|
||||||
g_assert (SYSPROF_IS_WINDOW (self));
|
|
||||||
g_assert (SYSPROF_IS_NOTEBOOK (notebook));
|
|
||||||
|
|
||||||
current = sysprof_notebook_get_current (notebook);
|
|
||||||
dzl_binding_group_set_source (self->display_bindings, current);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sysprof_window_finalize (GObject *object)
|
sysprof_window_finalize (GObject *object)
|
||||||
{
|
{
|
||||||
SysprofWindow *self = SYSPROF_WINDOW (object);
|
|
||||||
|
|
||||||
dzl_binding_group_set_source (self->display_bindings, NULL);
|
|
||||||
g_clear_object (&self->display_bindings);
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (sysprof_window_parent_class)->finalize (object);
|
G_OBJECT_CLASS (sysprof_window_parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,7 +158,6 @@ sysprof_window_class_init (SysprofWindowClass *klass)
|
|||||||
static void
|
static void
|
||||||
sysprof_window_init (SysprofWindow *self)
|
sysprof_window_init (SysprofWindow *self)
|
||||||
{
|
{
|
||||||
GAction *action;
|
|
||||||
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 },
|
||||||
@ -181,16 +171,12 @@ sysprof_window_init (SysprofWindow *self)
|
|||||||
actions,
|
actions,
|
||||||
G_N_ELEMENTS (actions),
|
G_N_ELEMENTS (actions),
|
||||||
self);
|
self);
|
||||||
action = g_action_map_lookup_action (G_ACTION_MAP (self), "save-capture");
|
|
||||||
|
|
||||||
self->display_bindings = dzl_binding_group_new ();
|
|
||||||
dzl_binding_group_bind (self->display_bindings, "can-save", action, "enabled", G_BINDING_SYNC_CREATE);
|
|
||||||
|
|
||||||
g_signal_connect_object (self->notebook,
|
g_signal_connect_object (self->notebook,
|
||||||
"switch-page",
|
"notify::can-save",
|
||||||
G_CALLBACK (sysprof_window_switch_page_cb),
|
G_CALLBACK (sysprof_window_notify_can_save_cb),
|
||||||
self,
|
self,
|
||||||
G_CONNECT_SWAPPED | G_CONNECT_AFTER);
|
G_CONNECT_SWAPPED);
|
||||||
|
|
||||||
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,
|
||||||
|
|||||||
Reference in New Issue
Block a user