diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index ca0ab44de..7aa46517c 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -142,6 +142,8 @@ struct _ClutterStagePrivate int update_freeze_count; + gboolean needs_update; + guint redraw_pending : 1; guint throttle_motion_events : 1; guint min_size_changed : 1; @@ -1308,7 +1310,9 @@ _clutter_stage_needs_update (ClutterStage *stage) priv = stage->priv; - return priv->redraw_pending || g_hash_table_size (priv->pending_relayouts) > 0; + return (priv->redraw_pending || + priv->needs_update || + g_hash_table_size (priv->pending_relayouts) > 0); } void @@ -1499,6 +1503,8 @@ _clutter_stage_do_update (ClutterStage *stage) priv->stage_was_relayout = FALSE; + priv->needs_update = FALSE; + /* if the stage is being destroyed, or if the destruction already * happened and we don't have an StageWindow any more, then we * should bail out @@ -3453,6 +3459,8 @@ _clutter_stage_schedule_update (ClutterStage *stage) if (stage_window == NULL) return; + stage->priv->needs_update = TRUE; + return _clutter_stage_window_schedule_update (stage_window, stage->priv->sync_delay); }