【问题标题】:Xlib hide and then show a window in its original stateXlib 以原始状态隐藏然后显示一个窗口
【发布时间】:2015-08-14 11:24:50
【问题描述】:

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

谢谢。

【问题讨论】:

    标签: c linux xlib xorg xserver


    【解决方案1】:

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

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

    我认为答案是您需要自己跟踪它。 ConfigureNotify events 会告诉您何时调整大小并且我相信已移动。您也可以查看其他属性,例如通过事件最大化。如果您跟踪这些,您可以将窗口移回。

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

    【讨论】:

    • 是的,只是一个小的更正:您必须在 ConfigureNotify 中跟踪 普通窗口矩形,以便您可以在窗口再次显示时将其设置回来,以防万一窗口之前被最大化(你不能在隐藏窗口时只获得窗口矩形,因为窗口可能会被最大化)。一些相关代码:github.com/luapower/nw/blob/master/nw_xlib.lua#L845
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多