2008-05-23 Emmanuele Bassi <ebassi@openedhand.com>
authorEmmanuele Bassi <ebassi@openedhand.com>
Fri, 23 May 2008 09:42:32 +0000 (09:42 +0000)
committerEmmanuele Bassi <ebassi@openedhand.com>
Fri, 23 May 2008 09:42:32 +0000 (09:42 +0000)
Bug #928 - Reparenting a child that itself is a container
doesn't work

* clutter/clutter-actor.c (clutter_actor_set_parent): Realize
an actor when setting its parent, if the parent is realized.

* clutter/clutter-group.c:
(clutter_group_realize), (clutter_group_class_init): Add the
missing implementation of the ::realize() virtual function; this
makes sure that the children of a Group are realized if the Group
is realized. (#928)

ChangeLog
clutter/clutter-actor.c
clutter/clutter-group.c

index c3fd009..1a244a0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+2008-05-23  Emmanuele Bassi  <ebassi@openedhand.com>
+
+       Bug #928 - Reparenting a child that itself is a container
+       doesn't work
+
+       * clutter/clutter-actor.c (clutter_actor_set_parent): Realize
+       an actor when setting its parent, if the parent is realized.
+
+       * clutter/clutter-group.c:
+       (clutter_group_realize), (clutter_group_class_init): Add the
+       missing implementation of the ::realize() virtual function; this
+       makes sure that the children of a Group are realized if the Group
+       is realized. (#928)
+
 2008-05-21  Neil Roberts  <neil@o-hand.com>
 
        * clutter/cogl/gl/cogl.c (error_string):
index 9cec17f..f0b8930 100644 (file)
@@ -4205,13 +4205,12 @@ clutter_actor_set_parent (ClutterActor *self,
   self->priv->parent_actor = parent;
   g_signal_emit (self, actor_signals[PARENT_SET], 0, NULL);
 
-  if (self->priv->show_on_set_parent == TRUE)
-      clutter_actor_show (self);
-  
-  /* FIXME: below likely not needed */
   if (CLUTTER_ACTOR_IS_REALIZED (self->priv->parent_actor))
     clutter_actor_realize (self);
 
+  if (self->priv->show_on_set_parent)
+    clutter_actor_show (self);
+  
   if (CLUTTER_ACTOR_IS_VISIBLE (self->priv->parent_actor) &&
       CLUTTER_ACTOR_IS_VISIBLE (self))
     {
index a91743f..c215d2a 100644 (file)
@@ -108,6 +108,14 @@ clutter_group_paint (ClutterActor *actor)
 }
 
 static void
+clutter_group_realize (ClutterActor *actor)
+{
+  clutter_container_foreach (CLUTTER_CONTAINER (actor),
+                             CLUTTER_CALLBACK (clutter_actor_realize),
+                             NULL);
+}
+
+static void
 clutter_group_unrealize (ClutterActor *actor)
 {
   clutter_container_foreach (CLUTTER_CONTAINER (actor),
@@ -453,6 +461,7 @@ clutter_group_class_init (ClutterGroupClass *klass)
   actor_class->hide_all        = clutter_group_real_hide_all;
   actor_class->request_coords  = clutter_group_request_coords;
   actor_class->query_coords    = clutter_group_query_coords;
+  actor_class->realize         = clutter_group_realize;
   actor_class->unrealize       = clutter_group_unrealize;
 
   /**