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-133GitHub issuePublicDecided· Out of scope

Dismissing the screensaver with the trackpad leaves the app underneath fullscreen (on_focus_under_fullscreen = 1 hands fullscreen to the window that gains focus)

Reported by trhiii · filed Sep 24, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

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?
AreaOutside the audited area· 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?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

Dismissing the screensaver with the trackpad leaves the app underneath fullscreen (on_focus_under_fullscreen = 1 hands fullscreen to the window that gains focus)revision 1 · captured 2026-09-28 21:23 UTC via poll

What happens

Idle until the screensaver appears, then dismiss it with a trackpad click. The screensaver goes away, but the app that was underneath it (Chrome, a terminal, anything) is now fullscreen. Super+F is needed to get back to the tiled layout. Dismissing with a keypress does not do this.

Why

default/hypr/looknfeel.lua:110 sets misc.on_focus_under_fullscreen = 1 ("take over"). In Hyprland 0.56 that option covers any focus change under a fullscreen window, not only new windows (it was new_window_takes_over_fullscreen when #2821 introduced it; Hyprland renamed and broadened it in 0.53).

The screensaver is a floating fullscreen window (default/hypr/apps/system.lua:33-34). A trackpad click while it is up moves focus to the tiled window beneath it. With "take over", that window inherits the fullscreen state. omarchy-screensaver then sees it is no longer the focused window and exits, which is its normal exit path, leaving the app fullscreen.

Evidence

Hyprland event stream (socket2) captured during two real occurrences on the same day. The pattern is identical each time: screensaver drops fullscreen, focus moves to the app, the app takes fullscreen, then the screensaver closes. The final fullscreen>>0 a few seconds later is the user pressing Super+F.

16:43:23.928 fullscreen>>0
16:43:23.930 activewindow>>,
16:43:23.934 fullscreen>>1
16:43:23.935 activewindow>>google-chrome,Inbox - Gmail - Google Chrome
16:43:24.198 closewindow>>5babd441ee10        <- org.omarchy.screensaver
16:43:26.503 fullscreen>>0                    <- manual Super+F

Steps to reproduce

Deterministic, no trackpad needed:

  1. Focus any tiled window, note its class (e.g. com.mitchellh.ghostty).
  2. omarchy-launch-screensaver force
  3. hyprctl dispatch 'hl.dsp.focus({ window = "class:com.mitchellh.ghostty" })'
  4. The screensaver exits and the window from step 1 is fullscreen (hyprctl activewindow -j shows fullscreen: 2).

With misc.on_focus_under_fullscreen = 2 (Hyprland's default), step 3 makes the screensaver exit and the window stays tiled.

What I could not pin down: which part of a physical trackpad click moves focus to the window underneath. A virtual uinput mouse (click, or motion with follow_mouse = 1) did not shift focus over the floating fullscreen screensaver, but the real trackpad did every time, per the trace above. The mechanism after the focus change is fully reproduced by step 3.

Workaround

In ~/.config/hypr/looknfeel.lua:

hl.config({ misc = { on_focus_under_fullscreen = 2 } })

Verified live: after hyprctl reload, the reproduction above leaves nothing fullscreen.

Possible fixes

  • Ship on_focus_under_fullscreen = 2. Simplest, but it changes the new-window behaviour #2821 asked for, which is the same trade-off discussed on #8751.
  • Keep the setting and make omarchy-screensaver un-fullscreen the window that took over when it exits on focus loss. The script already knows it is exiting because focus moved (screensaver_in_focus returned false), so it can check hyprctl activewindow -j | jq .fullscreen and dispatch hl.dsp.window.fullscreen_state back to 0 0. This pairs naturally with the "remember and restore the prior fullscreen state" work proposed on #10788 and #3218.

Related

  • #8751 same option, different trigger (new terminal takes over fullscreen).
  • #10788 and #3218 the opposite direction (a fullscreen app loses fullscreen when the screensaver starts).
  • #7762 discusses how the screensaver exits; the exit path via focus loss is the one involved here.

System

  • Omarchy 4.0.4-1 (Quattro), Hyprland 0.56.2
  • Terminal: Ghostty (screensaver runs in it)
  • Dell XPS 13 9305, single internal display eDP-1 1920x1080 scale 1, Intel graphics
  • Touchpad: libinput, clickfinger_behavior = false, 3-finger horizontal swipe bound to workspace

Filed by Claude Fable 5.1 via Claude Code, on behalf of the user, who reproduced the bug on their machine.

View raw text
### What happens

Idle until the screensaver appears, then dismiss it with a trackpad click. The screensaver goes away, but the app that was underneath it (Chrome, a terminal, anything) is now fullscreen. Super+F is needed to get back to the tiled layout. Dismissing with a keypress does not do this.

### Why

`default/hypr/looknfeel.lua:110` sets `misc.on_focus_under_fullscreen = 1` ("take over"). In Hyprland 0.56 that option covers any focus change under a fullscreen window, not only new windows (it was `new_window_takes_over_fullscreen` when #2821 introduced it; Hyprland renamed and broadened it in 0.53).

The screensaver is a floating fullscreen window (`default/hypr/apps/system.lua:33-34`). A trackpad click while it is up moves focus to the tiled window beneath it. With "take over", that window inherits the fullscreen state. `omarchy-screensaver` then sees it is no longer the focused window and exits, which is its normal exit path, leaving the app fullscreen.

### Evidence

Hyprland event stream (`socket2`) captured during two real occurrences on the same day. The pattern is identical each time: screensaver drops fullscreen, focus moves to the app, the app takes fullscreen, then the screensaver closes. The final `fullscreen>>0` a few seconds later is the user pressing Super+F.

```
16:43:23.928 fullscreen>>0
16:43:23.930 activewindow>>,
16:43:23.934 fullscreen>>1
16:43:23.935 activewindow>>google-chrome,Inbox - Gmail - Google Chrome
16:43:24.198 closewindow>>5babd441ee10        <- org.omarchy.screensaver
16:43:26.503 fullscreen>>0                    <- manual Super+F
```

### Steps to reproduce

Deterministic, no trackpad needed:

1. Focus any tiled window, note its class (e.g. `com.mitchellh.ghostty`).
2. `omarchy-launch-screensaver force`
3. `hyprctl dispatch 'hl.dsp.focus({ window = "class:com.mitchellh.ghostty" })'`
4. The screensaver exits and the window from step 1 is fullscreen (`hyprctl activewindow -j` shows `fullscreen: 2`).

With `misc.on_focus_under_fullscreen = 2` (Hyprland's default), step 3 makes the screensaver exit and the window stays tiled.

What I could not pin down: which part of a physical trackpad click moves focus to the window underneath. A virtual uinput mouse (click, or motion with `follow_mouse = 1`) did not shift focus over the floating fullscreen screensaver, but the real trackpad did every time, per the trace above. The mechanism after the focus change is fully reproduced by step 3.

### Workaround

In `~/.config/hypr/looknfeel.lua`:

```lua
hl.config({ misc = { on_focus_under_fullscreen = 2 } })
```

Verified live: after `hyprctl reload`, the reproduction above leaves nothing fullscreen.

### Possible fixes

- Ship `on_focus_under_fullscreen = 2`. Simplest, but it changes the new-window behaviour #2821 asked for, which is the same trade-off discussed on #8751.
- Keep the setting and make `omarchy-screensaver` un-fullscreen the window that took over when it exits on focus loss. The script already knows it is exiting because focus moved (`screensaver_in_focus` returned false), so it can check `hyprctl activewindow -j | jq .fullscreen` and dispatch `hl.dsp.window.fullscreen_state` back to `0 0`. This pairs naturally with the "remember and restore the prior fullscreen state" work proposed on #10788 and #3218.

### Related

- #8751 same option, different trigger (new terminal takes over fullscreen).
- #10788 and #3218 the opposite direction (a fullscreen app loses fullscreen when the screensaver starts).
- #7762 discusses how the screensaver exits; the exit path via focus loss is the one involved here.

### System

- Omarchy 4.0.4-1 (Quattro), Hyprland 0.56.2
- Terminal: Ghostty (screensaver runs in it)
- Dell XPS 13 9305, single internal display eDP-1 1920x1080 scale 1, Intel graphics
- Touchpad: libinput, `clickfinger_behavior = false`, 3-finger horizontal swipe bound to workspace

Filed by Claude Fable 5.1 via Claude Code, on behalf of the user, who reproduced the bug on their machine.

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

Not linked to any known issue, other report or change yet.

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.

  • Out of scopeDecided by agents · verified · 2026-10-09 18:04 UTC