Expand description
The tray UI: an egui window + system tray that is a client of the
daemon (studio-worker run). See docs/runtime/daemon-and-tray.md.
The UI never runs a job: a poller mirrors the daemon’s state into a
Replica the tabs render, and the operator’s actions go back over the
local API. When no daemon runs, the poller starts one.
Gated behind the ui cargo feature so headless installs and the
service path don’t pull in egui / eframe / the tray backends.
Modules§
- actions
- Carries the operator’s clicks to the daemon off the UI thread, and keeps the one-line result the status line shows.
- app
- The eframe
App: a client of the daemon. It renders theReplicathe poller keeps fresh and sends the operator’s actions through theActionRunner; it never runs a job itself. - notifier
- OS-native desktop notifications gated on per-event toggles.
- tab
- The tabs the UI exposes. Pure data + tiny enum impl so the contract is testable without egui in scope.
- tabs
- Per-tab modules. Each module exposes a pure-data view model
(testable without egui) and a thin
renderfunction that draws the view model into anegui::Ui. - tray
- Tray icon state + menu factory (pure data). The per-OS tray
construction lives in
super::tray_host(ksnion Linux,tray-iconon macOS / Windows); this module keeps the logic that decides what the tray looks like (icon variant, menu labels, ARGB byte order) free of any platform types so it stays unit-testable. - tray_
host - Cross-platform system-tray host.
Constants§
- DISPLAY_
ATTEMPT_ ENV - Carries the display-retry attempt across the restart in place.
- DISPLAY_
RETRY_ BASE - First wait before retrying the display, doubled per attempt.
- DISPLAY_
RETRY_ MAX - Longest wait between display attempts.
Functions§
- display_
attempt - The display attempt this process is, from
DISPLAY_ATTEMPT_ENV. - display_
retry_ delay - How long to wait before display attempt
attempt + 1. - log_
display_ wait - Log a failed display attempt and answer how long to wait.
- run
- Entry point for
studio-worker ui.