Что должен делать оконный менеджер с ConfigureRequestEvent? - PullRequest
2 голосов
/ 01 мая 2011

За мои грехи (и за удовольствие опыт обучения) я пишу оконный менеджер (знаю, знаю).

Я использую 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, поэтому мой вопрос здесь. вероятно, было бы лучше использовать две машины или виртуальную машину или что-то.

Спасибо.

1 Ответ

1 голос
/ 02 мая 2011

Краткий ответ - настроить окно (размер, укладку и т. Д.), Вызвав ConfigureWindow.Длинный ответ здесь: вы навязываете политику и соблюдаете спецификации, такие как XSizeHints.Лучше всего взглянуть на источник некоторых существующих WM и понять, что они делают.Что именно вы делаете, зависит от вашего желаемого интерфейса.

Самое простое, чтобы заставить его работать, это просто настроить ConfigureWindow в точности так, как просит запрос без переопределений политики или подсказок.Но вы, вероятно, быстро увидите множество проблем с юзабилити, и вам придется добавить еще несколько умов.

...