[gnome-shell/gnome-3-2] messageTray: use a "hot corner" to summon the tray



commit 80dfda17cdf2d537c9424c009c0c839ea9f53e9b
Author: Rui Matos <tiagomatos gmail com>
Date:   Fri Nov 4 00:26:49 2011 +0000

    messageTray: use a "hot corner" to summon the tray
    
    Instead of leaving the tray covering the whole last pixel row when it's
    hidden, hide it completely. This avoids mouse events not being delivered to
    application windows on the last pixel row.
    
    To summon the tray we use a single reactive pixel on the corner.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=663366

 js/ui/messageTray.js |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 8f6011a..b87dd14 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1419,8 +1419,16 @@ MessageTray.prototype = {
         this._notificationRemoved = false;
         this._reNotifyAfterHideNotification = null;
 
+        this._corner = new Clutter.Rectangle({ width: 1,
+                                               height: 1,
+                                               opacity: 0,
+                                               reactive: true });
+        this._corner.connect('enter-event', Lang.bind(this, this._onCornerEnter));
+        Main.layoutManager.trayBox.add_actor(this._corner);
+        Main.layoutManager.trackChrome(this._corner);
+
         Main.layoutManager.trayBox.add_actor(this.actor);
-        this.actor.y = -1;
+        this.actor.y = this.actor.height;
         Main.layoutManager.trackChrome(this.actor);
         Main.layoutManager.trackChrome(this._notificationBin);
 
@@ -1459,12 +1467,24 @@ MessageTray.prototype = {
         this._chatSummaryItemsCount = 0;
     },
 
+    _onCornerEnter: function(actor, event) {
+        this._pointerInSummary = true;
+        this._updateState();
+    },
+
     _setSizePosition: function() {
         let monitor = Main.layoutManager.bottomMonitor;
         this._notificationBin.x = 0;
         this._notificationBin.width = monitor.width;
         this._summaryBin.x = 0;
         this._summaryBin.width = monitor.width;
+
+        if (St.Widget.get_default_direction() == St.TextDirection.RTL)
+            this._corner.x = 0;
+        else
+            this._corner.x = Main.layoutManager.trayBox.width - 1;
+
+        this._corner.y = Main.layoutManager.trayBox.height - 1;
     },
 
     contains: function(source) {
@@ -2057,7 +2077,7 @@ MessageTray.prototype = {
 
     _hideTray: function() {
         this._tween(this.actor, '_trayState', State.HIDDEN,
-                    { y: -1,
+                    { y: this.actor.height,
                       time: ANIMATION_TIME,
                       transition: 'easeOutQuad'
                     });



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