gpt4 book ai didi

x11 - 如何定义窗口堆叠顺序?

转载 作者:行者123 更新时间:2023-12-04 03:16:53 30 4
gpt4 key购买 nike

我正在尝试编写自己的窗口管理器。我面临的一个问题是我不明白如何定义窗口的显示顺序。我发现的唯一方法是使用 xcb_configure_window。但它对我来说看起来非常有限:它只允许将窗口提升到最上面,或者将它放在最底部(没有层或其他东西的概念)。多么有限的功能:(。

我真正想做的是定义窗口顺序并告诉 X。或者定义多层窗口(例如,正常、高于所有、低于所有)。所以我可以相对于它的层升高(或降低)窗口。因此来自下层的窗口永远不会覆盖来自上层的窗口。

那么,除了xcb_configure_window,还有其他库函数来定义窗口的顺序吗?或者我需要忍受它?这意味着我必须在我的窗口管理器中跟踪窗口的顺序。

相关 XCB 文档的链接:https://www.x.org/releases/X11R7.6/doc/libxcb/tutorial/index.html#winstack

最佳答案

X11 只为您提供绝对最小值。没有层或始终在上方或始终在下方的窗口。您自己实现所有花哨的东西,通常是在窗口管理器中,这就是您正在编写的内容。

没有原始协议(protocol)请求立即更改窗口的堆叠顺序。 Xlib 有一个函数 XRestackWindows 可以做到这一点,但它对每个窗口使用一个配置请求。伪代码就是

 for each window in the list except the first
change the stacking order to be under the previous window

就是这样。没有比这更花哨的了。

您确实需要跟踪 WM 中的堆叠顺序以实现层,以便当程序尝试重新堆叠顶层窗口时,您可以拦截请求并仅在其层内重新堆叠它。

另一种实现层的可能方法是拥有多个透明全屏窗口,并将用户的顶级窗口重新设置为这些窗口,而不是根窗口。不过,我不完全确定它是否会始终有效,并且您需要以一种或另一种方式处理透明度,这需要支持硬件或复合扩展或可能两者的透明度。

关于x11 - 如何定义窗口堆叠顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40257320/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com