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.
This commit is contained in:
parent
f288c43e6e
commit
5d00c1a5ee
@ -16,6 +16,7 @@ const Atk = imports.gi.Atk;
|
|||||||
const AppFavorites = imports.ui.appFavorites;
|
const AppFavorites = imports.ui.appFavorites;
|
||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const DND = imports.ui.dnd;
|
const DND = imports.ui.dnd;
|
||||||
|
const GrabHelper = imports.ui.grabHelper;
|
||||||
const IconGrid = imports.ui.iconGrid;
|
const IconGrid = imports.ui.iconGrid;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const Overview = imports.ui.overview;
|
const Overview = imports.ui.overview;
|
||||||
@ -1249,18 +1250,7 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
function() {
|
function() {
|
||||||
this.actor.destroy();
|
this.actor.destroy();
|
||||||
}));
|
}));
|
||||||
this.actor.connect('key-press-event', Lang.bind(this, this._onKeyPress));
|
this._grabHelper = new GrabHelper.GrabHelper(this.actor);
|
||||||
},
|
|
||||||
|
|
||||||
_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;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
toggle: function() {
|
toggle: function() {
|
||||||
@ -1274,6 +1264,12 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
if (this._isOpen)
|
if (this._isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._isOpen = this._grabHelper.grab({ actor: this.actor,
|
||||||
|
onUngrab: Lang.bind(this, this.popdown) });
|
||||||
|
|
||||||
|
if (!this._isOpen)
|
||||||
|
return;
|
||||||
|
|
||||||
this.actor.show();
|
this.actor.show();
|
||||||
|
|
||||||
this._boxPointer.setArrowActor(this._source.actor);
|
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.actor.navigate_focus(null, Gtk.DirectionType.TAB_FORWARD, false);
|
||||||
|
|
||||||
this._isOpen = true;
|
|
||||||
this.emit('open-state-changed', true);
|
this.emit('open-state-changed', true);
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -1290,6 +1285,8 @@ const AppFolderPopup = new Lang.Class({
|
|||||||
if (!this._isOpen)
|
if (!this._isOpen)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
this._grabHelper.ungrab({ actor: this.actor });
|
||||||
|
|
||||||
this._boxPointer.hide(BoxPointer.PopupAnimation.FADE |
|
this._boxPointer.hide(BoxPointer.PopupAnimation.FADE |
|
||||||
BoxPointer.PopupAnimation.SLIDE);
|
BoxPointer.PopupAnimation.SLIDE);
|
||||||
this._isOpen = false;
|
this._isOpen = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user