windowManager: Complete interrupted size change effects
Resizing effects are more finicky as other effects, as the actual animation is delayed until we receive the ::size-changed signal. However that signal may never be emitted if the window is destroyed just after starting the size-change effect, in which case the effect is never completed, blocking mutter from destroying the corresponding window actor. Address this by tracking when a resize effect is pending, and complete the effect when appropriate. https://gitlab.gnome.org/GNOME/mutter/issues/655 https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/815
This commit is contained in:
parent
22b6a09cd7
commit
a43c22e3af
@ -704,6 +704,7 @@ var WindowManager = class {
|
|||||||
this._unminimizing = new Set();
|
this._unminimizing = new Set();
|
||||||
this._mapping = new Set();
|
this._mapping = new Set();
|
||||||
this._resizing = new Set();
|
this._resizing = new Set();
|
||||||
|
this._resizePending = new Set();
|
||||||
this._destroying = new Set();
|
this._destroying = new Set();
|
||||||
this._movingWindow = null;
|
this._movingWindow = null;
|
||||||
|
|
||||||
@ -1492,6 +1493,7 @@ var WindowManager = class {
|
|||||||
this._clearAnimationInfo(actor);
|
this._clearAnimationInfo(actor);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this._resizePending.add(actor);
|
||||||
actor.__animationInfo = { clone: actorClone,
|
actor.__animationInfo = { clone: actorClone,
|
||||||
oldRect: oldFrameRect,
|
oldRect: oldFrameRect,
|
||||||
destroyId: destroyId };
|
destroyId: destroyId };
|
||||||
@ -1510,6 +1512,7 @@ var WindowManager = class {
|
|||||||
let scaleX = targetRect.width / sourceRect.width;
|
let scaleX = targetRect.width / sourceRect.width;
|
||||||
let scaleY = targetRect.height / sourceRect.height;
|
let scaleY = targetRect.height / sourceRect.height;
|
||||||
|
|
||||||
|
this._resizePending.delete(actor);
|
||||||
this._resizing.add(actor);
|
this._resizing.add(actor);
|
||||||
|
|
||||||
// Now scale and fade out the clone
|
// Now scale and fade out the clone
|
||||||
@ -1571,6 +1574,9 @@ var WindowManager = class {
|
|||||||
actor.translation_y = 0;
|
actor.translation_y = 0;
|
||||||
this._clearAnimationInfo(actor);
|
this._clearAnimationInfo(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this._resizePending.delete(actor))
|
||||||
|
this._shellwm.completed_size_change(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
_sizeChangeWindowOverwritten(shellwm, actor) {
|
_sizeChangeWindowOverwritten(shellwm, actor) {
|
||||||
|
Loading…
Reference in New Issue
Block a user