mirror of
https://github.com/feigeCode/navop.git
synced 2026-09-21 08:01:22 +00:00
关闭行为从「托盘可用就隐藏」改成先看用户偏好:
1. 新增 `AppSettings.close_button_behavior`(`ask` / `minimize_to_tray` / `quit`,
默认 `ask`,未知值回退 `ask`),`main_window_close_action(tray_ready, behavior)`
纯策略三态:托盘不可用一律 `RequestQuit`,不与偏好互动 —— 宁可退出也不能
制造用户找不到、也没法恢复的隐藏窗口。
2. `AskUser` 弹窗的两条出路各自渲染按钮(`tray-close-minimize` / `tray-close-quit`),
带「记住我的选择」,勾选后落盘。刻意不用默认 ok/cancel footer:默认 footer
只有两个固定按钮,「取消」兼职退出会让 Esc 和点遮罩也走成退出应用;而
`button_props` 跟在 `confirm` 之后设置还会把 `show_cancel` 重置、吞掉第二个
按钮(前一版就是这么丢的)。
3. 「记住」勾选框放在独立 entity:弹窗 body 由 `Root` 渲染,`NavopApp::notify`
重绘不到它。`close_choice_prompt_open` 防连点叠窗,关窗复位。
4. 设置页通用页新增「关闭窗口行为」下拉,与弹窗写同一份偏好;托盘不可用时
该设置不生效。
Windows 单实例:interprocess 的命名管道带 `FILE_FLAG_FIRST_PIPE_INSTANCE`,名字
已存在时返回 `ERROR_ACCESS_DENIED(5)` 而非 `AddrInUse`,且错误原样透传、无 error
kind 归一化,旧判定永不命中 ⇒ 第二个实例把自己当主实例、起出完整进程。改为
`instance_name_taken()` 认 `AddrInUse` 或 `raw_os_error` ∈ {5, 231},其余错误不
误判为「已占用」。
运行:`cargo test -p one-core --lib settings`(112 passed)、`cargo test -p main`
(634 passed);`cargo check -p main --all-targets`、`cargo clippy -p main
--all-targets`(改动文件零告警)通过。Windows 重复启动与弹窗交互仍需真机冒烟。