Известно, что gnome-terminal ресайзится не плавно по 1 пикселю, а дискретно на кратное размеру знакоместа число пикселей, например, по 9 пикселей по ширине и по 18 пикселей по высоте, поэтому его окну нельзя задать произвольный размер. Но тем не менее, современные оконные менеджеры позволяют развернуть окно терминала на весь экран (максимизировать) так, что не остаётся пустого места вокруг окна и размер этого окна не удовлетворяет требованиям к дискретному ресайзу.
Проблема такая: когда я пытаюсь из собственного оконного менеджера с помощью XConfigureWindow() задать размер окну терминала, равный размеру экрана (но не помещающий целое число знакомест), терминал начинает вести себя странно: его главное окно не отрисовывается вообще, т.е. ввода и промпта не видно, а если открыть меню, то после закрытия след от него останется. Я ловлю ConfigureRequest'ы и смотрю в них на _NET_WM_STATE: если там есть _NET_WM_MAXIMIZED_VERT или _NET_WM_MAXIMIZED_HORZ, то я соответствующим образом меняю координаты и размер окна и вызываю XConfigureWindow() с изменённым размером, иначе я вызываю XConfigureWindow() с теми координатами и размером, что мне пришли в сообщении.
После первого XConfigureWindow() с максимизированным окном терминал пытается послать ещё один ConfigureRequest с чуть меньшими координатами, на что WM делает ещё один такой же, как и первый, XConfigureWindow().
Терминал запускаю так: «DISPLAY=:1 gnome-terminal --maximize».
Reparent окон я пока не делаю, рамки не рисую.
Что я делаю не так? Почему с другими оконными менеджерами типа openbox нет такой проблемы? В исходниках openbox и xfwm4 не нашёл явного решения. Как исправить проблему в моём WM?