Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA 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.
Tray: right-click on Wine apps (Battle.net) shows empty menu / nothing — needs quickshell 0.3.2 + ContextMenu fallback
Reported by 88srzh · filed Oct 11, 2026 · open at source · 2 revisions
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
System details
- Omarchy 4.0.4-1, quickshell 0.3.1-1 (from
stable-mirror.omarchy.org, extra snapshot of 2026-09-08) - Hyprland 0.56.2
- CPU: Intel Core Ultra 5 125H, GPU: Intel Arc (Meteor Lake-P)
What's wrong
Right-clicking the tray icon of a Wine/Proton app (here Battle.net, launched via omarchy-launch-battlenet / umu + GE-Proton) opens an empty tray menu card. The app's own context menu (Exit, Log Out, …) never appears, so the app can't be quit from the tray.
Wine's StatusNotifierItem sets Menu = /NO_DBUSMENU, meaning "no dbusmenu, call ContextMenu(x, y) instead". quickshell 0.3.1 treats any non-empty menu path as a real dbusmenu, so item.menu is non-null, Tray.qml opens its own popup, and the layout fetch fails:
WARN quickshell.dbus.dbusmenu: Error updating layout for menu 0 of DBusMenu(…, ":1.214/NO_DBUSMENU/com.canonical.dbusmenu") QDBusError("org.freedesktop.DBus.Error.UnknownMethod", "Method \"GetLayout\" with signature \"iias\" on interface \"com.canonical.dbusmenu\" doesn't exist\n")Calling the item's ContextMenu directly shows the native Battle.net menu correctly:
busctl --user call <sni-bus-name> /StatusNotifierItem org.kde.StatusNotifierItem ContextMenu ii 1800 10Fix
Two parts:
- quickshell 0.3.2 (quickshell-mirror/quickshell#999, commit 39e14d3 "service/tray: support /NO_DBUSMENU as a marker for absence of a menu"). Arch
extrahas shippedquickshell 0.3.2-1since 2026-10-08, but the Omarchy stable mirror still serves 0.3.1. With 0.3.2item.menuis null for these items (note:item.hasMenustill reportstrue), so the empty card is gone. - `Tray.qml` still needs a fallback. With 0.3.2 the existing
item.display(...)path only logsERROR: No menu present for qs::service::sni::StatusNotifierItem(...):display()only renders dbusmenus and never callsContextMenu, and Quickshell doesn't exposeContextMenuto QML. So right-click now does nothing at all.
Workaround I'm running locally (cloned omarchy.tray): when !item.menu, call ContextMenu over D-Bus via a small helper that finds the item by Id on the watcher:
if (!item.menu) {
var screen = anchorItem.QsWindow.window.screen
var scale = screen ? screen.devicePixelRatio : 1
var x = Math.round(((screen ? screen.x : 0) + point.x) * scale)
var y = Math.round(((screen ? screen.y : 0) + point.y) * scale)
Quickshell.execDetached([helper, String(item.id), String(x), String(y)])
return
}# helper: tray-context-menu <item-id> <x> <y>
busctl --user --json=short get-property org.kde.StatusNotifierWatcher /StatusNotifierWatcher \
org.kde.StatusNotifierWatcher RegisteredStatusNotifierItems | jq -r '.data[]' |
while IFS= read -r entry; do
service=${entry%%/*}; path=/${entry#*/}
[[ $(busctl --user --json=short get-property "$service" "$path" org.kde.StatusNotifierItem Id | jq -r .data) == "$1" ]] &&
exec busctl --user call "$service" "$path" org.kde.StatusNotifierItem ContextMenu ii "$2" "$3"
doneWith that, right-click opens Battle.net's native menu (Exit, Log Out, …). Popup placement is up to Wine/XWayland and isn't always next to the tray icon.
Steps to reproduce
omarchy install/ launch Battle.net (or any Wine app with a tray icon)- Right-click its tray icon in the bar
- An empty menu card appears; no way to reach Exit
View raw text
### System details
- Omarchy 4.0.4-1, quickshell 0.3.1-1 (from `stable-mirror.omarchy.org`, extra snapshot of 2026-09-08)
- Hyprland 0.56.2
- CPU: Intel Core Ultra 5 125H, GPU: Intel Arc (Meteor Lake-P)
### What's wrong
Right-clicking the tray icon of a Wine/Proton app (here Battle.net, launched via `omarchy-launch-battlenet` / umu + GE-Proton) opens an **empty** tray menu card. The app's own context menu (Exit, Log Out, …) never appears, so the app can't be quit from the tray.
Wine's StatusNotifierItem sets `Menu = /NO_DBUSMENU`, meaning "no dbusmenu, call `ContextMenu(x, y)` instead". quickshell 0.3.1 treats any non-empty menu path as a real dbusmenu, so `item.menu` is non-null, `Tray.qml` opens its own popup, and the layout fetch fails:
```
WARN quickshell.dbus.dbusmenu: Error updating layout for menu 0 of DBusMenu(…, ":1.214/NO_DBUSMENU/com.canonical.dbusmenu") QDBusError("org.freedesktop.DBus.Error.UnknownMethod", "Method \"GetLayout\" with signature \"iias\" on interface \"com.canonical.dbusmenu\" doesn't exist\n")
```
Calling the item's `ContextMenu` directly shows the native Battle.net menu correctly:
```
busctl --user call <sni-bus-name> /StatusNotifierItem org.kde.StatusNotifierItem ContextMenu ii 1800 10
```
### Fix
Two parts:
1. **quickshell 0.3.2** (quickshell-mirror/quickshell#999, commit 39e14d3 "service/tray: support /NO_DBUSMENU as a marker for absence of a menu"). Arch `extra` has shipped `quickshell 0.3.2-1` since 2026-10-08, but the Omarchy stable mirror still serves 0.3.1. With 0.3.2 `item.menu` is null for these items (note: `item.hasMenu` still reports `true`), so the empty card is gone.
2. **`Tray.qml` still needs a fallback.** With 0.3.2 the existing `item.display(...)` path only logs `ERROR: No menu present for qs::service::sni::StatusNotifierItem(...)`: `display()` only renders dbusmenus and never calls `ContextMenu`, and Quickshell doesn't expose `ContextMenu` to QML. So right-click now does nothing at all.
Workaround I'm running locally (cloned `omarchy.tray`): when `!item.menu`, call `ContextMenu` over D-Bus via a small helper that finds the item by `Id` on the watcher:
```qml
if (!item.menu) {
var screen = anchorItem.QsWindow.window.screen
var scale = screen ? screen.devicePixelRatio : 1
var x = Math.round(((screen ? screen.x : 0) + point.x) * scale)
var y = Math.round(((screen ? screen.y : 0) + point.y) * scale)
Quickshell.execDetached([helper, String(item.id), String(x), String(y)])
return
}
```
```bash
# helper: tray-context-menu <item-id> <x> <y>
busctl --user --json=short get-property org.kde.StatusNotifierWatcher /StatusNotifierWatcher \
org.kde.StatusNotifierWatcher RegisteredStatusNotifierItems | jq -r '.data[]' |
while IFS= read -r entry; do
service=${entry%%/*}; path=/${entry#*/}
[[ $(busctl --user --json=short get-property "$service" "$path" org.kde.StatusNotifierItem Id | jq -r .data) == "$1" ]] &&
exec busctl --user call "$service" "$path" org.kde.StatusNotifierItem ContextMenu ii "$2" "$3"
done
```
With that, right-click opens Battle.net's native menu (Exit, Log Out, …). Popup placement is up to Wine/XWayland and isn't always next to the tray icon.
### Steps to reproduce
1. `omarchy install` / launch Battle.net (or any Wine app with a tray icon)
2. Right-click its tray icon in the bar
3. An empty menu card appears; no way to reach Exit
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-11 18:27 UTC
- Out of scopeDecided by agents · verified · 2026-10-11 18:09 UTC · withdrawn · on an older revision