Xlib 隐藏然后以原始状态显示窗口

问题描述 投票:0回答:2

我注意到,如果我取消映射窗口,当我将其映射回来时,它会最大化 状态以及恢复到的大小和位置都丢失了(Ubuntu 10)。有没有办法获得正常尺寸/位置,以便我可以将其放回去 映射之前?或者我必须自己通过调整大小事件来跟踪它 (如果可能的话)?

谢谢。

c linux xlib xorg xserver
2个回答
2
投票

当我注意到同样的事情时,这是在搜索中出现的......所以我不确定我的答案是最好的,但是在查看了我的窗口管理器的源代码和尽可能多的文档(Xlib 手册页, ICCCM,EWMH 规范),我找不到任何自动执行此操作的东西。在我的实验和窗口管理器的源代码中,XWithdrawWindow 的作用与 XUnmapWindow 基本相同,这是我最好的选择。

查看Qt的源码,调用show()方法时也有调整大小的调用。因此,即使不是全部,至少在某些情况下它也是必要的。

我认为答案是你需要自己跟踪。

ConfigureNotify
事件会告诉您何时调整大小并且我相信会被感动。您还可以观察其他属性,例如通过事件最大化。如果您跟踪这些,您可以将窗口移回来。

或者您可以在进行取消映射之前使用 XGetGeometry 询问尺寸(以及其他原子状态)。


0
投票

使用

XLowerWindow
XRaiseWindow
怎么样?

使用这些功能,您可以将一个窗口隐藏在另一个背景窗口后面,使其不再显示,然后将其恢复原样。

https://www.x.org/releases/current/doc/libX11/libX11/libX11.html#Changing_Window_Stacking_Order\

© www.soinside.com 2019 - 2024. All rights reserved.