【发布时间】:2015-08-14 11:24:50
【问题描述】:
我注意到,如果我取消映射一个窗口,当我将它映射回来时,它会最大化 状态以及恢复到大小和位置都丢失了(Ubuntu 10)。有没有办法获得正常的尺寸/位置,所以我可以把它放回去 映射之前?还是我必须自己通过调整大小事件来跟踪它 (如果可能的话)?
谢谢。
【问题讨论】:
我注意到,如果我取消映射一个窗口,当我将它映射回来时,它会最大化 状态以及恢复到大小和位置都丢失了(Ubuntu 10)。有没有办法获得正常的尺寸/位置,所以我可以把它放回去 映射之前?还是我必须自己通过调整大小事件来跟踪它 (如果可能的话)?
谢谢。
【问题讨论】:
当我注意到同样的事情时,这出现在搜索中......所以我不确定我的答案是最好的,但是在查看了我的窗口管理器的源代码和尽可能多的文档之后(Xlib 手册页,ICCCM,EWMH 规范),我找不到任何自动完成它的东西。在我的实验和窗口管理器的源代码中,XWithdrawWindow 与 XUnmapWindow 的作用基本相同,这是我最好的选择。
查看 Qt 的源代码,当您调用 show() 方法时,它也有调整大小的调用。因此,如果不是全部,至少在某些情况下必须是必要的。
我认为答案是您需要自己跟踪它。 ConfigureNotify events 会告诉您何时调整大小并且我相信已移动。您也可以查看其他属性,例如通过事件最大化。如果您跟踪这些,您可以将窗口移回。
或者您可以在取消映射之前使用 XGetGeometry(以及其他原子状态)询问大小。
【讨论】: