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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1691>
This commit is contained in:
Georges Basile Stavracas Neto 2021-02-17 11:09:31 -03:00 committed by Marge Bot
parent 1819e34f29
commit b1970b95b8

View File

@ -991,6 +991,16 @@ class Workspace extends St.Widget {
}); });
this._overviewAdjustment = overviewAdjustment; 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.monitorIndex = monitorIndex;
this._monitor = Main.layoutManager.monitors[this.monitorIndex]; this._monitor = Main.layoutManager.monitors[this.monitorIndex];
@ -1241,6 +1251,11 @@ class Workspace extends St.Widget {
this._layoutFrozenId = 0; this._layoutFrozenId = 0;
} }
if (this._overviewStateId > 0) {
this._overviewAdjustment.disconnect(this._overviewStateId);
delete this._overviewStateId;
}
this._windows = []; this._windows = [];
} }