macOS: fix VoiceWakeOverlayController exclusivity violation #39275

This commit is contained in:
Felix Hellström
2026-03-08 02:00:46 +01:00
committed by Peter Steinberger
parent eebee84093
commit 58ae5582f4
4 changed files with 11 additions and 6 deletions

View File

@@ -61,9 +61,11 @@ final class NotifyOverlayController {
self.ensureWindow()
self.hostingView?.rootView = NotifyOverlayView(controller: self)
let target = self.targetFrame()
let isFirst = !self.model.isVisible
if isFirst { self.model.isVisible = true }
OverlayPanelFactory.present(
window: self.window,
isVisible: &self.model.isVisible,
isFirstPresent: isFirst,
target: target)
{ window in
self.updateWindowFrame(animate: true)

View File

@@ -64,15 +64,14 @@ enum OverlayPanelFactory {
@MainActor
static func present(
window: NSWindow?,
isVisible: inout Bool,
isFirstPresent: Bool,
target: NSRect,
startOffsetY: CGFloat = -6,
onFirstPresent: (() -> Void)? = nil,
onAlreadyVisible: (NSWindow) -> Void)
{
guard let window else { return }
if !isVisible {
isVisible = true
if isFirstPresent {
onFirstPresent?()
let start = target.offsetBy(dx: 0, dy: startOffsetY)
self.animatePresent(window: window, from: start, to: target)

View File

@@ -30,9 +30,11 @@ final class TalkOverlayController {
self.ensureWindow()
self.hostingView?.rootView = TalkOverlayView(controller: self)
let target = self.targetFrame()
let isFirst = !self.model.isVisible
if isFirst { self.model.isVisible = true }
OverlayPanelFactory.present(
window: self.window,
isVisible: &self.model.isVisible,
isFirstPresent: isFirst,
target: target)
{ window in
window.setFrame(target, display: true)

View File

@@ -13,9 +13,11 @@ extension VoiceWakeOverlayController {
self.ensureWindow()
self.hostingView?.rootView = VoiceWakeOverlayView(controller: self)
let target = self.targetFrame()
let isFirst = !self.model.isVisible
if isFirst { self.model.isVisible = true }
OverlayPanelFactory.present(
window: self.window,
isVisible: &self.model.isVisible,
isFirstPresent: isFirst,
target: target,
onFirstPresent: {
self.logger.log(