From ef9006fa65bf6f1ae24c16e53fbe164ea825b186 Mon Sep 17 00:00:00 2001
From: "Jasper St. Pierre" <jstpierre@mecheye.net>
Date: Mon, 26 Nov 2012 14:47:30 -0500
Subject: [PATCH] grabHelper: Use captured-event for escape ungrabs

I have no idea why we used 'event' rather than 'captured-event' before.
'event' has some really strange quirks that came up when porting PopupMenu
to the GrabHelper
---
 js/ui/grabHelper.js | 25 ++++++-------------------
 1 file changed, 6 insertions(+), 19 deletions(-)

diff --git a/js/ui/grabHelper.js b/js/ui/grabHelper.js
index 3623a0f66..7e86c8439 100644
--- a/js/ui/grabHelper.js
+++ b/js/ui/grabHelper.js
@@ -43,7 +43,6 @@ const GrabHelper = new Lang.Class({
 
         this._actors = [];
         this._capturedEventId = 0;
-        this._eventId = 0;
         this._keyFocusNotifyId = 0;
         this._focusWindowChangedId = 0;
         this._ignoreRelease = false;
@@ -171,7 +170,6 @@ const GrabHelper = new Lang.Class({
                 return false;
 
             this._capturedEventId = global.stage.connect('captured-event', Lang.bind(this, this._onCapturedEvent));
-            this._eventId = global.stage.connect('event', Lang.bind(this, this._onEvent));
         }
 
         this._modalCount++;
@@ -188,11 +186,6 @@ const GrabHelper = new Lang.Class({
             this._capturedEventId = 0;
         }
 
-        if (this._eventId > 0) {
-            global.stage.disconnect(this._eventId);
-            this._eventId = 0;
-        }
-
         Main.popModal(this._owner);
         global.sync_pointer();
     },
@@ -323,6 +316,12 @@ const GrabHelper = new Lang.Class({
         if (Main.keyboard.shouldTakeEvent(event))
             return false;
 
+        if (type == Clutter.EventType.KEY_PRESS &&
+            event.get_key_symbol() == Clutter.KEY_Escape) {
+            this.ungrab();
+            return true;
+        }
+
         if (button) {
             // If we have a press event, ignore the next event,
             // which should be a release event.
@@ -334,18 +333,6 @@ const GrabHelper = new Lang.Class({
         return this._modalCount > 0;
     },
 
-    // We catch 'event' rather than 'key-press-event' so that we get
-    // a chance to run before the overview's own Escape check
-    _onEvent: function(actor, event) {
-        if (event.type() == Clutter.EventType.KEY_PRESS &&
-            event.get_key_symbol() == Clutter.KEY_Escape) {
-            this.ungrab();
-            return true;
-        }
-
-        return false;
-    },
-
     _onKeyFocusChanged: function() {
         let focus = global.stage.key_focus;
         if (!focus || !this._isWithinGrabbedActor(focus))