12df1388de
ci / web (pull_request) Successful in 53s
ci / docs-site (pull_request) Successful in 53s
apple / swift (pull_request) Successful in 1m21s
apple / screenshots (pull_request) Has been skipped
windows / build (aarch64-pc-windows-msvc) (pull_request) Successful in 4m15s
ci / bench (pull_request) Successful in 5m35s
windows / build (x86_64-pc-windows-msvc) (pull_request) Successful in 1m40s
android / android (pull_request) Successful in 11m14s
ci / rust (pull_request) Successful in 21m49s
Folds the parked client-side-cursor machinery (cursorMode auto/always/ never, hidden while disabled) into the cross-client mouse model: MouseInputMode capture|desktop under DefaultsKey.mouseMode, picked in Settings ▸ Keyboard & mouse (macOS), resolved at session start and gated off on gamescope hosts (relative-only EIS). Desktop model = the un-neutered absolute path with the SDL cursor policy: pointer never disassociated (enters/leaves the stream freely), monitor forwards letterboxed absolute positions, and the local cursor hides only while over the view via an invisible-cursor rect (the host's composited cursor is the one you see; AppKit manages the rect, so no hide/unhide balancing). ⌘⇧C becomes ⌃⌥⇧M — the same chord as the SDL clients — flipping the model live with an atomic release/re-engage. Verified: swift build + full test suites green (macOS arm64). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
13 lines
734 B
Swift
13 lines
734 B
Swift
/// How a physical mouse drives the host — the cross-client mouse model (the SDL clients'
|
|
/// `MouseMode` / `Settings::mouse_mode`, design/remote-desktop-sweep.md M1). Stored stringly
|
|
/// under `DefaultsKey.mouseMode`.
|
|
public enum MouseInputMode: String, CaseIterable, Sendable {
|
|
/// Pointer capture (disassociated, hidden cursor, relative deltas) — the game model,
|
|
/// and the default: the only cursor you see is the host's.
|
|
case capture
|
|
/// Absolute pointer, uncaptured: the cursor enters and leaves the stream freely and
|
|
/// motion is forwarded as absolute positions through the letterbox. The remote desktop
|
|
/// model. Requires a host injector with absolute support (not gamescope).
|
|
case desktop
|
|
}
|