За мои грехи (и за удовольствие опыт обучения) я пишу оконный менеджер (знаю, знаю).
Я использую Python и XCB (python-xpyb).
До сих пор я понял, что мне нужно использовать маску SubStructureRedirect для корневых окон, и я успешно передаю события, связанные с окнами верхнего уровня приложений. Я проверяю это, запустив xterm.
Я получаю ConfigureRequestEvent, затем паузу, затем еще один ConfigureRequestEvent, а затем MapRequestEvent.
Когда я получаю MapRequestEvent, я вызываю connection.core.MapWindowChecked(e.window)
, который работает, но отображает окно, которое имеет ширину всего лишь один или два пикселя.
Тогда мой вопрос: что я должен делать с ConfigureRequestEvent, чтобы сделать окно правильного размера (при условии, что это то, чего мне не хватает)?
Точнее, что именно я называю? MapWindowChecked был очевидным выбором, но я не могу найти, как на самом деле настроить ширину / высоту. Я предполагаю, что это ConfigureWindow, но аргументы, которые принимают, кажутся мне неясными. В прошлый раз, когда я звонил, я использовал xcb.xproto.CW.EventMask, но ни один из флагов в CW, похоже, не имеет отношения к ширине / высоте.
PS Документация на все это кажется мне довольно неуловимой. Я посмотрел пару оконных менеджеров Python, которые предположительно используют xcb, и они, кажется, используют свои собственные версии с дополнительной функциональностью. Кроме того, проверка / отладка работающего оконного менеджера (который также отвечает за отображение окна вашего отладчика) - это PITA, поэтому мой вопрос здесь. вероятно, было бы лучше использовать две машины или виртуальную машину или что-то.
Спасибо.