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)
This commit is contained in:
Emmanuele Bassi 2008-05-23 09:42:32 +00:00
parent f9e43c440b
commit 5cc8687e7e
3 changed files with 26 additions and 4 deletions

View File

@ -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):

View 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))
{

View File

@ -107,6 +107,14 @@ clutter_group_paint (ClutterActor *actor)
CLUTTER_NOTE (PAINT, "ClutterGroup paint leave");
}
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)
{
@ -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;
/**