Skip to content

Commit 58ae558

Browse files
fellanHsteipete
authored andcommitted
macOS: fix VoiceWakeOverlayController exclusivity violation #39275
1 parent eebee84 commit 58ae558

File tree

4 files changed

+11
-6
lines changed

4 files changed

+11
-6
lines changed

apps/macos/Sources/OpenClaw/NotifyOverlay.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,11 @@ final class NotifyOverlayController {
6161
self.ensureWindow()
6262
self.hostingView?.rootView = NotifyOverlayView(controller: self)
6363
let target = self.targetFrame()
64+
let isFirst = !self.model.isVisible
65+
if isFirst { self.model.isVisible = true }
6466
OverlayPanelFactory.present(
6567
window: self.window,
66-
isVisible: &self.model.isVisible,
68+
isFirstPresent: isFirst,
6769
target: target)
6870
{ window in
6971
self.updateWindowFrame(animate: true)

apps/macos/Sources/OpenClaw/OverlayPanelFactory.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,15 +64,14 @@ enum OverlayPanelFactory {
6464
@MainActor
6565
static func present(
6666
window: NSWindow?,
67-
isVisible: inout Bool,
67+
isFirstPresent: Bool,
6868
target: NSRect,
6969
startOffsetY: CGFloat = -6,
7070
onFirstPresent: (() -> Void)? = nil,
7171
onAlreadyVisible: (NSWindow) -> Void)
7272
{
7373
guard let window else { return }
74-
if !isVisible {
75-
isVisible = true
74+
if isFirstPresent {
7675
onFirstPresent?()
7776
let start = target.offsetBy(dx: 0, dy: startOffsetY)
7877
self.animatePresent(window: window, from: start, to: target)

apps/macos/Sources/OpenClaw/TalkOverlay.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ final class TalkOverlayController {
3030
self.ensureWindow()
3131
self.hostingView?.rootView = TalkOverlayView(controller: self)
3232
let target = self.targetFrame()
33+
let isFirst = !self.model.isVisible
34+
if isFirst { self.model.isVisible = true }
3335
OverlayPanelFactory.present(
3436
window: self.window,
35-
isVisible: &self.model.isVisible,
37+
isFirstPresent: isFirst,
3638
target: target)
3739
{ window in
3840
window.setFrame(target, display: true)

apps/macos/Sources/OpenClaw/VoiceWakeOverlayController+Window.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@ extension VoiceWakeOverlayController {
1313
self.ensureWindow()
1414
self.hostingView?.rootView = VoiceWakeOverlayView(controller: self)
1515
let target = self.targetFrame()
16+
let isFirst = !self.model.isVisible
17+
if isFirst { self.model.isVisible = true }
1618
OverlayPanelFactory.present(
1719
window: self.window,
18-
isVisible: &self.model.isVisible,
20+
isFirstPresent: isFirst,
1921
target: target,
2022
onFirstPresent: {
2123
self.logger.log(

0 commit comments

Comments
 (0)