From 876765dbe11aa457a599c57149d56ee5eeb2b34d Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 18 Nov 2021 00:18:09 +0100 Subject: [PATCH] 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: --- js/ui/boxpointer.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/js/ui/boxpointer.js b/js/ui/boxpointer.js index be9c57ce0..1db8e56af 100644 --- a/js/ui/boxpointer.js +++ b/js/ui/boxpointer.js @@ -46,6 +46,7 @@ var BoxPointer = GObject.registerClass({ this.add_actor(this._border); this.set_child_above_sibling(this.bin, this._border); this._sourceAlignment = 0.5; + this._muteKeys = true; this._muteInput = true; this.connect('notify::visible', () => { @@ -58,8 +59,16 @@ var BoxPointer = GObject.registerClass({ this.connect('destroy', this._onDestroy.bind(this)); } - vfunc_captured_event() { - if (this._muteInput) + vfunc_captured_event(event) { + 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_PROPAGATE; @@ -86,6 +95,7 @@ var BoxPointer = GObject.registerClass({ else this.opacity = 255; + this._muteKeys = false; this.show(); if (animate & PopupAnimation.SLIDE) { @@ -148,6 +158,7 @@ var BoxPointer = GObject.registerClass({ } this._muteInput = true; + this._muteKeys = true; this.remove_all_transitions(); this.ease({