clutter-actor: Keep is_dirty unchanged for culled actors
In a multi-monitor setup there is a separate paint run for each monitor.
If an actor doesn't intersect the first monitor painted then it is culled
out for that monitor to save time. Unfortunately this would mean
clutter_actor_paint
was setting is_dirty = FALSE
before the actor had
yet been painted on any monitor.
This meant that effects like ClutterOffscreenEffect
were not receiving
the flag CLUTTER_EFFECT_PAINT_ACTOR_DIRTY
when they should have, and
so would rightfully think they don't need to do a full internal
invalidation. So ClutterOffscreenEffect
, and probably other effects,
did not repaint correctly unless on the first monitor in the list.
The fix is to simply avoid setting is_dirty = FALSE
on those paint
runs where the actor has been culled out (clutter_actor_continue_paint
wasn't called). It is only safe to clear the flag after
clutter_actor_continue_paint
has been called at least once per stage
paint.
Closes: gnome-shell#1049 (closed)