[gnome-shell/wip/fmuellner/overview-tweaks: 14/16] workspace: Move decision to show/hide chrome to clone



commit 3ab575bb046b236eb24a2bddb201e6b4e5bda829
Author: Florian Müllner <fmuellner gnome org>
Date:   Wed Jul 19 02:29:16 2017 +0200

    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 files changed, 11 insertions(+), 13 deletions(-)
---
diff --git a/js/ui/workspace.js b/js/ui/workspace.js
index 7c1c666..4be96d9 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() {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]