workspace: Make window preview overlays overflow the allocation
We want to use as much space as possible for showing window previews in the overview, and the title and close buttons of those windows are only visible on hover, so we can show them above anything if we want. On both primary monitors and secondary monitors, there's a certain free space available towards the bottom edge of the monitor (on the primary monitor we show the dash there, and secondary monitors just scale down the Workspaces). We can make use of this by checking how much free space there is available from the bottom edge of our allocation to the bottom edge of the monitor, and then aligning the window previews to make full use of this space. So stop adding any padding to the edges of the Workspace, which will make the windows a lot larger and completely fill the Workspaces allocation. The left, top and right monitor edges should always be far enough away to accomodate the close button and hover scale-up of the window. Only with the bottom edge of the monitor we have to be a bit more careful (the overflowing height of the window title is quite big), so there we check if enough free space is available. If there isn't enough free space, we simply apply a bit of bottom padding again and shift the window up. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1813>
This commit is contained in:
parent
7f90a46f8c
commit
fcc80407ea
@ -476,13 +476,18 @@ var WorkspaceLayout = GObject.registerClass({
|
|||||||
colSpacing += oversize;
|
colSpacing += oversize;
|
||||||
|
|
||||||
if (containerBox) {
|
if (containerBox) {
|
||||||
const [topOverlap, bottomOverlap] = window.overlapHeights();
|
const monitor = Main.layoutManager.monitors[this._monitorIndex];
|
||||||
const overlap = Math.max(topOverlap, bottomOverlap);
|
|
||||||
|
|
||||||
containerBox.x1 += oversize;
|
const bottomPoint = new Graphene.Point3D({ y: containerBox.y2 });
|
||||||
containerBox.x2 -= oversize;
|
const transformedBottomPoint =
|
||||||
containerBox.y1 += oversize + overlap;
|
this._container.apply_transform_to_point(bottomPoint);
|
||||||
containerBox.y2 -= oversize + overlap;
|
const bottomFreeSpace =
|
||||||
|
(monitor.y + monitor.height) - transformedBottomPoint.y;
|
||||||
|
|
||||||
|
const [, bottomOverlap] = window.overlapHeights();
|
||||||
|
|
||||||
|
if ((bottomOverlap + oversize) > bottomFreeSpace)
|
||||||
|
containerBox.y2 -= (bottomOverlap + oversize) - bottomFreeSpace;
|
||||||
}
|
}
|
||||||
|
|
||||||
return [rowSpacing, colSpacing, containerBox];
|
return [rowSpacing, colSpacing, containerBox];
|
||||||
|
Loading…
Reference in New Issue
Block a user