diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index e43a67938..854acd1b4 100644
--- a/js/ui/appDisplay.js
+++ b/js/ui/appDisplay.js
@@ -16,6 +16,7 @@ const Atk = imports.gi.Atk;
 const AppFavorites = imports.ui.appFavorites;
 const BoxPointer = imports.ui.boxpointer;
 const DND = imports.ui.dnd;
+const GrabHelper = imports.ui.grabHelper;
 const IconGrid = imports.ui.iconGrid;
 const Main = imports.ui.main;
 const Overview = imports.ui.overview;
@@ -1249,18 +1250,7 @@ const AppFolderPopup = new Lang.Class({
             function() {
                 this.actor.destroy();
             }));
-        this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
-    },
-
-    _onKeyPress: function(actor, event) {
-        if (!this._isOpen)
-            return Clutter.EVENT_PROPAGATE;
-
-        if (event.get_key_symbol() != Clutter.KEY_Escape)
-            return Clutter.EVENT_PROPAGATE;
-
-        this.popdown();
-        return Clutter.EVENT_STOP;
+        this._grabHelper = new GrabHelper.GrabHelper(this.actor);
     },
 
     toggle: function() {
@@ -1274,6 +1264,12 @@ const AppFolderPopup = new Lang.Class({
         if (this._isOpen)
             return;
 
+        this._isOpen = this._grabHelper.grab({ actor: this.actor,
+                                               onUngrab: Lang.bind(this, this.popdown) });
+
+        if (!this._isOpen)
+            return;
+
         this.actor.show();
 
         this._boxPointer.setArrowActor(this._source.actor);
@@ -1282,7 +1278,6 @@ const AppFolderPopup = new Lang.Class({
 
         this.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
 
-        this._isOpen = true;
         this.emit('open-state-changed', true);
     },
 
@@ -1290,6 +1285,8 @@ const AppFolderPopup = new Lang.Class({
         if (!this._isOpen)
             return;
 
+        this._grabHelper.ungrab({ actor: this.actor });
+
         this._boxPointer.hide(BoxPointer.PopupAnimation.FADE |
                               BoxPointer.PopupAnimation.SLIDE);
         this._isOpen = false;