windowPreview: Allow to disable overlay

WindowPreviews now contain and manage overlaid elements like close
button or title label themselves. That's generally better, but right now
the only way to disable those overlays (for example during transitions)
is to prevent any hover or focus events from getting to the preview.

Instead, add some explicit API for enabling or disabling overlay support.

https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1345
This commit is contained in:
Florian Müllner 2020-06-26 17:01:31 +02:00
parent ff89693998
commit c134091268

View File

@ -189,6 +189,12 @@ var WindowPreviewLayout = GObject.registerClass({
}); });
var WindowPreview = GObject.registerClass({ var WindowPreview = GObject.registerClass({
Properties: {
'overlay-enabled': GObject.ParamSpec.boolean(
'overlay-enabled', 'overlay-enabled', 'overlay-enabled',
GObject.ParamFlags.READWRITE,
true),
},
Signals: { Signals: {
'drag-begin': {}, 'drag-begin': {},
'drag-cancelled': {}, 'drag-cancelled': {},
@ -255,6 +261,7 @@ var WindowPreview = GObject.registerClass({
this.inDrag = false; this.inDrag = false;
this._selected = false; this._selected = false;
this._overlayEnabled = true;
this._closeRequested = false; this._closeRequested = false;
this._idleHideOverlayId = 0; this._idleHideOverlayId = 0;
@ -434,6 +441,9 @@ var WindowPreview = GObject.registerClass({
} }
showOverlay(animate) { showOverlay(animate) {
if (!this._overlayEnabled)
return;
const ongoingTransition = this._border.get_transition('opacity'); const ongoingTransition = this._border.get_transition('opacity');
// Don't do anything if we're fully visible already // Don't do anything if we're fully visible already
@ -569,6 +579,25 @@ var WindowPreview = GObject.registerClass({
}); });
} }
// eslint-disable-next-line camelcase
get overlay_enabled() {
return this._overlayEnabled;
}
// eslint-disable-next-line camelcase
set overlay_enabled(enabled) {
if (this._overlayEnabled === enabled)
return;
this._overlayEnabled = enabled;
this.notify('overlay-enabled');
if (!enabled)
this.hideOverlay(false);
else if (this['has-pointer'] || global.stage.key_focus === this)
this.showOverlay(true);
}
// Find the actor just below us, respecting reparenting done by DND code // Find the actor just below us, respecting reparenting done by DND code
_getActualStackAbove() { _getActualStackAbove() {
if (this._stackAbove == null) if (this._stackAbove == null)