diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 59345a725..2e4b30eff 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -2646,9 +2646,10 @@ _clutter_actor_queue_redraw_on_clones (ClutterActor *self) } static void -_clutter_actor_propagate_queue_redraw (ClutterActor *self, - ClutterActor *origin) +_clutter_actor_propagate_queue_redraw (ClutterActor *self) { + ClutterActor *origin = self; + while (self) { /* no point in queuing a redraw on a destroyed actor */ @@ -2657,13 +2658,12 @@ _clutter_actor_propagate_queue_redraw (ClutterActor *self, _clutter_actor_queue_redraw_on_clones (self); + self->priv->is_dirty = TRUE; + /* If the queue redraw is coming from a child then the actor has become dirty and any queued effect is no longer valid */ if (self != origin) - { - self->priv->is_dirty = TRUE; - self->priv->effect_to_redraw = NULL; - } + self->priv->effect_to_redraw = NULL; /* If the actor isn't visible, we still had to emit the signal * to allow for a ClutterClone, but the appearance of the parent @@ -8105,10 +8105,8 @@ _clutter_actor_queue_redraw_full (ClutterActor *self, priv->effect_to_redraw = NULL; } - priv->is_dirty = TRUE; - if (!priv->propagated_one_redraw) - _clutter_actor_propagate_queue_redraw (self, self); + _clutter_actor_propagate_queue_redraw (self); } /**