日期:2026-07-02
项目:Taglauncher
会话:Coder3
主题:WindowServer 预防收窄
用户确认按会诊建议继续做两项预防性收窄,顺序为:
本轮目标是最小范围提前降低 WindowServer / TextInput 风险,不重做已验收 UI,不生成新的视觉方案。
NSEvent.mouseLocation 的兜底,非本窗口事件直接返回 .zero。TextField 改为 AppKit NSTextField 桥接。/Users/ar/Projects/Taglauncher/src/build/TagLauncher.app,构建号输出为 8.3.1 (20260702.0128)。OverlayWindowController 的 .nonactivatingPanel 行为,避免扩大行为变化。self.window != nil 时继续处理事件,跨窗口坐标可用 NSEvent.mouseLocation 兜底换算。event.window === self.window;跨窗口事件不再用全局鼠标位置换算,直接返回 .zero。bash Scripts/usage_tips_qa.sh PASS。变更对象:App note 泡泡编辑输入框。
TextField(tr("appNote.placeholder"), text: limitedDraft) 通过 Binding setter 即时 prefix(maxAppNoteLength) 截断。AppBubbleNoteTextField 使用 AppKit NSTextField 桥接;marked text 期间不写回 SwiftUI binding,不截断,不执行回车提交 / Esc 取消。TagDatabase.maxAppNoteLength 限制;未改变备注额度、备注保存路径和泡泡外观容器。bash Scripts/app_note_bubble_input_qa.sh PASS;bash Scripts/macos14_availability_typecheck_qa.sh PASS;bash build.sh PASS。/Users/ar/Projects/Taglauncher/src/Apptag/AppGridCollectionView.swift/Users/ar/Projects/Taglauncher/src/Apptag/AppGridSupport.swift
AppBubbleNoteTextField / AppBubbleNativeTextField。NSTextField 桥接。/Users/ar/Projects/Taglauncher/src/Scripts/usage_tips_qa.sh
NSEvent.mouseLocation 兜底的静态断言。/Users/ar/Projects/Taglauncher/src/Scripts/app_note_bubble_input_qa.sh
/Users/ar/Projects/Taglauncher/CODEGRAPH.md
windowserver_event_safety_qa.sh 和 app_note_bubble_input_qa.sh QA 索引说明。cd /Users/ar/Projects/Taglauncher/src
bash Scripts/app_note_bubble_input_qa.sh
结果:PASS app note bubble input QA。
cd /Users/ar/Projects/Taglauncher/src
bash Scripts/usage_tips_qa.sh
结果:PASS usage tips QA。
cd /Users/ar/Projects/Taglauncher/src
bash Scripts/windowserver_event_safety_qa.sh
结果:PASS windowserver event safety QA。
cd /Users/ar/Projects/Taglauncher/src
bash Scripts/tag_editor_mouse_event_qa.sh
结果:PASS Tag editor mouse event QA。
cd /Users/ar/Projects/Taglauncher/src
bash Scripts/quick_search_launch_contract_qa.sh
结果:PASS quick search launch contract。
cd /Users/ar/Projects/Taglauncher/src
bash Scripts/macos14_availability_typecheck_qa.sh
结果:PASS macOS 14.0 availability typecheck: arm64。
cd /Users/ar/Projects/Taglauncher/src
git diff --check
结果:PASS,无输出。
cd /Users/ar/Projects/Taglauncher/src
bash build.sh
结果:PASS,生成 /Users/ar/Projects/Taglauncher/src/build/TagLauncher.app,构建输出 TagLauncher 8.3.1 (20260702.0128)。
cd /Users/ar/Projects/Taglauncher/src
bash Scripts/macos14_build_metadata_qa.sh
结果:PASS build metadata: LSMinimumSystemVersion=14.0 minos=14.0 arches=arm64。
用途:复查本轮 WindowServer / TextInput 预防性收窄是否仍成立。
前置条件:
/Users/ar/Projects/Taglauncher/src。设置命令:
cd /Users/ar/Projects/Taglauncher/src
bash Scripts/usage_tips_qa.sh
bash Scripts/app_note_bubble_input_qa.sh
bash Scripts/windowserver_event_safety_qa.sh
bash Scripts/tag_editor_mouse_event_qa.sh
bash Scripts/quick_search_launch_contract_qa.sh
bash Scripts/macos14_availability_typecheck_qa.sh
git diff --check
bash build.sh
bash Scripts/macos14_build_metadata_qa.sh
验证步骤:
bash build.sh 输出 App 构建成功,并生成 /Users/ar/Projects/Taglauncher/src/build/TagLauncher.app。清理 / 恢复命令:
/Users/ar/Projects/Taglauncher/src/build/,但发布或验收前不建议删除。搜索关键词:usage_tips_qa.sh、app_note_bubble_input_qa.sh、WindowServer、App note bubble、NSTextField、hasMarkedText、NSEvent.mouseLocation、event.window === self.window。