Linux without a tray host (stock GNOME): first-close dialog defaults to "Keep running in the tray", which hides the app with no tray icon to bring it back
#37
Tested with the Linux nightly (4.12.377) under Xvfb with no StatusNotifier host on the session bus. That is the situation on stock GNOME (Fedora, Debian, and Ubuntu with the AppIndicator extension disabled), where tray icons aren't shown at all.
Close the window (via plugin:window|close, which is what the WM's ✕ does). The first-close dialog (cinny 359c79a4) appears: "Keep Lotus Chat running? … Open it again from the tray icon.", with Keep running in the tray focused as the default.
Accept the default. The window is hidden (is_visible: false), no tray icon exists, and tray is saved, so every later close does the same.
The only way back is to launch Lotus Chat again. The single-instance plugin then shows the hidden window (is_visible: true after a second launch ✔), but nothing tells the user that; the dialog points at a tray icon that isn't there.
handle_close_request also sends the window to the tray during a call. That's moot on Linux today (no WebRTC), but it matters once calls work there.
Fix:
On Linux, check for a tray host before offering the tray: org.kde.StatusNotifierWatcher on the session bus (dbus crate, or zbusNameHasOwner). Without one:
default the dialog to Quit;
word the tray option "Keep running in the background (reopen by launching Lotus Chat again)";
or hide the option.
Settings → General → "When I close the window" could show the same hint.
Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny 30e2dbcd, cinny-desktop 8f67ec7, element-call 3b0050e8.
Tested with the Linux nightly (4.12.377) under Xvfb with **no StatusNotifier host on the session bus**. That is the situation on stock GNOME (Fedora, Debian, and Ubuntu with the AppIndicator extension disabled), where tray icons aren't shown at all.
1. Close the window (via `plugin:window|close`, which is what the WM's ✕ does). The first-close dialog (cinny 359c79a4) appears: **"Keep Lotus Chat running? … Open it again from the tray icon."**, with **Keep running in the tray** focused as the default.
2. Accept the default. The window is hidden (`is_visible: false`), no tray icon exists, and `tray` is saved, so every later close does the same.
3. The only way back is to launch Lotus Chat again. The single-instance plugin then shows the hidden window (`is_visible: true` after a second launch ✔), but nothing tells the user that; the dialog points at a tray icon that isn't there.
`handle_close_request` also sends the window to the tray during a call. That's moot on Linux today (no WebRTC), but it matters once calls work there.
**Fix:**
- On Linux, check for a tray host before offering the tray: `org.kde.StatusNotifierWatcher` on the session bus (`dbus` crate, or `zbus` `NameHasOwner`). Without one:
- default the dialog to **Quit**;
- word the tray option "Keep running in the background (reopen by launching Lotus Chat again)";
- or hide the option.
- Settings → General → "When I close the window" could show the same hint.
---
_Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny `30e2dbcd`, cinny-desktop `8f67ec7`, element-call `3b0050e8`._
Same blind spot in Start minimized (cinny-desktop #3, lib.rs:1175): a launch-on-login start with the option on keeps the window hidden "until the tray icon, a second launch or a deep link reveals it". Without a tray host the app runs invisibly after every login until the user happens to launch it again. The same StatusNotifierWatcher check could ignore Start minimized, or grey it out with an explanation, when no tray is available.
Same blind spot in **Start minimized** (cinny-desktop #3, `lib.rs:1175`): a launch-on-login start with the option on keeps the window hidden "until the tray icon, a second launch or a deep link reveals it". Without a tray host the app runs invisibly after every login until the user happens to launch it again. The same `StatusNotifierWatcher` check could ignore Start minimized, or grey it out with an explanation, when no tray is available.
Done: #40 (has_tray_host) + cinny#416. With no tray host, the first-close dialog defaults to Quit and says the app can only be reopened by launching it again.
🤖 Claude Code
Done: #40 (`has_tray_host`) + cinny#416. With no tray host, the first-close dialog defaults to Quit and says the app can only be reopened by launching it again.
🤖 Claude Code
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Tested with the Linux nightly (4.12.377) under Xvfb with no StatusNotifier host on the session bus. That is the situation on stock GNOME (Fedora, Debian, and Ubuntu with the AppIndicator extension disabled), where tray icons aren't shown at all.
plugin:window|close, which is what the WM's ✕ does). The first-close dialog (cinny 359c79a4) appears: "Keep Lotus Chat running? … Open it again from the tray icon.", with Keep running in the tray focused as the default.is_visible: false), no tray icon exists, andtrayis saved, so every later close does the same.is_visible: trueafter a second launch ✔), but nothing tells the user that; the dialog points at a tray icon that isn't there.handle_close_requestalso sends the window to the tray during a call. That's moot on Linux today (no WebRTC), but it matters once calls work there.Fix:
org.kde.StatusNotifierWatcheron the session bus (dbuscrate, orzbusNameHasOwner). Without one:Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny
30e2dbcd, cinny-desktop8f67ec7, element-call3b0050e8.Same blind spot in Start minimized (cinny-desktop #3,
lib.rs:1175): a launch-on-login start with the option on keeps the window hidden "until the tray icon, a second launch or a deep link reveals it". Without a tray host the app runs invisibly after every login until the user happens to launch it again. The sameStatusNotifierWatchercheck could ignore Start minimized, or grey it out with an explanation, when no tray is available.Done: #40 (
has_tray_host) + cinny#416. With no tray host, the first-close dialog defaults to Quit and says the app can only be reopened by launching it again.🤖 Claude Code