_NET_WM_STATE_MODAL 的预期行为是什么?

What is the expected behavior of _NET_WM_STATE_MODAL?

我正在制作一个跨平台 windowing 层。在制作 window 关系素材时,我在 window 模态上遇到了一些麻烦。

我已阅读官方规范:Application Window Properties, and some related topics like this: X11 modal dialog。只设置transient-for似乎还不够,还需要_NET_WM_STATE_MODAL。所以我尝试制作应用此 属性 以及 transient-for.

的小程序

我首先使用 SDL2 制作了创建 window 的程序,并使用获取的本机 window 句柄使用 X11 东西。但是在设置 _NET_WM_STATE_MODAL 属性后我没有观察到任何行为变化:transient-for 目标 window 仍在接收鼠标按钮事件,这不像模态阻塞的父 window不能由用户操作。

为了避免SDL2做坏事,我进一步使用GDK3制作了测试程序,它提供了现成的包装函数。行为与 SDL2 程序相同。

由于我没有观察到任何变化 before/after _NET_WM_STATE_MODAL 已设置,属性 的预期行为是什么?

As I did not observed any change before/after _NET_WM_STATE_MODAL is set, what is the expected behavior of that property?

这是一个我们无法回答的问题。 window 管理器指示模式的提示,但在大多数情况下,由 window 管理器决定如何处理此提示。

换句话说,行为完全取决于 window 经理,您还没有说明与哪个 window 经理一起测试。

此外,此提示要求 window 管理器符合 EWMH,并非所有管理器都完全符合或不完全符合。您可以在根 window 上使用 _NET_SUPPORTED 来查看 window 管理器声称支持的原子列表。如果 _NET_WM_STATE_MODAL 未在此处列出,则 window 管理器可能根本没有实现此提示。如果它被列出,window 经理 声称 支持它,但是 a) 它可能在撒谎(不过我们不要假设)和 b) 行为取决于window 经理。