Skip to content

NotchRail v0.0.9 (开发版): 双屏独立面板架构、全局图元注册表与流体拖拽排序

Pre-release
Pre-release

Choose a tag to compare

@AeroSheepZ AeroSheepZ released this 11 Sep 03:08
· 17 commits to main since this release

⚠️ 版本说明:本版本为开发版 (Development Build),闭源于 GitHub Issues #50 + #51~#54。核心是将单例聚焦跟随架构升级为双屏物理独立的多实例面板拓扑,并建立全局应用图元注册表以根治非激活屏图标空白,同时完成事件驱动扫描管线与灵动岛内流体拖拽排序。

✨ v0.0.9 核心更新与修复

  1. 🖥️ 双屏多实例独立面板架构与物理隔离状态机 (Ticket #53):

    • 主屏常驻 primaryPanel,外接屏按需装载独立 externalPanel,各自搭载物理隔离的 IslandStateMachine,心跳由 MenuBarSyncCoordinator 集中聚合;
    • IslandWindowCoordinator 收口 isPrimaryDisplay / externalOwnedDisplayID 单一事实来源,第三块及以上屏幕无归属面板时 Fail-Fast 返回 nil,彻底杜绝跨屏抢夺、徽标闪烁与窗口误锚定。
  2. 🗄️ 全局应用图元注册表 (Application Asset Vault),根治非激活屏图标空白:

    • WindowServer 在非聚焦屏为节能会暂停菜单项光栅化(截图返回全透明)。IconResolver 维护以 bundleIdentifier 为索引的全局注册表,任一激活屏成功截取真实位图即登记入库;
    • 非激活屏展开灵动岛时凭本轨确凿 Bundle ID 直出真实超清位图,0 延迟、0 兜底、0 错配;
    • resolveCachedIcon(for:) 收口「本屏内存 → 全局注册表 → 跨窗持久缓存」三层合法图元查找唯一入口,消除多处 ?? 级联的语义漂移。
  3. ⚡ 事件驱动极速扫描管线,根治发热卡顿 (Ticket #51 / #52):

    • 以进程生命周期与窗口层级事件驱动替代后台高频心跳轮询,消除高频事件下的堆分配抖动;
    • MenuBarAXResolver 空间映射缓存 TTL 收敛为具名常量 MAPPING_CACHE_TTL = 60.0,由进程事件定向失效;
    • 批量窗口提取与增量扫描,日常刷新耗时稳定控制在毫秒级。
  4. 🖱️ 灵动岛内流体拖拽重排图标 (Ticket #54):

    • 支持在灵动岛内直接拖拽重排溢出的状态项顺序,并持久化至 customItemOrder;
    • 剔除误触发的非预期右键操作,拖拽判定与点击分发严格互斥。
  5. 🎯 外接屏顶边缘热区契约对齐:

    • isPointInExternalCenterHotZone 的垂直阈值由「可选值 + 状态栏高度兜底」改为显式契约默认值 4.0pt,杜绝「单测验默认分支、生产传另一阈值」的语义脱漂,防误触时序精确可控。
  6. 🧹 架构清理:

    • 按指令从项目内彻底移除状态项隐藏功能(ignoredBundleIDs 及其 7 层实现),保留无溢出隐藏胶囊、全屏隐退、⌘H 应用级隐藏等同名但无关的能力。

🔧 补丁更新(2026-09-11,安装包资产已重新构建)

  • 修复「启动即弹出空白设置面板」:只要声明了 SwiftUI 场景,macOS 会在应用启动时自动创建并显示该场景的窗口。v0.0.9 的 Settings 场景渲染的是 EmptyView,因此启动即弹出一个空白窗口;自建设置窗口一关闭,它就暴露出来。现已弃用 SwiftUI App 协议、改由 AppKit 手动启动,该窗口彻底消失。
  • 偏好设置面板改用侧边栏版式:TabView + .tabItem 在 macOS 上会渲染成传统的顶部标签栏,现改为 List(selection:) + .listStyle(.sidebar) 分区导航。
  • 设置窗口生命周期加固:只复用当前可见的窗口,关闭时释放引用并剥离托管视图。

📦 资产下载

  • DMG 镜像安装包: NotchRail-v0.0.9.dmg
  • ZIP 绿色压缩包: NotchRail-v0.0.9.zip