ui: frost playback titles and hide chrome on pointer exit

This commit is contained in:
2026-10-12 13:30:29 +02:00
parent 0ed35b4a58
commit 93acc1436a
3 changed files with 79 additions and 21 deletions
+24
View File
@@ -68,11 +68,35 @@ struct SystemPlaybackChecks {
require(!model.canPerform(.enterCompact), "empty playback does not enable compact entry")
model.open(directory.appendingPathComponent("av.mp4"))
if !NSWorkspace.shared.isVoiceOverEnabled {
model.setPointerInsideWindow(false)
require(!model.controlsVisible, "pointer exit hides playback chrome while media is loading")
model.setPointerInsideWindow(true)
}
until("open starts authoritative playback") { model.canTogglePlayback && model.state.status == PLAYER_PLAYING }
require(center.playbackState == .playing, "playing publishes macOS playback ownership")
require(model.setPlayback(playing: false), "explicit pause accepted")
until("pause acknowledged") { model.state.status == PLAYER_PAUSED }
let pausedPosition = model.state.position
if !NSWorkspace.shared.isVoiceOverEnabled {
model.setControlsHovered(true)
model.setTitleHovered(true)
model.setPointerInsideWindow(false)
require(!model.controlsVisible,
"pointer exit hides paused playback chrome despite stale hover and inactive window")
model.setControlsHovered(false)
model.setTitleHovered(false)
model.updateWindowState()
require(!model.controlsVisible,
"late hover/focus updates cannot reshow chrome while the pointer is outside")
model.revealControls(forKeyboardNavigation: true)
model.revealControls()
require(model.controlsVisible, "Tab navigation can reveal controls without moving the pointer")
model.setPointerInsideWindow(false)
require(!model.controlsVisible, "another pointer exit dismisses keyboard-revealed controls")
model.setPointerInsideWindow(true)
require(model.controlsVisible, "pointer reentry reveals paused playback chrome")
}
require(model.setPlayback(playing: false), "repeated pause accepted")
until("idempotent pause does not restart playback") {
model.state.status == PLAYER_PAUSED && center.playbackState == .paused