Split from #879, point 2.
On macOS 15.2+ the display picked in Apple's picker does not survive an app relaunch: the HUD and Record-mode rows fall back to "Screen" and the next take asks for a source again. v1.12.0 persisted the last source (lastSource in recording-settings.json); the Apple-picker path in v2 returns early from get-selected-source ("nothing to restore"), so it is never written or restored there.
Constraint. The picker hands back an SCContentFilter, which cannot leave the process (PickerSession.swift). Rebuilding one from a saved display id goes through SCShareableContent, which needs the Screen Recording grant and triggers the system's bypass alert that the picker path avoids.
To do. Keep what the user picked visible after a relaunch without pretending the source is live, and keep Record opening the picker first when it is not.
Split from #879, point 2.
On macOS 15.2+ the display picked in Apple's picker does not survive an app relaunch: the HUD and Record-mode rows fall back to "Screen" and the next take asks for a source again. v1.12.0 persisted the last source (
lastSourceinrecording-settings.json); the Apple-picker path in v2 returns early fromget-selected-source("nothing to restore"), so it is never written or restored there.Constraint. The picker hands back an
SCContentFilter, which cannot leave the process (PickerSession.swift). Rebuilding one from a saved display id goes throughSCShareableContent, which needs the Screen Recording grant and triggers the system's bypass alert that the picker path avoids.To do. Keep what the user picked visible after a relaunch without pretending the source is live, and keep Record opening the picker first when it is not.