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



commit 31ace640d127c7c9ecc3fc53c91dedfa6e06fb90
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 abb4560..598b291 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]