爲我的罪孽(和
樂趣
的學習經歷)我正在寫一個窗口管理器(我知道,我知道)。窗口管理器應該如何處理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