From 1e6fec0d1ec3ed43586f96e9bd32b885c0074cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 19 Jul 2017 02:29:16 +0200 Subject: [PATCH] workspace: Move decision to show/hide chrome to clone Currently the chrome layer decides itself which events on the window clone should show or hide the chrome, which makes it harder to extent. Instead, move the decision to the window clone by letting it emit show/hide-chrome events when appropriate. https://bugzilla.gnome.org/show_bug.cgi?id=783953 --- js/ui/workspace.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 888b21d66..4607f3981 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -157,6 +157,12 @@ var WindowClone = new Lang.Class({ this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress)); + this.actor.connect('enter-event', () => { this.emit('show-chrome'); }); + this.actor.connect('key-focus-in', () => { this.emit('show-chrome'); }); + + this.actor.connect('leave-event', () => { this.emit('hide-chrome'); }); + this.actor.connect('key-focus-out', () => { this.emit('hide-chrome'); }); + this._draggable = DND.makeDraggable(this.actor, { restoreOnSuccess: true, manualMode: true, @@ -454,14 +460,8 @@ var WindowOverlay = new Lang.Class({ button.connect('clicked', Lang.bind(this, this._closeWindow)); windowClone.actor.connect('destroy', Lang.bind(this, this._onDestroy)); - windowClone.actor.connect('enter-event', - Lang.bind(this, this._onEnter)); - windowClone.actor.connect('leave-event', - Lang.bind(this, this._onLeave)); - windowClone.actor.connect('key-focus-in', - Lang.bind(this, this._onEnter)); - windowClone.actor.connect('key-focus-out', - Lang.bind(this, this._onLeave)); + windowClone.connect('show-chrome', Lang.bind(this, this._onShowChrome)); + windowClone.connect('hide-chrome', Lang.bind(this, this._onHideChrome)); this._windowAddedId = 0; @@ -651,25 +651,23 @@ var WindowOverlay = new Lang.Class({ }); }, - _onEnter: function() { + _onShowChrome: function() { // We might get enter events on the clone while the overlay is // hidden, e.g. during animations, we ignore these events, // as the close button will be shown as needed when the overlays // are shown again if (this._hidden) - return Clutter.EVENT_PROPAGATE; + return; this._animateVisible(); this.emit('show-close-button'); - return Clutter.EVENT_PROPAGATE; }, - _onLeave: function() { + _onHideChrome: function() { if (this._idleToggleCloseId == 0) { this._idleToggleCloseId = Mainloop.timeout_add(750, Lang.bind(this, this._idleToggleCloseButton)); GLib.Source.set_name_by_id(this._idleToggleCloseId, '[gnome-shell] this._idleToggleCloseButton'); } - return Clutter.EVENT_PROPAGATE; }, _idleToggleCloseButton: function() {