From b1970b95b8813c00895f3da9f4fc88ca04627954 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Wed, 17 Feb 2021 11:09:31 -0300 Subject: [PATCH] workspace: Clip window previews Window previews can spill out of the container when their position in the session overflows the monitor boundaries. In the past, Workspace didn't have a visible background, and was (almost) always fullscreen, which would mask this particular problem. However, nowadays, it is very much noticeable when this situation happens. Clip the window previews container to its allocation when the overview state is bigger than WINDOW_PICKER. That is, between HIDDEN and WINDOW_PICKER states, inclusive, no clipping is applied. Part-of: --- js/ui/workspace.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 47f1c69f2..b849771a6 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -991,6 +991,16 @@ class Workspace extends St.Widget { }); this._overviewAdjustment = overviewAdjustment; + this._overviewStateId = overviewAdjustment.connect('notify::value', () => { + const overviewState = overviewAdjustment.value; + + // We want windows not to spill out when the overview is in + // APP_GRID state, but HIDDEN and WINDOW_PICKER should allow + // them to eventually draw outside the workspace. + this._container.clip_to_allocation = + overviewState > OverviewControls.ControlsState.WINDOW_PICKER; + }); + this.monitorIndex = monitorIndex; this._monitor = Main.layoutManager.monitors[this.monitorIndex]; @@ -1241,6 +1251,11 @@ class Workspace extends St.Widget { this._layoutFrozenId = 0; } + if (this._overviewStateId > 0) { + this._overviewAdjustment.disconnect(this._overviewStateId); + delete this._overviewStateId; + } + this._windows = []; }