From cf4a1ad4dbc8f4a3f61a0a1a32f63d31c3562b27 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Thu, 02 Jul 2026 03:07:40 +0800
Subject: [PATCH] Record TagLauncher 8.3.2 release freeze

---
 src/Apptag/ApptagApp.swift |   38 +++++++++++++++++++++++++++++---------
 1 files changed, 29 insertions(+), 9 deletions(-)

diff --git a/src/Apptag/ApptagApp.swift b/src/Apptag/ApptagApp.swift
index 8ce54cd..2ef8916 100644
--- a/src/Apptag/ApptagApp.swift
+++ b/src/Apptag/ApptagApp.swift
@@ -34,6 +34,8 @@
 }
 
 final class AppDelegate: NSObject, NSApplicationDelegate, NSMenuDelegate {
+    static private(set) weak var shared: AppDelegate?
+
     private static let showDockIconKey = "showDockIcon"
     private static let statusItemAutosaveName = AppIdentity.statusItemAutosaveName
     private static let statusItemButtonIdentifier = NSUserInterfaceItemIdentifier("TagLauncherStatusItemButton")
@@ -63,6 +65,7 @@
     private var quickSearchHotkeyRef: EventHotKeyRef?
     private var overlaySpaceHotkeyRef: EventHotKeyRef?
     private var hotkeyEventHandlerInstalled = false
+    private var configuredHotkeysSuspendedForRecording = false
     private var isQuickSearchOpen = false
     private var quickSearchShouldHideOverlayOnClose = false
     private var quickSearchOnlyOverlaySession = false
@@ -77,6 +80,11 @@
     private var overlayOpenedByQuickSearchOnly = false
     private var didFinishLaunching = false
     private var pendingShowOverlayInvocation = false
+
+    override init() {
+        super.init()
+        Self.shared = self
+    }
 
     private lazy var overlayController = OverlayWindowController(
         dependencies: OverlayWindowController.Dependencies(
@@ -1273,9 +1281,23 @@
     // MARK: - Global Hotkeys
 
     private func registerConfiguredHotkeys() {
+        guard !configuredHotkeysSuspendedForRecording else { return }
         installHotkeyEventHandlerIfNeeded()
         registerEffectiveHotkey(.main)
         registerEffectiveHotkey(.quickSearch)
+    }
+
+    func suspendConfiguredHotkeysForRecording() {
+        guard !configuredHotkeysSuspendedForRecording else { return }
+        configuredHotkeysSuspendedForRecording = true
+        unregisterHotkey(for: .main)
+        unregisterHotkey(for: .quickSearch)
+    }
+
+    func resumeConfiguredHotkeysAfterRecording() {
+        guard configuredHotkeysSuspendedForRecording else { return }
+        configuredHotkeysSuspendedForRecording = false
+        registerConfiguredHotkeys()
     }
 
     private func registerEffectiveHotkey(_ kind: LauncherHotkeyKind) {
@@ -1918,12 +1940,7 @@
         ) { [weak self] event in
             guard let self, self.isQuickSearchOpen else { return event }
             if event.window === self.overlayWindow {
-                NotificationCenter.default.post(
-                    name: .tagLauncherQuickSearchDismissRequested,
-                    object: nil,
-                    userInfo: ["source": QuickSearchDismissSource.mouse]
-                )
-                return nil
+                return event
             }
             return event
         }
@@ -1986,7 +2003,7 @@
     }
 
     @objc private func openProStatusFromStatusMenu(_ sender: NSMenuItem) {
-        openPreferences(targetTab: SettingsTabTarget.about)
+        openPreferences(targetTab: SettingsTabTarget.pro)
     }
 
     private func openPreferences(targetTab: String?) {
@@ -2152,12 +2169,15 @@
         // NSHostingView.hitTest may return a SwiftUI-internal wrapper — the
         // actual AppKit subview may be nested deeper.
         if let container = findTextFieldContainer(in: hit) {
-            container.mouseDown(with: event)
+            container.focusTextField()
             return
         }
         if let tf = findNSTextField(in: hit) {
+            let shouldSelectAll = tf.currentEditor() == nil
             tf.window?.makeFirstResponder(tf)
-            tf.mouseDown(with: event)
+            if shouldSelectAll {
+                tf.selectText(nil)
+            }
             return
         }
         super.mouseDown(with: event)

--
Gitblit v1.9.3