From 675ef3f0d569e7121689874e1cf4ce3078a99379 Mon Sep 17 00:00:00 2001 From: DeeJanuz <45082401+DeeJanuz@users.noreply.github.com> Date: Thu, 1 Oct 2026 17:07:38 -0600 Subject: [PATCH] Relay: share a key combination's Meta release with frame-voice A Meta+key combination (Meta+J for gaze_left, say) hides Meta's release from the desktop, and the relay skipped share_key for it too. frame-voice saw Meta go down on @frametop_keys and never come up, so it held all dictated text back, waiting for that release. Keys of grabbed keyboards are now shared as pressed, before key_binding() decides what the desktop gets. Co-Authored-By: Claude Opus 5.5 --- input/input-relay.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/input/input-relay.py b/input/input-relay.py index e4fb462..f5bf63e 100755 --- a/input/input-relay.py +++ b/input/input-relay.py @@ -1147,6 +1147,16 @@ def main(): if node.role != "pointer": # Observed only, unless typing goes to the desktop. With META_DASHBOARD=1, # a Meta tap on any keyboard toggles the dashboard. + if (node.role == "passthrough" and etype == EV_KEY and node.grabbed + and code < BTN_MISC and value in (0, 1)): + # Shared as pressed, key combinations included: the Meta release a + # combination keeps from the desktop must still reach frame-voice, or + # it waits for that release before typing anything. + share_key(node, code, value) + if value: + node.held.add(code) + else: + node.held.discard(code) if node.role == "passthrough" and etype == EV_KEY and code < BTN_MISC and key_binding(code, value, now): continue if node.role == "passthrough" and etype == EV_KEY: @@ -1154,12 +1164,6 @@ def main(): last_typing = now screens_sock.sendto(b"typing", HELPER) to_screens(code, value) - if node.grabbed and code < BTN_MISC and value in (0, 1): - share_key(node, code, value) - if value: - node.held.add(code) - else: - node.held.discard(code) if (pointer and state["meta_dashboard"] and node.role == "passthrough" and etype == EV_KEY): if code in (KEY_LEFTMETA, KEY_RIGHTMETA):