为了我的罪过(以及为了有趣的学习经验),我正在编写一个窗口管理器(我知道,我知道)。
我正在使用 python 和 XCB (python-xpyb)。
到目前为止,我已经发现我需要在根窗口上使用 SubStructureRedirect 掩码,并且我成功地传递了与应用程序的顶级窗口相关的事件。我正在通过启动 xterm 来测试它。
我得到一个 ConfigureRequestEvent,然后是一个暂停,然后是另一个 ConfigureRequestEvent,然后是一个 MapRequestEvent。
当我得到 MapRequestEvent 时,我调用connection.core.MapWindowChecked(e.window)
它,它可以工作,但映射一个只有一个像素或两个宽/高的窗口。
那么,我的问题是,我应该如何处理 ConfigureRequestEvent 以使窗口大小正确(假设这就是我所缺少的)?
更准确地说,我到底叫什么?MapWindowChecked 是一个明显的选择,但我似乎无法找到如何实际配置宽度/高度。我猜它是 ConfigureWindow,但接受的参数对我来说似乎很模糊。上次我调用它时,我使用了 xcb.xproto.CW.EventMask,但 CW 中的所有标志似乎都与宽度/高度无关。
PS 关于所有这些的文档对我来说似乎非常难以捉摸。我查看了几个据称使用 xcb 的 python 窗口管理器,它们似乎使用自己的自定义版本和额外的功能。此外,检查/调试正在运行的窗口管理器(也负责映射调试器的窗口)是一个 PITA,因此我在这里问。可能会更好使用两台机器或一个虚拟机或其他东西。
谢谢。