Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-1241GitHub issuePublicReceived

Menu blocks on-screen keyboard input: Exclusive keyboard focus routes all pointer input to the menu (touchscreen devices)

Reported by ekollof · filed Aug 29, 2026 · open at source

Partly in the audited area (menu) — decided by agents · verified. Not validated yet.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
AreaPartly in the audited areamenu· Decided by agents · verified
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. So far: partly in the audited area (menu) — decided by agents · verified; matches no known issue — decided by agents · verified. The outcome (valid, duplicate, not a bug, …) is not decided yet. See the decision.

Original report

Menu blocks on-screen keyboard input: Exclusive keyboard focus routes all pointer input to the menu (touchscreen devices)revision 1 · captured 2026-09-28 21:24 UTC via poll

Summary

On touchscreen devices, opening the Omarchy menu makes any on-screen keyboard unresponsive: the first tap on the OSK dismisses the menu, and no keystrokes reach the menu's search field while it is open. The OSK keeps working normally in regular windows before and after.

Environment

  • Omarchy 4.0.1-1, Hyprland 0.56.2 (Arch packages)
  • Hardware: GPD Pocket 4 (touchscreen, no tablet-mode sensor); reproduces in both portrait and landscape
  • OSK under test: wvkbd 0.20 (layer-shell, zwp_virtual_keyboard_v1); wtype reproduces the same delivery path
  • Debug log: see comment below (omarchy debug --no-sudo --print)

Steps to reproduce

  1. Show an on-screen keyboard (e.g. wvkbd-mobintl, or SUPER+SHIFT+K with a wvkbd autostart)
  2. Open the Omarchy menu (SUPER+SPACE, omarchy menu summon, or the bar icon)
  3. Tap keys on the on-screen keyboard

Observed

  • The menu closes on the first OSK tap
  • While the menu is open, OSK taps never reach the keyboard (no key highlight, no text); the OSK remains fully functional in normal windows

Expected

  • The menu stays open and OSK keystrokes type into the menu's search filter, like a physical keyboard does

Root cause

plugins/menu/Menu.qml creates its full-screen layer surface with:

WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
exclusionMode: ExclusionMode.Ignore

Per the comment in Ui/KeyboardPanel.qml, Hyprland routes every pointer event to an Exclusive-keyboard layer surface (regardless of where the touch lands). So while the menu is open, OSK taps are delivered to the menu's own scrim (MouseArea { onClicked: root.cancel() }) and dismiss it. The ExclusionMode.Ignore additionally makes the menu overlap the OSK's reserved exclusive zone.

Instrumenting wvkbd with -D confirms the OSK itself emits all keystrokes correctly; delivery breaks because the pointer input is captured by the menu surface.

Validated fix

Clone the plugin (omarchy plugin clone omarchy.menu) and apply two changes to Menu.qml:

-exclusionMode: ExclusionMode.Ignore
+exclusionMode: ExclusionMode.Auto

-WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
+WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand

Verified working on GPD Pocket 4 in both orientations:

  • Menu no longer overlaps the OSK's exclusive zone (also stops covering the bar)
  • Menu still receives keyboard focus when it maps, so type-to-search keeps working with both physical and virtual keyboards (wtype and wvkbd taps verified landing in the filter)
  • Tapping outside the card still dismisses the menu

Notes

  • The polkit password dialog appears to be affected by the same Exclusive-focus pattern (OSK cannot type into it), likely fixed by the same approach in its component
  • The underlying Hyprland behavior (pointer events following Exclusive keyboard focus) may also be worth flagging upstream, but the config-level fix above fully resolves the user-facing problem
View raw text
### Summary

On touchscreen devices, opening the Omarchy menu makes any on-screen keyboard unresponsive: the first tap on the OSK dismisses the menu, and no keystrokes reach the menu's search field while it is open. The OSK keeps working normally in regular windows before and after.

### Environment

- Omarchy 4.0.1-1, Hyprland 0.56.2 (Arch packages)
- Hardware: GPD Pocket 4 (touchscreen, no tablet-mode sensor); reproduces in both portrait and landscape
- OSK under test: wvkbd 0.20 (layer-shell, `zwp_virtual_keyboard_v1`); wtype reproduces the same delivery path
- Debug log: see [comment below](https://github.com/omacom/omarchy/issues/9029#issuecomment-5465212545) (`omarchy debug --no-sudo --print`)

### Steps to reproduce

1. Show an on-screen keyboard (e.g. `wvkbd-mobintl`, or SUPER+SHIFT+K with a wvkbd autostart)
2. Open the Omarchy menu (SUPER+SPACE, `omarchy menu summon`, or the bar icon)
3. Tap keys on the on-screen keyboard

### Observed

- The menu closes on the first OSK tap
- While the menu is open, OSK taps never reach the keyboard (no key highlight, no text); the OSK remains fully functional in normal windows

### Expected

- The menu stays open and OSK keystrokes type into the menu's search filter, like a physical keyboard does

### Root cause

`plugins/menu/Menu.qml` creates its full-screen layer surface with:

```qml
WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
exclusionMode: ExclusionMode.Ignore
```

Per the comment in `Ui/KeyboardPanel.qml`, Hyprland routes **every pointer event to an Exclusive-keyboard layer surface** (regardless of where the touch lands). So while the menu is open, OSK taps are delivered to the menu's own scrim (`MouseArea { onClicked: root.cancel() }`) and dismiss it. The `ExclusionMode.Ignore` additionally makes the menu overlap the OSK's reserved exclusive zone.

Instrumenting wvkbd with `-D` confirms the OSK itself emits all keystrokes correctly; delivery breaks because the pointer input is captured by the menu surface.

### Validated fix

Clone the plugin (`omarchy plugin clone omarchy.menu`) and apply two changes to `Menu.qml`:

```diff
-exclusionMode: ExclusionMode.Ignore
+exclusionMode: ExclusionMode.Auto

-WlrLayershell.keyboardFocus: WlrKeyboardFocus.Exclusive
+WlrLayershell.keyboardFocus: WlrKeyboardFocus.OnDemand
```

Verified working on GPD Pocket 4 in both orientations:

- Menu no longer overlaps the OSK's exclusive zone (also stops covering the bar)
- Menu still receives keyboard focus when it maps, so type-to-search keeps working with both physical and virtual keyboards (`wtype` and wvkbd taps verified landing in the filter)
- Tapping outside the card still dismisses the menu

### Notes

- The polkit password dialog appears to be affected by the same Exclusive-focus pattern (OSK cannot type into it), likely fixed by the same approach in its component
- The underlying Hyprland behavior (pointer events following Exclusive keyboard focus) may also be worth flagging upstream, but the config-level fix above fully resolves the user-facing problem

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

  • Related PRpr/9135· confirmed
  • Related PRpr/14720· confirmed
  • Related PRpr/13193· confirmed

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Decided by agents · verified: partly in the audited area (menu)
  • Decided by agents · verified: matches no known issue

The outcome (valid, duplicate, not a bug, …) is not decided yet.