0

我创建了两个监视器。我创建了两个窗口。我把它们移到不同的显示器上,然后全屏显示。现在,当窗口具有焦点时,所有保留的“支柱”(我认为它们被称为)都被覆盖了。但是,当窗口没有焦点时,后面的“支柱”会显示在窗口上方。

无论如何,是否可以暂时使我的窗口最高(甚至在所有支柱上)。我确实将我的窗户设置为始终在顶部。

4

1 回答 1

1

我假设通过“使您的窗口全屏”,您的意思是您为原子发送了一条_NET_WM_STATE客户端消息。_NET_WM_STATE_FULLSCREEN

因此,此请求完全由窗口管理器处理。这不仅包括接受或拒绝请求,还意味着窗口管理器可以决定“全屏”的含义,即,尽管全屏,其他客户端是否可见或在什么时候可见(尽管规范明确说明了如何全屏应该被解释)。

底线是您的窗口仍然是一个托管窗口,虽然您自己的窗口总是想做自己的事情,但窗口管理器的责任(更重要的是,它是正确的)权衡单个客户的愿望与其他一切.

长话短说:不,没有办法。事实上,全屏的请求可能已经被完全拒绝了,这很好。有责任处理窗口管理器决定在这里做什么。

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

无论如何,提出一个非托管窗口不再导致配置请求,而只是被 X 服务器接受。见man XRaiseWindow

如果窗口的 override-redirect 属性为 False 并且某些其他客户端已在父级上选择了 SubstructureRedirectMask,则 X 服务器生成 ConfigureRequest 事件,并且不进行任何处理。否则,窗口会升起。

当然,窗口管理器(或其他客户端)仍然能够注意到这一点,并且可能会通过再次提升其他窗口作为回报来做出反应(尽管这不太可能)。像 i3lock 这样的屏幕储物柜有这个问题,解决它的唯一方法是自己监听可见性事件并再次抬起窗口,希望你和另一个窗口不会陷入无休止的战斗。

一般来说,我会重新考虑你是否真的想这样做。如果窗口管理器决定这是它想要提供的感觉,你不应该乱用它。如果它甚至没有焦点,你的窗口仍然是输出上唯一可见的窗口真的那么重要吗?

于 2016-05-05T19:03:24.743 回答