Windows 覆盖所有屏幕 - 甚至 struts - 全屏失败

Windows covering all screens - even struts - full screen failing

我创建了两个监视器。我创建了两个 windows。我将它们移动到不同的显示器并使它们全屏显示。现在,虽然 window 具有焦点,但所有保留的 "struts"(我认为它们被调用)都被覆盖了。然而,当 window 没有焦点时,后面的 "struts" 会显示在 window 上。

有没有办法暂时让我的 window 排在最前面(甚至超过所有 struts)。我确实将 windows 设置为始终在最前面。

我假设 "making your window fullscreen" 是指您为 _NET_WM_STATE_FULLSCREEN 原子发送了 _NET_WM_STATE 客户端消息。

因此,此请求完全由 window 经理处理。这不仅包括接受或拒绝请求,而且还意味着 window 经理可以决定 "fullscreen" 的含义,即尽管全屏(尽管规范当然清楚地说明了应该如何解释全屏。

归根结底,你的 window 仍然是受管理的 window,而你自己的 window 总是想做自己的事,但它是 window 经理的有责任(更重要的是,有权)权衡个人客户的意愿与其他一切。

长话短说:不行,没办法。事实上,全屏请求可能已经被完全拒绝了,那也没关系。 有责任处理window经理决定在这里做的事情。

就是说 – 您 可以 选择不重定向您的 window,即使其不受管理。您可以通过将其设为 override_redirect window 来做到这一点,但它不受管理也意味着没有装饰,没有任何 window 经理互动等等。

无论如何,引发非托管 window 不会再导致配置请求,而只会被 X 服务器接受。见 man XRaiseWindow:

If the override-redirect attribute of the window is False and some other client has selected SubstructureRedirectMask on the parent, the X server generates a ConfigureRequest event, and no processing is performed. Otherwise, the window is raised.

当然,window 经理(或其他客户)仍然能够注意到这一点,并且可能会再次在 return 中提高一些其他 window 来做出反应(尽管这不太可能). i3lock 之类的屏幕储物柜有这个问题,解决它的唯一方法是自己监听可见性事件并再次提高 window,希望你和其他人 window 不要 运行陷入永无止境的战斗。

通常我会重新考虑您是否真的想这样做。如果 window 经理决定这就是它想要提供的感觉,那么你不应该惹它。如果你的 window 甚至没有焦点,它仍然是输出中唯一可见的 window 真的那么重要吗?