boxPointer: Do not mute key events while showing
We want to mute things like pointers hovering the BoxPointer while it does open. However keyboard events should still be handled promptly. Since Clutter.grab() will involve different actors being grabbed and focused, this will have some more presence, e.g. when navigating panel menus. We want to be able to navigate outside a menu while it is still being shown. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
This commit is contained in:
parent
0e4cd3bc79
commit
876765dbe1
@ -46,6 +46,7 @@ var BoxPointer = GObject.registerClass({
|
|||||||
this.add_actor(this._border);
|
this.add_actor(this._border);
|
||||||
this.set_child_above_sibling(this.bin, this._border);
|
this.set_child_above_sibling(this.bin, this._border);
|
||||||
this._sourceAlignment = 0.5;
|
this._sourceAlignment = 0.5;
|
||||||
|
this._muteKeys = true;
|
||||||
this._muteInput = true;
|
this._muteInput = true;
|
||||||
|
|
||||||
this.connect('notify::visible', () => {
|
this.connect('notify::visible', () => {
|
||||||
@ -58,8 +59,16 @@ var BoxPointer = GObject.registerClass({
|
|||||||
this.connect('destroy', this._onDestroy.bind(this));
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
vfunc_captured_event() {
|
vfunc_captured_event(event) {
|
||||||
if (this._muteInput)
|
if (event.type() === Clutter.EventType.ENTER ||
|
||||||
|
event.type() === Clutter.EventType.LEAVE)
|
||||||
|
return Clutter.EVENT_PROPAGATE;
|
||||||
|
|
||||||
|
let mute = event.type() === Clutter.EventType.KEY_PRESS ||
|
||||||
|
event.type() === Clutter.EventType.KEY_RELEASE
|
||||||
|
? this._muteKeys : this._muteInput;
|
||||||
|
|
||||||
|
if (mute)
|
||||||
return Clutter.EVENT_STOP;
|
return Clutter.EVENT_STOP;
|
||||||
|
|
||||||
return Clutter.EVENT_PROPAGATE;
|
return Clutter.EVENT_PROPAGATE;
|
||||||
@ -86,6 +95,7 @@ var BoxPointer = GObject.registerClass({
|
|||||||
else
|
else
|
||||||
this.opacity = 255;
|
this.opacity = 255;
|
||||||
|
|
||||||
|
this._muteKeys = false;
|
||||||
this.show();
|
this.show();
|
||||||
|
|
||||||
if (animate & PopupAnimation.SLIDE) {
|
if (animate & PopupAnimation.SLIDE) {
|
||||||
@ -148,6 +158,7 @@ var BoxPointer = GObject.registerClass({
|
|||||||
}
|
}
|
||||||
|
|
||||||
this._muteInput = true;
|
this._muteInput = true;
|
||||||
|
this._muteKeys = true;
|
||||||
|
|
||||||
this.remove_all_transitions();
|
this.remove_all_transitions();
|
||||||
this.ease({
|
this.ease({
|
||||||
|
Loading…
Reference in New Issue
Block a user