【发布时间】:2020-12-08 09:40:41
【问题描述】:
我正在使用应用程序在 MacOS Big Sur 上选择窗口。 (我有轻微的手部颤抖,这导致我经常在点击鼠标时错过预期的目标。)
应用程序:
- 使用 AppKit“macOS 的辅助功能”API 来选择窗口。它调用
AXUIElementSetAttributeValue函数来设置属性NSAccessibilityMainAttribute将特定窗口置于前面然后 - 调用
NSRunningAppplication的方法activateWithOptions:传递NSApplicationActivateIgnoringOtherApps以激活与该窗口关联的应用程序。
不幸的是,我看到 Big Sur 的行为发生了变化。具体来说,假设我打开了两个应用程序,每个应用程序都有两个窗口:
- AppX 有窗口:
- X1 覆盖了我的屏幕左半边
- X2 覆盖了我屏幕的右半部分
- AppY 有窗口:
- Y1 覆盖了我屏幕的左半部分
- Y2 覆盖了我屏幕的右半部分
从可见的 X1 和 X2 开始(在顶部):
- Big Sur 之前我可以选择窗口 Y2,这将使 AppY 成为当前应用程序,并留下窗口 X1 和Y2可见
-
自从升级到 Big Sur 当我选择窗口 Y2 时,对
activateWithOptions:的调用将所有应用程序 AppY 的窗口向前移动,仅显示Y1 和 Y2。
在相反的情况下也会发生同样的事情(从 Y1 和 Y2 可见(在顶部)开始,然后尝试将 X1 向前并且仍然看到Y2)。
NSRunningApplication 的 activateWithOptions: 方法的文档说:
默认情况下,激活只会将主窗口和关键窗口向前移动。如果您指定 NSApplicationActivateAllWindows,则应用程序的所有窗口都会前移。”我的应用程序没有指定 NSApplicationActivateAllWindows。
关于应用应该如何处理这个问题有什么建议吗? (如果您说“该应用程序已经在做正确的事情”,那很好,但我很想知道是否有合理的解决方法。)
[顺便说一句:我也欢迎任何关于让 Apple 注意到这一点的最佳方式的提示。]
【问题讨论】:
-
我遇到了同样的问题。看起来像是大苏尔的一个错误?
标签: macos appkit macos-big-sur