[gnome-shell] grabHelper: Drop to the actor clicked on



commit 066e5cddb5c939ea95f406a383c5da52a0997f4e
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Mon Nov 26 14:55:03 2012 -0500

    grabHelper: Drop to the actor clicked on
    
    This is necessary for child popups in menus, e.g. while in a combo box,
    clicking outside of the user menu should drop the entire menu, but
    clicking on the user menu itself should only drop the combo box.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=689109

 js/ui/grabHelper.js |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)
---
diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js
index aacce43..b9e661f 100644
--- a/js/ui/grabHelper.js
+++ b/js/ui/grabHelper.js
@@ -103,6 +103,16 @@ const GrabHelper = new Lang.Class({
         return -1;
     },
 
+    _actorInGrabStack: function(actor) {
+        while (actor) {
+            let idx = this._findStackIndex(actor);
+            if (idx >= 0)
+                return idx;
+            actor = actor.get_parent();
+        }
+        return -1;
+    },
+
     isActorGrabbed: function(actor) {
         return this._findStackIndex(actor) >= 0;
     },
@@ -323,7 +333,8 @@ const GrabHelper = new Lang.Class({
             // which should be a release event.
             if (press)
                 this._ignoreRelease = true;
-            this.ungrab({ actor: this._grabStack[0].actor });
+            let i = this._actorInGrabStack(event.get_source()) + 1;
+            this.ungrab({ actor: this._grabStack[i].actor });
         }
 
         return this._modalCount > 0;



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