From ec78041069d7e8b2ab71c76a0e7f1312ed492ddb Mon Sep 17 00:00:00 2001 From: Beingpax Date: Thu, 7 Aug 2025 02:11:43 +0545 Subject: [PATCH] Fix collapse issues --- VoiceInk/Views/Recorder/MiniRecorderView.swift | 14 +++++++++++++- VoiceInk/Views/Recorder/MiniWindowManager.swift | 5 ++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/VoiceInk/Views/Recorder/MiniRecorderView.swift b/VoiceInk/Views/Recorder/MiniRecorderView.swift index 6af6868..20bdb17 100644 --- a/VoiceInk/Views/Recorder/MiniRecorderView.swift +++ b/VoiceInk/Views/Recorder/MiniRecorderView.swift @@ -10,6 +10,11 @@ struct MiniRecorderView: View { @State private var showEnhancementPromptPopover = false @State private var isHovering = false + // Computed property to check if any popover is currently showing + private var isAnyPopoverShowing: Bool { + showPowerModePopover || showEnhancementPromptPopover + } + private var backgroundView: some View { ZStack { Color.black.opacity(0.9) @@ -76,12 +81,19 @@ struct MiniRecorderView: View { windowManager.expand() } else { DispatchQueue.main.asyncAfter(deadline: .now() + 0.35) { - if !isHovering { + // Only collapse if not hovering AND no popover is showing + if !isHovering && !isAnyPopoverShowing { windowManager.collapse() } } } } + .onAppear { + // Set up the callback so WindowManager can check popover and hover state + windowManager.shouldPreventCollapse = { + isAnyPopoverShowing || isHovering + } + } } } } diff --git a/VoiceInk/Views/Recorder/MiniWindowManager.swift b/VoiceInk/Views/Recorder/MiniWindowManager.swift index 7e1c3b4..1cbe606 100644 --- a/VoiceInk/Views/Recorder/MiniWindowManager.swift +++ b/VoiceInk/Views/Recorder/MiniWindowManager.swift @@ -9,6 +9,9 @@ class MiniWindowManager: ObservableObject { private let whisperState: WhisperState private let recorder: Recorder + // Callback to check if collapse should be prevented (e.g., when popovers are showing) + var shouldPreventCollapse: (() -> Bool)? + init(whisperState: WhisperState, recorder: Recorder) { self.whisperState = whisperState self.recorder = recorder @@ -59,7 +62,7 @@ class MiniWindowManager: ObservableObject { expand() DispatchQueue.main.asyncAfter(deadline: .now() + 2.5) { - if self.isExpanded { + if self.isExpanded && !(self.shouldPreventCollapse?() ?? false) { self.collapse() } }