Skip to content

[bug] macOS menu bar disappears when switching workspaces / 切换工作区时菜单栏消失 #1013

Description

@jcbl1

描述 Bug

在 macOS 上,只要打开过「偏好设置」窗口,然后切换到另一个桌面(Space),再切回偏好设置所在的桌面,系统顶部的菜单栏/状态栏(Apple 菜单、时间、电池等)会整个消失,只剩空白。点击其他任意应用后,状态栏才会重新出现。

重现步骤

  1. 打开 BongoCat 偏好设置窗口(托盘菜单 → 设置)
  2. 切到另一个桌面
  3. 再切回偏好设置所在的桌面
  4. 观察到系统顶栏(menu bar)消失,点击其他应用才恢复

预期行为

切换桌面往返后,系统顶栏应始终正常显示,不受 BongoCat 偏好设置窗口影响。

软件信息

BongoCat: v1.1.0

附加信息

初步定位:

  • BongoCat 以 ActivationPolicy::Accessory 运行(无 Dock 图标、无自己的菜单栏),主窗口被转换为 nonactivating_panel 的 NSPanel,因此不会成为前台 key 窗口。
  • 但偏好设置窗口是普通可获焦窗口。当它位于某个桌面时,macOS 在切回该 Space 时会尝试为它所在的 app 绘制菜单栏;由于该 app 是 accessory 且没有菜单栏,WindowServer 画不出来,导致整条状态栏不显示,直到点击其他应用强制重绘。
  • 这是 accessory/LSUIElement 应用 + 普通设置窗口 + Space 切换的系统级问题(Apple 反馈 FB13544993 同源),DockDoor、remi 等应用遇到过类似现象。
    可参考的修复方向(DockDoor/remi 已采用的方案):
  • 设置窗口显示时,将 activation policy 临时切换为 .regular(设置窗口打开期间有 Dock 图标和正常菜单栏),窗口关闭后切回 .accessory。
  • 在 BongoCat 中即:偏好窗口 show()/获得焦点 → set_activation_policy(Regular),偏好窗口关闭 → set_activation_policy(Accessory)。

相关参考:

  • https://github.com/ejbills/DockDoor (NSApp.setActivationPolicy(.regular) / .accessory 切换)
  • Apple 反馈:FB13544993 "Menu bar should not hide when a LSUIElement/accessory app is activated"

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions