-
clutter_stage_schedule_update() sets the field `update_scheduled` to `TRUE` as an optimization to make redundant updates a no-op. This failed if there was a pending event and if the stage was not yet mapped. What happened is: * clutter_stage_schedule_update() is called - ClutterStage::update_scheduled is set to TRUE - frame clock scheduled * frame clock dispatches - frame is discarded early, no actual stage update happens * device is created (e.g. virtual device from remote desktop session) - `device-added` event reaches ClutterStage::event_queue * stage is shown - clutter_stage_schedule_update() is called - ClutterStage::update_scheduled is TRUE - ClutterStage::event_queue has events in it - These two conditions means clutter_schedule_update() becomes a no-op At this point, no more updates will happen from clutter_stage_schedule_update(). Fix this by resetting `ClutterStage::update_scheduled` to `FALSE` even if the frame was discarded due to the stage not yet being mapped. A test case is added that replicates the above descibed events. Closes: #3804 Part-of: <!4152>
24083e1e
Loading