Skip to content

Desktop tray: server-runner menu + native About dialog (Linux/Windows/macOS) #159

Description

@jdmanring

Summary

Extend the native desktop wrappers' system tray / menu-bar item from the minimal
Open / Close-to-tray / Quit set to the server-runner menu convention shared by
Docker Desktop, Tailscale, Syncthing, and Ollama — Odysseus runs a local server you
keep resident, so it should be controllable from the tray — and add a native
About dialog.

Builds on the existing feat/qt-native-{linux,macos,windows}-app branches.

Tray menu (all three OSes)

  • Live status line (● Running — host:port / ○ Stopped)
  • Open in Browser / Copy Server URL (resolve the real LAN IP when exposed)
  • Settings… / Shortcut Keys… (drive the app's own settings modal / shortcuts tab)
  • Expose to Network — persisted toggle that rebinds the server to 0.0.0.0;
    enabling is gated behind a confirmation (security posture change)
  • View Logs / Restart Server (restart runs off the GUI thread)
  • Existing Close-to-tray (Win/Linux), README, About, Quit

About dialog

Icon, name, version (read live from src/constants.py), copyright, the AGPL-3.0 §5
no-warranty notice, and clickable license / GitHub / issue links.

Platform notes

  • Linux/Windows: QSystemTrayIcon + QMenu, refreshed on aboutToShow.
  • macOS: rendered by a separate rumps helper process (Qt can't render an
    NSStatusItem on Tahoe); helper ↔ wrapper over an AF_UNIX socket — one-word
    verbs for actions, a periodic status query drives the live status line.

Docs: docs/dev/desktop-wrappers.md.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions