对于我的罪(以及 fun 学习经历)我正在写一个窗口管理员(我知道,我知道)。
我正在使用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,因此我在这里问。使用两台机器或VM或其他东西可能会更好。
感谢。
答案 0 :(得分:1)
简短的回答是通过调用ConfigureWindow来配置窗口(大小,堆叠等)。长期的答案是你施加政策和荣誉规范,如XSizeHints。最好看看一些现有的WM的来源,并了解他们的工作。您的具体操作取决于您所需的UI。
让它工作的最简单的方法就是在请求没有策略或提示覆盖的情况下完全按照ConfigureWindow进行操作。但是你可能会很快看到很多可用性问题,并且必须添加更多智能。