mirror of
https://github.com/feigeCode/navop.git
synced 2026-11-06 00:07:34 +00:00
关闭窗口时销毁原生 NSWindow 会触发 AppKit 的 Touch Bar 观察者注销路径 (navop#262 / #308 / #314 的 SIGABRT)。前一版修法是「一律不销毁、只隐藏」, 但它对所有平台生效:隐藏的原生窗口会一直占着 NSWindow / CAMetalLayer 直到进程退出, 而 Touch Bar 只存在于 x86_64 机型 —— ARM macOS、Windows、Linux 付了代价却没有任何收益。 - 新增 cargo feature `macos-touchbar-window-hide`(crates/core,main 转发), 整条链路只读一个常量 `HIDE_WINDOWS_ON_CLOSE = cfg!(all(target_os = "macos", feature = "macos-touchbar-window-hide"))`: `hide_for_reuse` 直接拒绝隐藏、`install_popup_close_routes` 什么都不装、 `open_popup_window_inner` 不登记窗口、编辑器窗口的 `hide_for_reuse` 同样退回销毁。 用常量而不是散落的 `#[cfg]`,是因为这三处必须同时成立,任何一处单独打开都会静默错配 (隐藏了却不登记 = 业务 view 不卸载;登记了却不隐藏 = 条目永远探活失败)。 - 复用键从 `&'static str` 改成 `String`:同类弹窗会为不同目标各开一个(同时编辑两个连接、 同时连两台远程桌面),只按「弹窗种类」复用会把先开的窗口顶掉。 - 发布流水线只为 `x86_64-apple-darwin` 传该 feature(`extra_features`), 打包契约测试钉住三点:feature 只出现一次、只挂在 x86_64 判定下、两条编译命令都消费它。 - 契约测试 `the_hide_switch_gates_every_link_of_the_chain` 门控链上的每一环。 验证:`cargo check -p main`(feature 关)exit 0;`cargo check -p main --features macos-touchbar-window-hide`(Intel Mac 交付形态)exit 0;`cargo test -p one-core --lib` 两种配置各 698 passed;`cargo test -p remote_file_editor --lib` 70 passed; `node script/test-release-packaging.mjs` 29 passed。