Repository navigation
Conversation
…ty#91) With two or more displays, WindowList carries displays (DisplayInfo, main display first, Sill's virtual displays excluded) and desktopDisplay; the Desktop button shows Desktop 1, Desktop 2, … and a tap while the Desktop streams moves to the next display via DesktopPick (encoded as {"desktop":{},"display":ID} on kind 6 so older hosts decode it as StreamSource.desktop). With one display, the button is the plain Desktop button as today (compatibility: 110 checks, 27 of 27 mutants).
Saffsanity
added a commit
that referenced
this pull request
Oct 19, 2026
The plan's open pull requests gain #173 (the same issue built separately: the pick beside the Desktop's object, the displays by ID, "Desktop 1" for a label, a pick without a display keeping the last one), and rule 5 says the displays are read again before a stopped capture's restart, as 7cc8bcc does; CLAUDE.md's entry says both and the merge of main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Saffsanity
added a commit
that referenced
this pull request
Oct 20, 2026
…exactly The plan's #173 section now says how the two differ (the pick's key beside or inside the Desktop's object, "Desktop 2" against "1 of 2", a pick without a display, a display gone, a pick during a restart, two quick taps), what backs each, and which should land: this branch, which does what Noah decided on #91 ("when there is another one it says so") and keeps devices from before on the main display. Rule 3 says a pick that named no display keeps meaning the main one through a change of the main display; the wire section says why desktopDisplay sits beside the list rather than as a flag on each entry (#66's shape). The checks README says which change brought the check. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #91.
What it does
Implements multi-display cycling on the Desktop button per Noah's design decision on #91:
"Show the full Mac desktop"), unchanged.Desktop 1,Desktop 2, …). Tapping it while a window streams switches to the Desktop on that display; tapping it while the Desktop streams moves to the next display in order (DesktopDisplays.button, VoiceOver:"Built-in Retina Display (1 of 2), showing now. Tap for Studio Display.").Sources/StreamProtocol/Switcher.swift):WindowListgains optionaldisplays: [DisplayInfo]?anddesktopDisplay: UInt32?(matching Sill Viewer: a Mac controlling another Mac #66'sDisplayInfoshape so the two do not conflict). A Desktop tap sendsDesktopPick(display: id)on kind 6 (.selectSource), which encodes as{"desktop":{},"display":ID}— an older host decodes it asStreamSource.desktopwhile a host with Feature Request: Select which Mac display Desktop mode streams #91 switchesWindowCatalog.displayto that display and restarts the Desktop stream.WindowCatalog,StreamCoordinator): lists the Mac's non-virtual displays (!isSills, sorted with the main display first soDesktop 1is always the main screen), broadcasts a freshWindowListwhen displays or the active display change, and restarts the Desktop pipeline when a device cycles to another display.Why
When a Mac has two or more monitors connected,
WindowCatalogpreviously captured only the main display for the Desktop source, with no way for an iPhone or iPad to view or control the other monitors (#91, #139). Cycling on the existing Desktop button keeps the bar layout unchanged on one-display Macs while making every connected display reachable in one tap.Checks
Tests/checks/compatibility: 110 checks (8 new forDisplayInfo,WindowList.displaysanddesktopDisplayround-trip,DesktopPickbackward-compatible encoding withStreamSource.desktop, andDesktopDisplays.buttonacross 0, 1 and 2 displays). 27 of 27 mutants caught (5 new). Updated the checks README.Tests/checks/run-all.shandswift build -c releasepass with only the known warnings; the iOS app builds for the simulator.