summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Müllner <fmuellner@gnome.org>2014-06-11 13:13:12 +0200
committerFlorian Müllner <fmuellner@gnome.org>2014-06-11 23:24:30 +0200
commit5d00c1a5ee4e3fc3a7a3aef2d1439dd83c4a7bd6 (patch)
treea5de31e058c05a6a0f93af2c8c3dc1e7598d210f
parentf288c43e6ea37c3619c65706f0a4fceb358444e4 (diff)
appDisplay: Use GrabHelper for folder popups
As clicks outside the app picker should still be handled normally while clicks inside should dismiss the popup, we cannot make full use of GrabHelper. However using it at least for focus handling fixes some minor details we are getting wrong, for instance not restoring the previous focus after dismissing a folder popup.
-rw-r--r--js/ui/appDisplay.js23
1 files changed, 10 insertions, 13 deletions
diff --git a/js/ui/appDisplay.js b/js/ui/appDisplay.js
index e43a6793..854acd1b 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;