windowPreview: Allow titles to overlap other previews

We are about to add additional chrome, but still want to use
as much space as possible for the previews. Allowing titles
to overlap other previews should help keeping the additional
whitespace requirement low.

https://gitlab.gnome.org/Teams/Design/os-mockups/-/issues/81

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1605>
This commit is contained in:
Florian Müllner 2020-10-12 13:19:07 +02:00
parent bc6849c7a2
commit 5e10bed458
2 changed files with 32 additions and 17 deletions

View File

@ -429,14 +429,20 @@ var WindowPreview = GObject.registerClass({
return app.get_name(); return app.get_name();
} }
chromeHeights() { overlapHeights() {
const [, closeButtonHeight] = this._closeButton.get_preferred_height(-1);
const [, titleHeight] = this._title.get_preferred_height(-1); const [, titleHeight] = this._title.get_preferred_height(-1);
const topOverlap = 0;
const bottomOverlap = titleHeight / 2;
return [topOverlap, bottomOverlap];
}
chromeHeights() {
const [, closeButtonHeight] = this._closeButton.get_preferred_height(-1);
const topOversize = (this._borderSize / 2) + (closeButtonHeight / 2); const topOversize = (this._borderSize / 2) + (closeButtonHeight / 2);
const bottomOversize = Math.max( const bottomOversize = this._borderSize;
this._borderSize,
(titleHeight / 2) + (this._borderSize / 2));
return [topOversize, bottomOversize]; return [topOversize, bottomOversize];
} }
@ -462,6 +468,7 @@ var WindowPreview = GObject.registerClass({
return; return;
this._overlayShown = true; this._overlayShown = true;
this._restack();
// If we're supposed to animate and an animation in our direction // If we're supposed to animate and an animation in our direction
// is already happening, let that one continue // is already happening, let that one continue
@ -493,6 +500,7 @@ var WindowPreview = GObject.registerClass({
return; return;
this._overlayShown = false; this._overlayShown = false;
this._restack();
// If we're supposed to animate and an animation in our direction // If we're supposed to animate and an animation in our direction
// is already happening, let that one continue // is already happening, let that one continue
@ -739,6 +747,21 @@ var WindowPreview = GObject.registerClass({
return true; return true;
} }
_restack() {
// We may not have a parent if DnD completed successfully, in
// which case our clone will shortly be destroyed and replaced
// with a new one on the target workspace.
const parent = this.get_parent();
if (parent !== null) {
if (this._overlayShown)
parent.set_child_above_sibling(this, null);
else if (this._stackAbove === null)
parent.set_child_below_sibling(this, null);
else if (!this._stackAbove._overlayShown)
parent.set_child_above_sibling(this, this._stackAbove);
}
}
_onDragBegin(_draggable, _time) { _onDragBegin(_draggable, _time) {
this.inDrag = true; this.inDrag = true;
this.hideOverlay(false); this.hideOverlay(false);
@ -760,16 +783,7 @@ var WindowPreview = GObject.registerClass({
_onDragEnd(_draggable, _time, _snapback) { _onDragEnd(_draggable, _time, _snapback) {
this.inDrag = false; this.inDrag = false;
// We may not have a parent if DnD completed successfully, in this._restack();
// which case our clone will shortly be destroyed and replaced
// with a new one on the target workspace.
let parent = this.get_parent();
if (parent !== null) {
if (this._stackAbove == null)
parent.set_child_below_sibling(this, null);
else
parent.set_child_above_sibling(this, this._stackAbove);
}
if (this['has-pointer']) if (this['has-pointer'])
this.showOverlay(true); this.showOverlay(true);

View File

@ -469,10 +469,11 @@ var WorkspaceLayout = GObject.registerClass({
colSpacing += Math.max(leftOversize, rightOversize); colSpacing += Math.max(leftOversize, rightOversize);
if (containerBox) { if (containerBox) {
containerBox.x1 += leftOversize; const [topOverlap, bottomOverlap] = window.overlapHeights();
containerBox.x1 += leftOversize + topOverlap;
containerBox.x2 -= rightOversize; containerBox.x2 -= rightOversize;
containerBox.y1 += topOversize; containerBox.y1 += topOversize;
containerBox.y2 -= bottomOversize; containerBox.y2 -= bottomOversize + bottomOverlap;
} }
return [rowSpacing, colSpacing, containerBox]; return [rowSpacing, colSpacing, containerBox];