From 1797e722aa5453f646187ab61483f70f7e19fd1f Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Fri, 29 May 2026 04:58:31 +0800
Subject: [PATCH] Extract quick search panel
---
Apptag/ApptagApp.swift | 30 ++++++++++++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
diff --git a/Apptag/ApptagApp.swift b/Apptag/ApptagApp.swift
index 81eca50..3a5f1d7 100644
--- a/Apptag/ApptagApp.swift
+++ b/Apptag/ApptagApp.swift
@@ -54,6 +54,7 @@
private var statusItem: NSStatusItem?
private var overlayWindow: NSWindow?
private var overlayKeyMonitor: Any?
+ private var quickSearchLocalMouseMonitor: Any?
private var quickSearchExternalMouseMonitor: Any?
private var settingsWindow: NSWindow? // Track Settings window to keep it above overlay
private var mainHotkeyRef: EventHotKeyRef?
@@ -1279,6 +1280,7 @@
/// Settings must always appear centered over the current overlay view and float above it.
private func prepareSettingsWindow(_ window: NSWindow) {
+ dismissQuickSearchIfNeeded()
let settingsSize = NSSize(width: 880, height: 460)
window.identifier = NSUserInterfaceItemIdentifier("TagLauncherPreferencesWindow")
window.minSize = settingsSize
@@ -1518,6 +1520,7 @@
}
private func installQuickSearchExternalMouseMonitor() {
+ installQuickSearchLocalMouseMonitor()
guard quickSearchExternalMouseMonitor == nil else { return }
quickSearchExternalMouseMonitor = NSEvent.addGlobalMonitorForEvents(
matching: [.leftMouseDown, .rightMouseDown, .otherMouseDown]
@@ -1529,7 +1532,25 @@
}
}
+ private func installQuickSearchLocalMouseMonitor() {
+ guard quickSearchLocalMouseMonitor == nil else { return }
+ quickSearchLocalMouseMonitor = NSEvent.addLocalMonitorForEvents(
+ matching: [.leftMouseDown, .rightMouseDown, .otherMouseDown]
+ ) { [weak self] event in
+ guard let self, self.isQuickSearchOpen else { return event }
+ if event.window === self.overlayWindow {
+ NotificationCenter.default.post(name: .tagLauncherQuickSearchDismissRequested, object: nil)
+ return nil
+ }
+ return event
+ }
+ }
+
private func removeQuickSearchExternalMouseMonitor() {
+ if let quickSearchLocalMouseMonitor {
+ NSEvent.removeMonitor(quickSearchLocalMouseMonitor)
+ self.quickSearchLocalMouseMonitor = nil
+ }
if let quickSearchExternalMouseMonitor {
NSEvent.removeMonitor(quickSearchExternalMouseMonitor)
self.quickSearchExternalMouseMonitor = nil
@@ -1571,6 +1592,7 @@
}
@objc private func openPreferences(_ sender: Any? = nil) {
+ dismissQuickSearchIfNeeded()
TagDatabase.flushPendingCategorySchemeBackupBatch()
if overlayAvoidsSpaceSwitch {
refreshLauncherChromeState(activate: false, avoidSpaceSwitch: true)
@@ -1602,6 +1624,14 @@
prepareSettingsWindow(window)
}
+ private func dismissQuickSearchIfNeeded() {
+ guard isQuickSearchOpen else { return }
+ isQuickSearchOpen = false
+ removeQuickSearchExternalMouseMonitor()
+ updateOverlayLevelForTextInput()
+ NotificationCenter.default.post(name: .tagLauncherQuickSearchDismissRequested, object: nil)
+ }
+
@objc private func switchLanguage(_ sender: NSMenuItem) {
guard let code = sender.representedObject as? String else { return }
L10n.switchTo(code)
--
Gitblit v1.9.3