From 46fba4c832b64bbbd3cd06531dce5bbd10f95c52 Mon Sep 17 00:00:00 2001 From: Vincent <0426vincent@gmail.com> Date: Tue, 24 Feb 2026 13:36:20 -0800 Subject: [PATCH] fix: prevent double dismiss of Quick Input panel on submit Add isDismissing guard to prevent re-entrant dismiss calls when showMainWindow causes the panel to resign key while the onSubmit closure also calls dismiss explicitly. Co-Authored-By: Claude --- .../Features/QuickInput/QuickInputWindow.swift | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/clients/macos/vellum-assistant/Features/QuickInput/QuickInputWindow.swift b/clients/macos/vellum-assistant/Features/QuickInput/QuickInputWindow.swift index 3e833c385e6..572dc9338b3 100644 --- a/clients/macos/vellum-assistant/Features/QuickInput/QuickInputWindow.swift +++ b/clients/macos/vellum-assistant/Features/QuickInput/QuickInputWindow.swift @@ -17,6 +17,7 @@ final class QuickInputWindow { private var panel: NSPanel? private var resignObserver: Any? private var previousApp: NSRunningApplication? + private var isDismissing = false /// Callback invoked when the user submits a message. var onSubmit: ((String) -> Void)? @@ -91,12 +92,18 @@ final class QuickInputWindow { } func dismiss(restorePreviousApp: Bool = true) { + guard !isDismissing else { return } + isDismissing = true + if let resignObserver { NotificationCenter.default.removeObserver(resignObserver) } resignObserver = nil - guard let panel else { return } + guard let panel else { + isDismissing = false + return + } let appToRestore = restorePreviousApp ? previousApp : nil previousApp = nil @@ -108,6 +115,7 @@ final class QuickInputWindow { }, completionHandler: { [weak self] in panel.close() self?.panel = nil + self?.isDismissing = false appToRestore?.activate() }) }