inspector: Simplify the action editor
authorMatthias Clasen <mclasen@redhat.com>
Fri, 7 Apr 2023 16:58:10 +0000 (12:58 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 21 Apr 2023 07:09:40 +0000 (09:09 +0200)
No need to listen for changes, the actions list
code will do so and tell us to update.

gtk/inspector/action-editor.c
gtk/inspector/action-editor.h

index 666ff0e18df5ace49ff7d5498d9774856c6fb5c7..ba838fbaf701fea44c1f68993da6a58a06b256f2 100644 (file)
@@ -53,8 +53,7 @@ enum
 {
   PROP_0,
   PROP_OWNER,
-  PROP_NAME,
-  PROP_SIZEGROUP
+  PROP_NAME
 };
 
 G_DEFINE_TYPE (GtkInspectorActionEditor, gtk_inspector_action_editor, GTK_TYPE_WIDGET)
@@ -73,6 +72,7 @@ activate_action (GtkWidget                *button,
     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);
 }
 
@@ -97,13 +97,17 @@ state_changed (GtkWidget *editor,
   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
@@ -140,48 +144,6 @@ gtk_inspector_action_editor_init (GtkInspectorActionEditor *r)
   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)
 {
@@ -232,14 +194,6 @@ 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
@@ -248,18 +202,12 @@ dispose (GObject *object)
   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);
 }
 
@@ -298,12 +246,10 @@ set_property (GObject      *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:
@@ -354,10 +300,7 @@ gtk_inspector_action_editor_set (GtkInspectorActionEditor *self,
 }
 
 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);
 }
index c918a9a55ca0ed5dbbde45e2e31d1ee548054adb..14bf3ce9f80fcd2a3f7bbe9800f92677d07f9f4a 100644 (file)
@@ -37,9 +37,7 @@ GtkWidget *gtk_inspector_action_editor_new      (void);
 void       gtk_inspector_action_editor_set      (GtkInspectorActionEditor *self,
                                                  GObject                  *owner,
                                                  const char               *name);
-void       gtk_inspector_action_editor_update   (GtkInspectorActionEditor *self,
-                                                 gboolean                  enabled,
-                                                 GVariant                 *state);
+void       gtk_inspector_action_editor_update   (GtkInspectorActionEditor *self);
 
 G_END_DECLS