From 6816aea906036f883ccbd3f17deee0fcd5deb2b5 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() {