Это вызвало поиск, когда я заметил одно и то же ... поэтому я не уверен, что мой ответ лучший, но после просмотра исходного кода моего оконного менеджера и как можно большего количества документов (Xlib man страницы, спецификация ICCCM, EWMH), я не мог найти ничего, что сделало бы это автоматически. XWithdrawWindow делает в основном то же самое, что и XUnmapWindow в моих экспериментах и в источнике моего оконного менеджера, и это был мой лучший выбор.
Ознакомившись с исходным кодом Qt, он также имеет вызовы для регулировки размера, когда вы вызываете метод show(). Поэтому это должно быть необходимо, по крайней мере, в некоторых случаях, если не во всех.
Sooo Я думаю, что ответ - вам нужно отследить его самостоятельно. ConfigureNotify
события расскажут вам, когда вы были изменены, и я верю, что они переехали. Вы можете следить за другими свойствами, такими как максимизация событий. Если вы их отслеживаете, вы можете переместить свое окно назад.
Или вы можете задать размер с помощью XGetGeometry (и снова других состояний атома), прежде чем вы сделаете unmapping.
Yap, только незначительная коррекция: вам нужно также отслеживать ненужный прямоугольник окна в ConfigureNotify, чтобы вы могли установить его обратно, когда окно будет показано снова, в случае, если раньше окно было максимизировано (вы не можете просто получить window rect при скрытии окна, потому что окно может быть максимизировано тогда). Некоторые соответствующие коды на этом: https://github.com/luapower/nw/blob/master/nw_xlib.lua#L845 – cap