我正在创建一个跨平台的窗口层。在制作窗口关系时,我在窗口模态上遇到了一些麻烦。
我已阅读官方规范:Date.UTC()以及一些相关主题:Application Window Properties。仅设置transient-for似乎不够,但也需要_NET_WM_STATE_MODAL。因此,我尝试制作应用此属性的小程序以及transient-for。
我首先使用SDL2制作了创建窗口的程序,并使用获取的本机窗口句柄使用X11填充。但是,在设置_NET_WM_STATE_MODAL属性后,我没有观察到任何行为更改:transient-for目标窗口仍在接收鼠标按钮事件,这与用户无法操作的模式阻止父窗口不同。
为了避免SDL2做出的潜在恶意,我进一步使用GDK3制作了测试程序,GDK3提供了即用型包装函数。行为与SDL2程序相同。
由于我没有在设置_NET_WM_STATE_MODAL之前/之后发现任何变化,该属性的预期行为是什么?
答案 0 :(得分:2)
由于我没有在设置_NET_WM_STATE_MODAL之前/之后发现任何变化,该属性的预期行为是什么?
这是我们无法回答的问题。它提示窗口管理器指示模态,但是,在大多数情况下,由窗口管理器决定如何处理此提示。
换句话说,行为完全取决于窗口管理器,您还没有说明您正在测试哪个窗口管理器。
此外,此提示要求窗口管理器符合EWMH标准,并非所有窗口管理器都是完整的。您可以在根窗口上使用_NET_SUPPORTED
来查看窗口管理器声称支持的原子列表。如果_NET_WM_STATE_MODAL
未列在那里,那么窗口管理器可能根本就没有实现此提示。如果列出,窗口管理器声明支持它,但a)它可能在说谎(尽管不要假设)和b)行为取决于窗口管理器。