Follow-up from #597 / PR #598, filed so it doesn't die in a review comment.
#598 gave the Night light toggle a third state (NightlightState::Resolving) so a toggle-on parked on a location fix stops looking broken. While scoping it, the build agent checked whether that was a one-off — it isn't. Several other toggles have the same silent-wait shape, and one has already solved it a different way. Verified in source before filing.
The same shape elsewhere
| Toggle |
Entry point |
Wait |
| wallpaper |
wallpaper.rs:593 set_default / :605 set_output |
swaybg unit restart (:434) |
| keep-awake |
screensaver.rs:337 set_keep_awake |
disk write + loginctl (:431) |
| fullscreen inhibit |
fullscreen_inhibit.rs:212 set_enabled |
disk write (:219) |
| bluetooth power |
bluetooth/mod.rs:344 set_powered |
adapter D-Bus round-trip |
| power profile |
power_profiles.rs:126 set_active |
D-Bus round-trip |
Each is 2-5 seconds rather than Night light's 10, which is why none of them has produced a bug report yet. The shape is identical: fire-and-forget command, no state published until it lands, nothing on screen in between.
And one that already diverged
displays::set_output_enabled (displays.rs:112) solved its own case shell-side — panels/displays.rs:35 keeps a local Rc<RefCell<HashMap<String, bool>>> of pending intent and a 3s timeout, with the switch reading pending_state.unwrap_or(o.enabled) (:103-104).
So the tree now has two answers to one question: a service-side tri-state (#598) and a widget-local pending map (displays). That divergence is the actual thing worth resolving — not the individual toggles.
What's wanted
Pick one model and converge, rather than adding a third. Rough shapes:
I lean (a), but it's genuinely a design call about the reactive core's surface, so it wants a decision before any build.
Deliberately not done in #598
The build agent declined to generalise off two data points and said so in the PR body — correct call, and the reason this is a separate issue rather than scope creep.
Severity: low — cosmetic everywhere, and no reported symptom outside the Night light case #598 already fixed. Filed because the divergence is the kind of thing that gets more expensive the longer it sits, and because deferred work that lives only in a PR comment is lost work.
Follow-up from #597 / PR #598, filed so it doesn't die in a review comment.
#598 gave the Night light toggle a third state (
NightlightState::Resolving) so a toggle-on parked on a location fix stops looking broken. While scoping it, the build agent checked whether that was a one-off — it isn't. Several other toggles have the same silent-wait shape, and one has already solved it a different way. Verified in source before filing.The same shape elsewhere
wallpaper.rs:593set_default/:605set_outputswaybgunit restart (:434)screensaver.rs:337set_keep_awakeloginctl(:431)fullscreen_inhibit.rs:212set_enabled:219)bluetooth/mod.rs:344set_poweredpower_profiles.rs:126set_activeEach is 2-5 seconds rather than Night light's 10, which is why none of them has produced a bug report yet. The shape is identical: fire-and-forget command, no state published until it lands, nothing on screen in between.
And one that already diverged
displays::set_output_enabled(displays.rs:112) solved its own case shell-side —panels/displays.rs:35keeps a localRc<RefCell<HashMap<String, bool>>>of pending intent and a 3s timeout, with the switch readingpending_state.unwrap_or(o.enabled)(:103-104).So the tree now has two answers to one question: a service-side tri-state (#598) and a widget-local pending map (displays). That divergence is the actual thing worth resolving — not the individual toggles.
What's wanted
Pick one model and converge, rather than adding a third. Rough shapes:
hytte-reactive(aPending<T>wrapper or similar), and migratedisplaysonto it.I lean (a), but it's genuinely a design call about the reactive core's surface, so it wants a decision before any build.
Deliberately not done in #598
The build agent declined to generalise off two data points and said so in the PR body — correct call, and the reason this is a separate issue rather than scope creep.
Severity: low — cosmetic everywhere, and no reported symptom outside the Night light case #598 already fixed. Filed because the divergence is the kind of thing that gets more expensive the longer it sits, and because deferred work that lives only in a PR comment is lost work.