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

Closed
opened 2026-10-05 16:29:04 -04:00 by jared · 2 comments
Owner

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.

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`._
jared added the priority: lowarea: trayux labels 2026-10-05 16:29:04 -04:00
Author
Owner

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.
Author
Owner

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
jared closed this issue 2026-10-19 12:16:09 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny-desktop#37