Skip to content

Add a switch to the per-display connection row - #210

Closed
Blazetes wants to merge 4 commits into
didriksg:mainfrom
Blazetes:feature/display-connection-switch
Closed

Blazetes wants to merge 4 commits into
didriksg:mainfrom
Blazetes:feature/display-connection-switch

Conversation

@Blazetes

@Blazetes Blazetes commented Oct 7, 2026 •

Copy link
Copy Markdown

What & why

Replace the one-way Disconnect Display action with a native Display Connection switch at the same position in the display detail. Held-disconnected displays use an off-state switch to reconnect. The display header continues to expand its settings.

The controls reuse physical-disconnect and input-aware reconnect services, show failures and pending progress, and protect the last viewable physical screen. They remain hidden on Intel and Crisp virtual displays. A shared transaction gate stays held until the blocking configuration really finishes, even after the UI timeout; queued requests pin their UUID, recheck safety after DDC drains, and retain late-completion recovery state.

The physical-configuration safeguards are shared with the related batch-controls PR, #209. Both feature branches are independently buildable; after either merges, the other can be rebased to remove the shared backend portions.

How tested

  • Exact source 8570f4cc4ab9d19984c447dabbd379ef0b4212f5 passed local make check: full strict SwiftLint, unit tests, x86_64 typecheck and all 274 extracted localization keys.
  • Simplified/Traditional Chinese completeness and the full local ./scripts/release.sh v0.0.0-ci universal DMG build passed with Xcode 27.0 (27A266a) / SDK 27.0.
  • The application and CLI contain arm64/x86_64 slices; deep signature and DMG integrity checks passed.
  • Regression tests cover pending transaction exclusivity, timeout safety, actual-completion release and queued identity capture. Three-language native fixtures compile the production views against inert display services.
  • Live display switching, clamshell/sleep recovery and installed-app interaction: not run.

Checklist

  • Builds locally (./scripts/release.sh v0.0.0-ci, exact source above)
  • Added/updated Crisp/Resources/Localizable.xcstrings
  • Screenshot or short clip for UI change

Native SwiftUI fixtures, not live-monitor screenshots:

English Simplified Chinese
Per-display connection switches Per-display connection switches in Chinese

@didriksg

Copy link
Copy Markdown
Owner

I'm closing this one, but the switch is coming in another shape, in #218. It sits on the display row itself where the chevron is, behind a setting that's off by default, and it uses the existing disconnect and reconnect unchanged. A switch inside the expanded card still leaves the control one click deep, and that was the complaint in #103.

I'm leaving out the configuration gate and the late-completion handling. They change a large part of the disconnect path, which I'm keeping frozen until I have field data, and they weren't run on hardware. Reading them is how I found a real race, though: two disconnects close together could both pass the last-screen guard. #218 closes it by running connection changes one at a time.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants