[actor] Force a relayout on set_parent()
authorChris Lord <chris@linux.intel.com>
Thu, 5 Feb 2009 11:04:34 +0000 (11:04 +0000)
committerEmmanuele Bassi <ebassi@linux.intel.com>
Thu, 5 Feb 2009 19:54:48 +0000 (19:54 +0000)
The current code that handles the invariant that the new parent
of an actor needing a layout should also be queued for relayout
is hitting the short-circuiting we do in the queue_relayout()
method.

In order to fix this we can forcibly set the actor to need a
width/height request and an allocation; then we queue a relayout
on the parent.

Signed-off-by: Emmanuele Bassi <ebassi@linux.intel.com>
clutter/clutter-actor.c

index 75e927f..631a87c 100644 (file)
@@ -6098,7 +6098,15 @@ clutter_actor_set_parent (ClutterActor *self,
       priv->needs_height_request ||
       priv->needs_allocation)
     {
-      clutter_actor_queue_relayout (self);
+      /* we work around the short-circuiting we do
+       * in clutter_actor_queue_relayout() since we
+       * want to force a relayout
+       */
+      priv->needs_width_request = TRUE;
+      priv->needs_height_request = TRUE;
+      priv->needs_allocation = TRUE;
+
+      clutter_actor_queue_relayout (priv->parent_actor);
     }
 }