Skip to content

toggle feedback: converge the two pending-state models before a third appears (#597/#598 follow-up) #599

Description

@vibechoom

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-sidepanels/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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions