From cfd792fe86ca89106c0c084871f6e8115d9698f7 Mon Sep 17 00:00:00 2001 From: Alexander Mikhaylenko Date: Sat, 20 Jun 2020 23:44:24 +0500 Subject: [PATCH] workspaceAnimation: Group sticky windows and moving window Since the transitions consists of window clones now, all the clones appear above sticky windows. Clone sticky windows as well, and treat them same as moving window instead. https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1326 --- js/ui/workspaceAnimation.js | 36 ++++++++---------------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/js/ui/workspaceAnimation.js b/js/ui/workspaceAnimation.js index abac1a83b..5036ff743 100644 --- a/js/ui/workspaceAnimation.js +++ b/js/ui/workspaceAnimation.js @@ -37,6 +37,11 @@ class WorkspaceGroup extends Clutter.Actor { const isSticky = window.is_on_all_workspaces() || window === this._movingWindow; + // No workspace means we should show windows that are on all workspaces + if (!this._workspace) + return isSticky; + + // Otherwise only show windows that are (only) on that workspace return !isSticky && window.located_on_workspace(this._workspace); } @@ -155,8 +160,7 @@ var WorkspaceAnimationController = class { const switchData = {}; this._switchData = switchData; - switchData.movingWindowBin = new Clutter.Actor(); - switchData.movingWindow = null; + switchData.stickyGroup = new WorkspaceGroup(null, this.movingWindow); switchData.workspaceGroups = []; switchData.gestureActivated = false; switchData.inProgress = false; @@ -169,7 +173,7 @@ var WorkspaceAnimationController = class { Main.uiGroup.insert_child_above(switchData.backgroundGroup, global.window_group); Main.uiGroup.insert_child_above(switchData.container, switchData.backgroundGroup); - Main.uiGroup.insert_child_above(switchData.movingWindowBin, switchData.container); + Main.uiGroup.insert_child_above(switchData.stickyGroup, switchData.container); let x = 0; let y = 0; @@ -208,38 +212,14 @@ var WorkspaceAnimationController = class { switchData.container.y = -activeGroup.y; else switchData.container.x = -activeGroup.x; - - if (this.movingWindow) { - const windowActor = this.movingWindow.get_compositor_private(); - - switchData.movingWindow = { - windowActor, - parent: windowActor.get_parent(), - }; - - switchData.movingWindow.parent.remove_child(windowActor); - switchData.movingWindowBin.add_child(windowActor); - switchData.movingWindow.windowDestroyId = windowActor.connect('destroy', () => { - switchData.movingWindow = null; - }); - } } _finishWorkspaceSwitch(switchData) { this._switchData = null; - if (switchData.movingWindow) { - const record = switchData.movingWindow; - record.windowActor.disconnect(record.windowDestroyId); - switchData.movingWindowBin.remove_child(record.windowActor); - record.parent.add_child(record.windowActor); - - switchData.movingWindow = null; - } - switchData.backgroundGroup.destroy(); switchData.container.destroy(); - switchData.movingWindowBin.destroy(); + switchData.stickyGroup.destroy(); this.movingWindow = null; }