workspaceAnimation: Stop depending on shellwm

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1326>
This commit is contained in:
Alexander Mikhaylenko 2020-01-21 18:09:56 +05:00 committed by Marge Bot
parent bebd612a8f
commit 269c5ca957
2 changed files with 34 additions and 18 deletions

View File

@ -960,6 +960,11 @@ var WindowManager = class {
this._workspaceAnimation = this._workspaceAnimation =
new WorkspaceAnimation.WorkspaceAnimationController(); new WorkspaceAnimation.WorkspaceAnimationController();
this._shellwm.connect('kill-switch-workspace', () => {
this._workspaceAnimation.cancelSwitchAnimation();
this._switchWorkspaceDone();
});
} }
async _startX11Services(task, cancellable) { async _startX11Services(task, cancellable) {
@ -1618,7 +1623,20 @@ var WindowManager = class {
return; return;
} }
this._workspaceAnimation.animateSwitch(shellwm, from, to, direction); this._switchInProgress = true;
this._workspaceAnimation.animateSwitch(from, to, direction, () => {
this._shellwm.completed_switch_workspace();
this._switchInProgress = false;
});
}
_switchWorkspaceDone() {
if (!this._switchInProgress)
return;
this._shellwm.completed_switch_workspace();
this._switchInProgress = false;
} }
_showTilePreview(shellwm, window, tileRect, monitorIndex) { _showTilePreview(shellwm, window, tileRect, monitorIndex) {

View File

@ -10,18 +10,8 @@ const WINDOW_ANIMATION_TIME = 250;
var WorkspaceAnimationController = class { var WorkspaceAnimationController = class {
constructor() { constructor() {
this._shellwm = global.window_manager;
this._movingWindow = null; this._movingWindow = null;
this._switchData = null; this._switchData = null;
this._shellwm.connect('kill-switch-workspace', shellwm => {
if (this._switchData) {
if (this._switchData.inProgress)
this._switchWorkspaceDone(shellwm);
else if (!this._switchData.gestureActivated)
this._finishWorkspaceSwitch(this._switchData);
}
});
global.display.connect('restacked', this._syncStacking.bind(this)); global.display.connect('restacked', this._syncStacking.bind(this));
@ -225,7 +215,7 @@ var WorkspaceAnimationController = class {
this.movingWindow = null; this.movingWindow = null;
} }
animateSwitch(shellwm, from, to, direction) { animateSwitch(from, to, direction, onComplete) {
this._prepareWorkspaceSwitch(from, to, direction); this._prepareWorkspaceSwitch(from, to, direction);
this._switchData.inProgress = true; this._switchData.inProgress = true;
@ -247,15 +237,13 @@ var WorkspaceAnimationController = class {
y: yDest, y: yDest,
duration: WINDOW_ANIMATION_TIME, duration: WINDOW_ANIMATION_TIME,
mode: Clutter.AnimationMode.EASE_OUT_CUBIC, mode: Clutter.AnimationMode.EASE_OUT_CUBIC,
onComplete: () => this._switchWorkspaceDone(shellwm), onComplete: () => {
this._finishWorkspaceSwitch(this._switchData);
onComplete();
},
}); });
} }
_switchWorkspaceDone(shellwm) {
this._finishWorkspaceSwitch(this._switchData);
shellwm.completed_switch_workspace();
}
_directionForProgress(progress) { _directionForProgress(progress) {
if (global.workspace_manager.layout_rows === -1) { if (global.workspace_manager.layout_rows === -1) {
return progress > 0 return progress > 0
@ -412,6 +400,16 @@ var WorkspaceAnimationController = class {
return this._switchData !== null && this._switchData.gestureActivated; return this._switchData !== null && this._switchData.gestureActivated;
} }
cancelSwitchAnimation() {
if (!this._switchData)
return;
if (this._switchData.gestureActivated)
return;
this._finishWorkspaceSwitch(this._switchData);
}
set movingWindow(movingWindow) { set movingWindow(movingWindow) {
this._movingWindow = movingWindow; this._movingWindow = movingWindow;
} }