diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index 3225a7cb7..8e602b826 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -140,6 +140,7 @@ struct _ClutterStagePrivate int update_freeze_count; gboolean needs_update; + gboolean pending_finish_queue_redraws; guint redraw_pending : 1; guint throttle_motion_events : 1; @@ -3257,6 +3258,8 @@ _clutter_stage_queue_actor_redraw (ClutterStage *stage, */ priv->cached_pick_mode = CLUTTER_PICK_NONE; + priv->pending_finish_queue_redraws = TRUE; + if (!priv->redraw_pending) { ClutterMasterClock *master_clock; @@ -3356,6 +3359,13 @@ _clutter_stage_queue_redraw_entry_invalidate (ClutterStageQueueRedrawEntry *entr static void clutter_stage_maybe_finish_queue_redraws (ClutterStage *stage) { + ClutterStagePrivate *priv = stage->priv; + + if (!priv->pending_finish_queue_redraws) + return; + + priv->pending_finish_queue_redraws = FALSE; + /* Note: we have to repeat until the pending_queue_redraws list is * empty because actors are allowed to queue redraws in response to * the queue-redraw signal. For example Clone actors or