2008-08-06 Emmanuele Bassi <ebassi@openedhand.com>
authorEmmanuele Bassi <ebassi@openedhand.com>
Wed, 6 Aug 2008 10:20:57 +0000 (10:20 +0000)
committerEmmanuele Bassi <ebassi@openedhand.com>
Wed, 6 Aug 2008 10:20:57 +0000 (10:20 +0000)
* clutter/clutter-child-meta.c:
(clutter_child_meta_set_property),
(clutter_child_meta_class_init): Make the :container and
:actor properties of ChildMeta construct-only, to allow
bindings to actually use ChildMeta without abusing the API.

* clutter/clutter-container.c (create_child_meta): Instead of
setting the members of the ChildMeta structure, use the
constructor properties.

ChangeLog
clutter/clutter-child-meta.c
clutter/clutter-container.c

index 324aac5..d4ce20d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2008-08-06  Emmanuele Bassi  <ebassi@openedhand.com>
+
+       * clutter/clutter-child-meta.c:
+       (clutter_child_meta_set_property),
+       (clutter_child_meta_class_init): Make the :container and
+       :actor properties of ChildMeta construct-only, to allow
+       bindings to actually use ChildMeta without abusing the API.
+
+       * clutter/clutter-container.c (create_child_meta): Instead of
+       setting the members of the ChildMeta structure, use the
+       constructor properties.
+
 2008-08-04  Emmanuele Bassi  <ebassi@openedhand.com>
 
        * clutter/clutter-keysyms.h: Resync with keysymdef.h inside Xorg.
index ea97288..488b2f3 100644 (file)
@@ -47,7 +47,7 @@
 #include "clutter-debug.h"
 #include "clutter-private.h"
 
-G_DEFINE_TYPE (ClutterChildMeta, clutter_child_meta, G_TYPE_OBJECT);
+G_DEFINE_ABSTRACT_TYPE (ClutterChildMeta, clutter_child_meta, G_TYPE_OBJECT);
 
 enum
 {
@@ -57,6 +57,30 @@ enum
   PROP_ACTOR
 };
 
+static void
+clutter_child_meta_set_property (GObject      *object,
+                                 guint         prop_id,
+                                 const GValue *value,
+                                 GParamSpec   *pspec)
+{
+  ClutterChildMeta *child_meta = CLUTTER_CHILD_META (object);
+
+  switch (prop_id) 
+    {
+    case PROP_CONTAINER:
+      child_meta->container = g_value_get_object (value);
+      break;
+
+    case PROP_ACTOR:
+      child_meta->actor = g_value_get_object (value);
+      break;
+
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
 static void 
 clutter_child_meta_get_property (GObject    *object,
                                  guint       prop_id,
@@ -87,6 +111,7 @@ clutter_child_meta_class_init (ClutterChildMetaClass *klass)
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
   GParamSpec *pspec;
 
+  gobject_class->set_property = clutter_child_meta_set_property;
   gobject_class->get_property = clutter_child_meta_get_property;
 
   /**
@@ -100,7 +125,8 @@ clutter_child_meta_class_init (ClutterChildMetaClass *klass)
                                "Container",
                                "The container that created this data",
                                CLUTTER_TYPE_CONTAINER,
-                               CLUTTER_PARAM_READABLE);
+                               G_PARAM_CONSTRUCT_ONLY |
+                               CLUTTER_PARAM_READWRITE);
   g_object_class_install_property (gobject_class, PROP_CONTAINER, pspec);
 
   /**
@@ -114,7 +140,8 @@ clutter_child_meta_class_init (ClutterChildMetaClass *klass)
                                "Actor",
                                "The actor wrapped by this data",
                                CLUTTER_TYPE_ACTOR,
-                               CLUTTER_PARAM_READABLE);
+                               G_PARAM_CONSTRUCT_ONLY |
+                               CLUTTER_PARAM_READWRITE);
   g_object_class_install_property (gobject_class, PROP_ACTOR, pspec);
 }
 
index 80918a3..cade769 100644 (file)
@@ -641,9 +641,10 @@ create_child_meta (ClutterContainer *container,
       return;
     }
 
-  child_meta            = g_object_new (iface->child_meta_type, NULL);
-  child_meta->container = container;
-  child_meta->actor     = actor;
+  child_meta = g_object_new (iface->child_meta_type,
+                             "container", container,
+                             "actor", actor,
+                             NULL);
 
   data_list = g_object_get_qdata (G_OBJECT (container), quark_child_meta);
   data_list = g_slist_prepend (data_list, child_meta);