{
PROP_0,
PROP_OWNER,
- PROP_NAME,
- PROP_SIZEGROUP
+ PROP_NAME
};
G_DEFINE_TYPE (GtkInspectorActionEditor, gtk_inspector_action_editor, GTK_TYPE_WIDGET)
g_action_group_activate_action (G_ACTION_GROUP (r->owner), r->name, parameter);
else if (GTK_IS_ACTION_MUXER (r->owner))
gtk_action_muxer_activate_action (GTK_ACTION_MUXER (r->owner), r->name, parameter);
+
update_widgets (r);
}
GVariant *value;
value = gtk_inspector_variant_editor_get_value (editor);
- if (value)
- {
- if (G_IS_ACTION_GROUP (r->owner))
- g_action_group_change_action_state (G_ACTION_GROUP (r->owner), r->name, value);
- else if (GTK_IS_ACTION_MUXER (r->owner))
- gtk_action_muxer_change_action_state (GTK_ACTION_MUXER (r->owner), r->name, value);
- }
+ if (!value)
+ return;
+
+ g_variant_ref_sink (value);
+
+ if (G_IS_ACTION_GROUP (r->owner))
+ g_action_group_change_action_state (G_ACTION_GROUP (r->owner), r->name, value);
+ else if (GTK_IS_ACTION_MUXER (r->owner))
+ gtk_action_muxer_change_action_state (GTK_ACTION_MUXER (r->owner), r->name, value);
+
+ g_variant_unref (value);
}
static void
gtk_widget_set_visible (r->state_editor, FALSE);
}
-static void
-update_enabled (GtkInspectorActionEditor *r,
- gboolean enabled)
-{
- r->enabled = enabled;
- if (r->parameter_entry)
- {
- gtk_widget_set_sensitive (r->parameter_entry, enabled);
- parameter_changed (r->parameter_entry, r);
- }
- if (r->activate_button)
- gtk_widget_set_sensitive (r->activate_button, enabled);
-}
-
-static void
-action_enabled_changed_cb (GActionGroup *group,
- const char *action_name,
- gboolean enabled,
- GtkInspectorActionEditor *r)
-{
- if (g_str_equal (action_name, r->name))
- update_enabled (r, enabled);
-}
-
-static void
-update_state (GtkInspectorActionEditor *r,
- GVariant *state)
-{
- if (r->state_entry)
- gtk_inspector_variant_editor_set_value (r->state_entry, state);
-}
-
-static void
-action_state_changed_cb (GActionGroup *group,
- const char *action_name,
- GVariant *state,
- GtkInspectorActionEditor *r)
-{
- if (g_str_equal (action_name, r->name))
- update_state (r, state);
-}
-
static void
update_widgets (GtkInspectorActionEditor *r)
{
g_variant_unref (state);
}
-
- if (G_IS_ACTION_GROUP (r->owner))
- {
- g_signal_connect (r->owner, "action-enabled-changed",
- G_CALLBACK (action_enabled_changed_cb), r);
- g_signal_connect (r->owner, "action-state-changed",
- G_CALLBACK (action_state_changed_cb), r);
- }
}
static void
GtkInspectorActionEditor *r = GTK_INSPECTOR_ACTION_EDITOR (object);
GtkWidget *child;
- g_free (r->name);
- if (r->state_type)
- g_variant_type_free (r->state_type);
- if (r->owner)
- {
- g_signal_handlers_disconnect_by_func (r->owner, action_enabled_changed_cb, r);
- g_signal_handlers_disconnect_by_func (r->owner, action_state_changed_cb, r);
- }
-
while ((child = gtk_widget_get_first_child (GTK_WIDGET (r))))
gtk_widget_unparent (child);
+ g_clear_pointer (&r->name, g_free);
+ g_clear_pointer (&r->state_type, g_variant_type_free);
+
G_OBJECT_CLASS (gtk_inspector_action_editor_parent_class)->dispose (object);
}
switch (param_id)
{
case PROP_OWNER:
- if (r->owner)
- {
- g_signal_handlers_disconnect_by_func (r->owner, action_enabled_changed_cb, r);
- g_signal_handlers_disconnect_by_func (r->owner, action_state_changed_cb, r);
- }
r->owner = g_value_get_object (value);
+ g_assert (r->owner == NULL ||
+ G_IS_ACTION_GROUP (r->owner) ||
+ GTK_IS_ACTION_MUXER (r->owner));
break;
case PROP_NAME:
}
void
-gtk_inspector_action_editor_update (GtkInspectorActionEditor *r,
- gboolean enabled,
- GVariant *state)
+gtk_inspector_action_editor_update (GtkInspectorActionEditor *self)
{
- update_enabled (r, enabled);
- update_state (r, state);
+ update_widgets (self);
}