[gnome-shell] Panel: sync primary hotcorner hover with Activities button



commit 9f438d0ec6ba02c16b22375b00d2413fa6cde54e
Author: Giovanni Campagna <gcampagna src gnome org>
Date:   Thu Mar 24 15:00:24 2011 +0100

    Panel: sync primary hotcorner hover with Activities button
    
    Since the hotcorner is a reactive actor, and it is over the Activities
    button, hovering on it results in a leave-event for the button.
    This is not noticeable when opening the overview, as the button is
    correctly prelighted, but it is when closing, if you keep the mouse
    near the hot corner, as the button is kept in normal state, despite
    the mouse being over it.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=645751

 js/ui/main.js  |    2 +-
 js/ui/panel.js |   21 ++++++++++++++++++---
 2 files changed, 19 insertions(+), 4 deletions(-)
---
diff --git a/js/ui/main.js b/js/ui/main.js
index 603f485..d02a22d 100644
--- a/js/ui/main.js
+++ b/js/ui/main.js
@@ -539,7 +539,7 @@ function _relayout() {
         if (!isPrimary && !haveTopLeftCorner)
             continue;
 
-        let corner = new Panel.HotCorner();
+        let corner = new Panel.HotCorner(isPrimary ? panel.button : null);
         hotCorners.push(corner);
         corner.actor.set_position(cornerX, cornerY);
         if (isPrimary)
diff --git a/js/ui/panel.js b/js/ui/panel.js
index 8cbceb0..3ec9a3b 100644
--- a/js/ui/panel.js
+++ b/js/ui/panel.js
@@ -622,12 +622,17 @@ PanelCorner.prototype = {
  * This class manages the "hot corner" that can toggle switching to
  * overview.
  */
-function HotCorner() {
-    this._init();
+function HotCorner(button) {
+    this._init(button);
 }
 
 HotCorner.prototype = {
-    _init : function() {
+    _init : function(button) {
+        // This is the activities button associated with this hot corner,
+        // if this is on the primary monitor (or null with the corner is
+        // on a different monitor)
+        this._button = button;
+
         // We use this flag to mark the case where the user has entered the
         // hot corner and has not left both the hot corner and a surrounding
         // guard area (the "environs"). This avoids triggering the hot corner
@@ -654,6 +659,8 @@ HotCorner.prototype = {
 
         this._activationTime = 0;
 
+        this.actor.connect('enter-event',
+                           Lang.bind(this, this._onEnvironsEntered));
         this.actor.connect('leave-event',
                            Lang.bind(this, this._onEnvironsLeft));
         // Clicking on the hot corner environs should result in the same bahavior
@@ -730,6 +737,11 @@ HotCorner.prototype = {
         this._addRipple(0.35,  1.0,   0.0,   0.3,    1,    0.0);
     },
 
+    _onEnvironsEntered : function() {
+        if (this._button)
+            this._button.hover = true;
+    },
+
     _onCornerEntered : function() {
         if (!this._entered) {
             this._entered = true;
@@ -757,6 +769,9 @@ HotCorner.prototype = {
     },
 
     _onEnvironsLeft : function(actor, event) {
+        if (this._button)
+            this._button.hover = false;
+
         if (event.get_related() != this._corner)
             this._entered = false;
         return false;



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