Skip to content

[BUG] Keyboard shortcut recorder accepts bare key with no modifier, breaking typing system-wide #556

Description

@akshay-soni

Describe the bug

The keyboard shortcut recorder accepts a bare key with no modifier (e.g. pressing F alone, keyCode 3) as a valid global hotkey. Once assigned, that key is intercepted system-wide by the app's global event monitor, which breaks normal typing of that key in every other app. There is no UI path to clear/unset the shortcut once it's in this state (recording a replacement requires being able to type in the recorder, but the bare key doesn't reliably let you re-enter the field either, and any other app using that key is now silently swallowed).

The mouse-click shortcut recorder already guards against this (isUnmodifiedLeftOrRightClick produces "needs a modifier key"), but the keyboard recorder in handleShortcutKeyDownEvent has no equivalent check.

Reproduction steps

  1. Open FluidVoice → Settings → Shortcuts (or wherever a keyboard shortcut is recorded, e.g. the dictation toggle shortcut).
  2. Click into the shortcut recorder field to start recording.
  3. Press a single letter key with no modifier held down, e.g. F.
  4. Observe the recorder accepts it and saves it as the shortcut.
  5. Try typing the letter F in any other application (e.g. TextEdit, browser address bar).

Expected behavior

The recorder should reject a modifier-less key press for a global keyboard shortcut and show a message like "needs a modifier key," the same way the mouse-click recorder already does. Only the cancel shortcut (used while actively recording) should be exempt, since it legitimately defaults to a bare Escape.

Actual behavior

The bare key is accepted and saved as a global hotkey. Afterward, pressing that key anywhere on the system is intercepted by FluidVoice instead of reaching the focused app, breaking normal typing, and there is no UI control to remove/reset the offending shortcut.

App Version

1.6.2

macOS Version

macOS 26.5.1

Architecture

Apple Silicon

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions