В приложении на основе XLib мне нужно изменить размер дочернего окна после родительского окна. (Например, чтобы дочернее окно взяло всю клиентскую область родительского окна)Производительность авто-выравнивания XLib окон
Я обрабатываю событие ConfigureNotify родительского окна и при необходимости изменяя размер дочернего окна.
В целом он работает правильно. Но есть задержка между изменением размера родительского окна (например, когда пользователь изменяет размер окна, перетаскивая край) и событие, полученное приложением.
Из-за этой задержки дочернее окно (ы) принимает необходимый размер только через некоторое время после того, как пользователь остановится, чтобы переместить края. Таким образом, на экране появляется плохой фликкер, и пользовательский интерфейс выглядит действительно вялым.
Я вижу подобное поведение во многих программах Linux.
Как устранить эту проблему? Или, по крайней мере, как сделать задержку значительно меньше?
Я попытался проигнорировать некоторые события ConfigureNotify, обработав только последнее полученное событие, и это немного помогает, но недостаточно.
Update:
После некоторых исследований я обнаружил, что проблема связана с асинхронным характером взаимодействия WM-приложения. Хотя приложение изменяет размер и перерисовывает дочернее окно, диспетчер окон продолжает изменять размер родительского окна. Итак, когда процесс resize/realign/redraw завершается, родительское окно имеет другой размер, другое событие отправляется в очередь событий, и все должно начинаться с самого начала.
Попробуйте вызвать 'XFlush()' после изменения размера дочернего окна. –
Не существует никакого эффекта. – johnfound
@ н.м. В вопросе есть обновление - еще несколько экспериментов. – johnfound