为我的罪孽(和
乐趣
的学习经历)我正在写一个窗口管理器(我知道,我知道)。窗口管理器应该如何处理ConfigureRequestEvent?
我使用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,因此我在这里问。可能会更好地使用两台机器或虚拟机或其他东西。
谢谢。
调试窗口管理器的方式是使用像Xephyr或Xnest这样的嵌套X服务器。编写一个脚本,在每次更改之后使用单个命令启动WM,以便在嵌套X服务器内进行测试。如果你看一下metacity的来源,那就是或曾经是这样的脚本。 – 2011-05-02 14:36:57
我处于几乎相同的情况。我的小WM管理着以固定的位置和大小映射窗口,但是像你一样,我得到两个ConfigureRequest事件,它们之间的延迟很长。你有没有想过为什么你会得到两个事件,或者为什么他们之间有这样的延迟? – 2011-10-06 12:45:58