2015-08-14 15 views
0

Я заметил, что если я отформатирую окно, когда я его верну, оно будет максимально состояние вместе с размером восстановления и положением все потеряно (Ubuntu 10) , Есть ли способ получить нормальный размер/pos, чтобы я мог вернуть его обратно перед отображением? Или мне нужно отследить его самостоятельно, изменив размеры событий (если это возможно)?Xlib скрыть, а затем показать окно в исходном состоянии

Спасибо.

ответ

1

Это вызвало поиск, когда я заметил одно и то же ... поэтому я не уверен, что мой ответ лучший, но после просмотра исходного кода моего оконного менеджера и как можно большего количества документов (Xlib man страницы, спецификация ICCCM, EWMH), я не мог найти ничего, что сделало бы это автоматически. XWithdrawWindow делает в основном то же самое, что и XUnmapWindow в моих экспериментах и ​​в источнике моего оконного менеджера, и это был мой лучший выбор.

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

Sooo Я думаю, что ответ - вам нужно отследить его самостоятельно. ConfigureNotify события расскажут вам, когда вы были изменены, и я верю, что они переехали. Вы можете следить за другими свойствами, такими как максимизация событий. Если вы их отслеживаете, вы можете переместить свое окно назад.

Или вы можете задать размер с помощью XGetGeometry (и снова других состояний атома), прежде чем вы сделаете unmapping.

+0

Yap, только незначительная коррекция: вам нужно также отслеживать ненужный прямоугольник окна в ConfigureNotify, чтобы вы могли установить его обратно, когда окно будет показано снова, в случае, если раньше окно было максимизировано (вы не можете просто получить window rect при скрытии окна, потому что окно может быть максимизировано тогда). Некоторые соответствующие коды на этом: https://github.com/luapower/nw/blob/master/nw_xlib.lua#L845 – cap