environment: Only disable unredirection of ongoing transitions
When a transition is set up with a delay, it may be removed before it
actually started. We won't get a ::stopped signal in that case, with
the result that we currently end up with a mismatched unredirection
disabling.
Address this by only disable unredirection once the transition has
actually started.
https://gitlab.gnome.org/GNOME/gnome-shell/issues/1788
(cherry picked from commit 38ad1d7c13
)
This commit is contained in:
parent
279024afc2
commit
6c2a82258e
@ -109,8 +109,6 @@ function _easeActor(actor, params) {
|
|||||||
actor.set_easing_mode(params.mode);
|
actor.set_easing_mode(params.mode);
|
||||||
delete params.mode;
|
delete params.mode;
|
||||||
|
|
||||||
Meta.disable_unredirect_for_display(global.display);
|
|
||||||
|
|
||||||
let cleanup = () => Meta.enable_unredirect_for_display(global.display);
|
let cleanup = () => Meta.enable_unredirect_for_display(global.display);
|
||||||
let callback = _makeEaseCallback(params, cleanup);
|
let callback = _makeEaseCallback(params, cleanup);
|
||||||
|
|
||||||
@ -124,6 +122,11 @@ function _easeActor(actor, params) {
|
|||||||
let transition = animatedProps.map(p => actor.get_transition(p))
|
let transition = animatedProps.map(p => actor.get_transition(p))
|
||||||
.find(t => t !== null);
|
.find(t => t !== null);
|
||||||
|
|
||||||
|
if (transition && transition.delay)
|
||||||
|
transition.connect('started', () => Meta.disable_unredirect_for_display(global.display));
|
||||||
|
else
|
||||||
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
|
|
||||||
if (transition)
|
if (transition)
|
||||||
transition.connect('stopped', (t, finished) => callback(finished));
|
transition.connect('stopped', (t, finished) => callback(finished));
|
||||||
else
|
else
|
||||||
@ -145,8 +148,6 @@ function _easeActorProperty(actor, propName, target, params) {
|
|||||||
if (actor instanceof Clutter.Actor && !actor.mapped)
|
if (actor instanceof Clutter.Actor && !actor.mapped)
|
||||||
duration = 0;
|
duration = 0;
|
||||||
|
|
||||||
Meta.disable_unredirect_for_display(global.display);
|
|
||||||
|
|
||||||
let cleanup = () => Meta.enable_unredirect_for_display(global.display);
|
let cleanup = () => Meta.enable_unredirect_for_display(global.display);
|
||||||
let callback = _makeEaseCallback(params, cleanup);
|
let callback = _makeEaseCallback(params, cleanup);
|
||||||
|
|
||||||
@ -157,6 +158,7 @@ function _easeActorProperty(actor, propName, target, params) {
|
|||||||
let [obj, prop] = _getPropertyTarget(actor, propName);
|
let [obj, prop] = _getPropertyTarget(actor, propName);
|
||||||
obj[prop] = target;
|
obj[prop] = target;
|
||||||
|
|
||||||
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
callback(true);
|
callback(true);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@ -172,6 +174,11 @@ function _easeActorProperty(actor, propName, target, params) {
|
|||||||
|
|
||||||
transition.set_to(target);
|
transition.set_to(target);
|
||||||
|
|
||||||
|
if (transition.delay)
|
||||||
|
transition.connect('started', () => Meta.disable_unredirect_for_display(global.display));
|
||||||
|
else
|
||||||
|
Meta.disable_unredirect_for_display(global.display);
|
||||||
|
|
||||||
transition.connect('stopped', (t, finished) => callback(finished));
|
transition.connect('stopped', (t, finished) => callback(finished));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user