From 2ed5586d3c48d78c4dc9ad1ef00b2e47f7238915 Mon Sep 17 00:00:00 2001
From: Ariver <shanghai3168@gmail.com>
Date: Sat, 30 May 2026 17:34:47 +0800
Subject: [PATCH] Prepare 7.8.4 quick search toggle release
---
Release/AppStore-7.8.4-20260530.1727/QA_RELEASE_EVIDENCE.md | 34 +++++++++++
Apptag/ApptagApp.swift | 39 +++++++-----
Release/AppStore-7.8.4-20260530.1727/README.md | 26 ++++++++
Apptag/Info.plist | 4
Release/AppStore-7.8.4-20260530.1727/APP_STORE_ASSET_INVENTORY.md | 17 +++++
CHANGELOG.md | 6 ++
Release/AppStore-7.8.4-20260530.1727/Archive/TagLauncher-7.8.4-20260530.1727-local-QA.dmg | 0
7 files changed, 107 insertions(+), 19 deletions(-)
diff --git a/Apptag/ApptagApp.swift b/Apptag/ApptagApp.swift
index 6f4c0b3..6b7c698 100644
--- a/Apptag/ApptagApp.swift
+++ b/Apptag/ApptagApp.swift
@@ -900,18 +900,7 @@
private func handleOverlayEscapeKey() -> Bool {
if isQuickSearchOpen || quickSearchOnlyOverlaySession {
- let shouldHideOverlayAfterDismiss = quickSearchShouldHideOverlayOnClose || quickSearchOnlyOverlaySession
- isQuickSearchOpen = false
- removeQuickSearchExternalMouseMonitor()
- updateOverlayLevelForTextInput()
- NotificationCenter.default.post(name: .tagLauncherQuickSearchDismissRequested, object: nil)
- if shouldHideOverlayAfterDismiss {
- quickSearchShouldHideOverlayOnClose = false
- quickSearchOnlyOverlaySession = false
- DispatchQueue.main.async { [weak self] in
- self?.hideOverlay(force: true)
- }
- }
+ dismissQuickSearchFromKeyboard()
return true
}
guard !isSettingsVisible,
@@ -920,6 +909,21 @@
else { return false }
hideOverlay(force: true)
return true
+ }
+
+ private func dismissQuickSearchFromKeyboard() {
+ let shouldHideOverlayAfterDismiss = quickSearchShouldHideOverlayOnClose || quickSearchOnlyOverlaySession
+ isQuickSearchOpen = false
+ removeQuickSearchExternalMouseMonitor()
+ updateOverlayLevelForTextInput()
+ NotificationCenter.default.post(name: .tagLauncherQuickSearchDismissRequested, object: nil)
+ if shouldHideOverlayAfterDismiss {
+ quickSearchShouldHideOverlayOnClose = false
+ quickSearchOnlyOverlaySession = false
+ DispatchQueue.main.async { [weak self] in
+ self?.hideOverlay(force: true)
+ }
+ }
}
private func requestQuickSearch(source: String) {
@@ -1072,6 +1076,12 @@
private func showQuickSearchFromGlobalHotkey() {
let now = Date()
+ if overlayWindow?.isVisible == true, isQuickSearchOpen || quickSearchOnlyOverlaySession {
+ lastQuickSearchHotkeyAt = now
+ dismissQuickSearchFromKeyboard()
+ return
+ }
+
if now.timeIntervalSince(lastQuickSearchHotkeyAt) < 0.28 {
promoteOverlayToForegroundInput()
updateOverlayLevelForTextInput()
@@ -1079,11 +1089,6 @@
}
lastQuickSearchHotkeyAt = now
- if overlayWindow?.isVisible == true, isQuickSearchOpen || quickSearchOnlyOverlaySession {
- promoteOverlayToForegroundInput()
- updateOverlayLevelForTextInput()
- return
- }
if overlayWindow?.isVisible == true {
refreshLauncherChromeState(
activate: !overlayAvoidsSpaceSwitch,
diff --git a/Apptag/Info.plist b/Apptag/Info.plist
index 30a4d14..831eaef 100644
--- a/Apptag/Info.plist
+++ b/Apptag/Info.plist
@@ -19,9 +19,9 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
- <string>7.8.3</string>
+ <string>7.8.4</string>
<key>CFBundleVersion</key>
- <string>20260530.1652</string>
+ <string>20260530.1727</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e002bc9..ff2b069 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# TagLauncher Changelog
+## [7.8.4] — 2026-05-30
+
+- 修复全局 `Fn + Space` Quick Search 快捷键不能像 Spotlight 一样反复开关的问题;现在连续按会按 `出现 -> 消失 -> 出现 -> 消失` 循环
+- 复用键盘关闭路径,Quick Search-only 模式关闭时会同步隐藏 overlay,避免残留透明窗口
+- 版本号更新为 `7.8.4`,Build 更新为 `20260530.1727`
+
## [7.8.3] — 2026-05-30
- 修复设置窗口宽度不足导致系统 `Navigation Tab Bar` 折叠入口固定出现的问题,设置页签恢复直接可见
diff --git a/Release/AppStore-7.8.4-20260530.1727/APP_STORE_ASSET_INVENTORY.md b/Release/AppStore-7.8.4-20260530.1727/APP_STORE_ASSET_INVENTORY.md
new file mode 100644
index 0000000..7333464
--- /dev/null
+++ b/Release/AppStore-7.8.4-20260530.1727/APP_STORE_ASSET_INVENTORY.md
@@ -0,0 +1,17 @@
+# App Store Asset Inventory
+
+This release pack freezes TagLauncher `7.8.4` build `20260530.1727`.
+
+## Included
+
+- `Archive/TagLauncher-7.8.4-20260530.1727-local-QA.dmg`
+- `README.md`
+- `QA_RELEASE_EVIDENCE.md`
+- `APP_STORE_ASSET_INVENTORY.md`
+
+## External Items Still Required For App Store Upload
+
+- Apple Developer Bundle ID selection/confirmation in App Store Connect.
+- Mac App Store signing certificate and provisioning profile.
+- Final App Store screenshots and metadata review before submission.
+
diff --git a/Release/AppStore-7.8.4-20260530.1727/Archive/TagLauncher-7.8.4-20260530.1727-local-QA.dmg b/Release/AppStore-7.8.4-20260530.1727/Archive/TagLauncher-7.8.4-20260530.1727-local-QA.dmg
new file mode 100644
index 0000000..d51477b
--- /dev/null
+++ b/Release/AppStore-7.8.4-20260530.1727/Archive/TagLauncher-7.8.4-20260530.1727-local-QA.dmg
Binary files differ
diff --git a/Release/AppStore-7.8.4-20260530.1727/QA_RELEASE_EVIDENCE.md b/Release/AppStore-7.8.4-20260530.1727/QA_RELEASE_EVIDENCE.md
new file mode 100644
index 0000000..dd14761
--- /dev/null
+++ b/Release/AppStore-7.8.4-20260530.1727/QA_RELEASE_EVIDENCE.md
@@ -0,0 +1,34 @@
+# QA Release Evidence
+
+## Build Under Test
+
+- Version: `7.8.4`
+- Build: `20260530.1727`
+- App: `/Users/ar/Projects/Taglauncher/build/TagLauncher.app`
+- DMG: `/Users/ar/Projects/Taglauncher/build/TagLauncher.dmg`
+- Archived DMG: `Archive/TagLauncher-7.8.4-20260530.1727-local-QA.dmg`
+- DMG SHA-256: `c843d06ed620bd2dd776fafef5e5de38d4abdb623e41e1ebc73ea525b63bf56c`
+
+## Checks
+
+- Version metadata:
+ - `CFBundleShortVersionString = 7.8.4`
+ - `CFBundleVersion = 20260530.1727`
+- Code signing:
+ - `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app`
+ - Result: passed
+- Disk image:
+ - `hdiutil verify build/TagLauncher.dmg`
+ - Result: passed
+- Window logic:
+ - `APP_BUILD=20260530.1727 Scripts/window_logic_qa.sh`
+ - Result: `ALL WINDOW LOGIC QA PASSED`
+- Quick Search toggle:
+ - Four consecutive `Fn + Space` invocations produced on-screen TagLauncher window counts `2, 0, 2, 0`
+ - Result: passed
+
+## Targeted Fix Coverage
+
+- The Quick Search global hotkey now dismisses an already-open Quick Search instead of only refocusing it.
+- Quick Search-only dismissal hides the backing overlay window, matching the Spotlight-style toggle behavior.
+
diff --git a/Release/AppStore-7.8.4-20260530.1727/README.md b/Release/AppStore-7.8.4-20260530.1727/README.md
new file mode 100644
index 0000000..aa885e1
--- /dev/null
+++ b/Release/AppStore-7.8.4-20260530.1727/README.md
@@ -0,0 +1,26 @@
+# TagLauncher 7.8.4 Release Pack
+
+This folder freezes TagLauncher `7.8.4` build `20260530.1727` for local QA distribution and Mac App Store submission preparation.
+
+## Release Identity
+
+- Product: `TagLauncher`
+- Version: `7.8.4`
+- Build: `20260530.1727`
+- Branch: `codex/fix-quick-search-focus-routing`
+- Local QA DMG: `Archive/TagLauncher-7.8.4-20260530.1727-local-QA.dmg`
+- DMG SHA-256: `c843d06ed620bd2dd776fafef5e5de38d4abdb623e41e1ebc73ea525b63bf56c`
+
+## Changes Since 7.8.3
+
+- Fixed the global `Fn + Space` Quick Search shortcut so repeated presses toggle Quick Search like Spotlight.
+- Reused the keyboard-dismiss path so Quick Search-only sessions also close the backing overlay window.
+
+## Verification
+
+- App version metadata verified: `7.8.4 (20260530.1727)`
+- `codesign --verify --deep --strict --verbose=2 build/TagLauncher.app`: passed
+- `hdiutil verify build/TagLauncher.dmg`: passed
+- `Scripts/window_logic_qa.sh`: passed
+- Targeted `Fn + Space` loop: window counts `2 -> 0 -> 2 -> 0`
+
--
Gitblit v1.9.3