2015-08-14 29 views
0

我注意到,如果我取消映射一個窗口,當我映射回來,它的狀態與最大化 一起恢復到大小和位置都丟失了(Ubuntu 10) 。有沒有辦法獲得正常大小/位置,所以我可以在映射之前將它放回 ?或者我必須通過調整大小事件 (如果這甚至可能)自己跟蹤它?Xlib隱藏然後顯示一個窗口在它的原始狀態

謝謝。

回答

1

當我注意到同樣的事情時,這出現在搜索...所以我不知道我的答案是最好的,但在看我的窗口管理器的源代碼和儘可能多的文檔,我可以(Xlib人頁面,ICCCM,EWMH規範),我找不到任何自動執行的操作。在我的實驗和窗口管理器的源代碼中,XWithdrawWindow與XUnmapWindow的功能基本相同,這是我最好的選擇。看看Qt的源代碼,當調用show()方法時,它也有調用大小的調用。因此,至少在某些情況下,即使不是全部,也是必要的。

Sooo我認爲答案是你需要自己跟蹤它。 ConfigureNotify事件會告訴你什麼時候你已經調整了大小,我相信會移動。您也可以觀看其他屬性,例如通過事件最大化。如果你跟蹤這些,你可以移動你的窗口。

或者您可以在進行取消映射之前使用XGetGeometry(以及其他原子狀態)詢問其大小。

+0

Yap,只是一個小小的更正:你必須在ConfigureNotify中跟蹤_normal窗口rectangle_,以便當窗口再次顯示時可以將其設置回來,以防窗口最大化之前(你不能只獲取當隱藏窗口時窗口矩形因爲窗口可能被最大化)。一些相關的代碼:https://github.com/luapower/nw/blob/master/nw_xlib.lua#L845 – cap

相關問題