window-actor: Allow syncing actor geometry while effect is running

The size-change animation in gnome-shell needs to sync the window actors
geometry during the animation, it currently does this by notifying the
compositor that the animation was finished before it actually is.

This causes a few bugs in Mutter though, since it will now emit the
"effects-completed" signal on the window actor even though they aren't
completed.

To fix that, we need to decouple freezing and thawing of actor updates
from window effects and allow gnome-shell to thaw actor updates before
it notifies Mutter that the effect is completed.

The first step for this is allowing to sync the actor geometry while an
effect is active, this should be redundant since effects which actually
need to inhibit those updates will freeze the actor anyway. Also a
geometry change happening while another effect is active will kill the
old effect anyway because MetaPluginManager kills all the active window
effects before starting a new one; so the new size-change effect for any
geometry change is going to kill the current effect.

https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1250
This commit is contained in:
Jonas Dreßler 2020-05-12 11:40:49 +02:00 committed by Robert Mader
parent 6414b8c45f
commit d12dc993d1

View File

@ -792,9 +792,6 @@ meta_window_actor_sync_actor_geometry (MetaWindowActor *self,
if (meta_window_actor_is_frozen (self) && !did_placement) if (meta_window_actor_is_frozen (self) && !did_placement)
return META_WINDOW_ACTOR_CHANGE_POSITION | META_WINDOW_ACTOR_CHANGE_SIZE; return META_WINDOW_ACTOR_CHANGE_POSITION | META_WINDOW_ACTOR_CHANGE_SIZE;
if (meta_window_actor_effect_in_progress (self))
return META_WINDOW_ACTOR_CHANGE_POSITION | META_WINDOW_ACTOR_CHANGE_SIZE;
if (clutter_actor_has_allocation (actor)) if (clutter_actor_has_allocation (actor))
{ {
ClutterActorBox box; ClutterActorBox box;