如何确定窗口是否符合管理条件
作者: asmvik创建于 2024年1月8日更新于 2026年9月6日
标签documentation
以下试图描述一个窗口如何确切地确定一个窗口是否有资格管理。 "管理"意味着允许窗口修改其属性. 如果一个窗口 * 没有管理资格 *, yabai 没有触及到该窗口的单个属性; 它只被跟踪用于调试目的( 例如: 我们 * 只读到 * 有关窗口的信息) 。
由于在macOS上屏幕上可见的许多元素被报道为"一扇窗口",所以情况有些混乱. 通过API报告有多个属性,我们可以用来确定它是什么类型的窗口,但经常这些属性没有被应用程序/窗口正确设置. 这既适用于苹果软件,也适用于第三方软件,使这个似乎简单的区分应用程序窗口,对话框窗口,弹出窗口,自动完成窗口,语言输入开关窗口等的工作相当困难.
TODO: 写东西
- 有子角色 kAXUnnnown 的 Windows 完全被忽略(没有管理,没有为调试目的跟踪).
- 检测到根窗。 如果不是; 窗口不符合管理条件(为调试目的跟踪 -- -- 只读)。
- 一个真正的窗口有 AXRole = AXWindow 和 AXSubrole = AXStandard Window, AXDialog,或 AXFloating Window.
- 如果窗口 DOS 不具有 0 级( [kCGNormal Window LevelKey] (https://developer.apple.com/documentation/coregraphics/cgwindowlevelkey/kcgormalwindowlevelkey?language=objc]) , 它将被永久视为浮动窗口(除非创建了设置管理=on的窗口规则)
- 如果窗口有 AXRole 和 AXSubrole 将其识别为真实的窗口 或 窗口规则已经创建,设置了管理=on,则此窗口符合管理条件 。
- 如果窗口没有 AXRole 和 AXSubrole 标识为真实窗口, 并且没有管理=on 的窗口规则, 窗口不合格, 并且只用于调试目的 。
- 即使一个窗口符合管理条件,只能使用 * 标准窗口 *(一个真实窗口的子集 -- -- 如非对话框) , 除非规则指定带有管理=属性的 AXRole 和 AXSubrole 过滤器。
- 只有符合管理条件的窗口通过 *window created * 和 *window destroyed * 信号报告.
内容来源: asmvik/yabai