2016-05-24 61 views
0

我正在製作一個跨平臺的窗口層。在製作窗口關係時,我在窗口模式上遇到了一些麻煩。_NET_WM_STATE_MODAL的預期行爲是什麼?

我已閱讀官方規格:Application Window Properties,以及一些相關的主題如:X11 modal dialog。似乎僅僅設置transient-for是不夠的,但是_NET_WM_STATE_MODAL也是必需的。所以我試圖製作適用於這個屬性以及transient-for的小程序。

我首先製作了使用SDL2創建窗口的程序,並使用X11提供的本地窗口句柄來創建窗口。但在設置_NET_WM_STATE_MODAL屬性後,我沒有觀察到任何行爲改變:transient-for目標窗口仍在接收鼠標按鈕事件,這不像用戶無法操作的模式阻止父窗口。

爲了避免由SDL2完成的潛在的惡意工作,我進一步使用GDK3提供了測試程序,它提供了隨時可用的包裝函數。行爲與SDL2程序相同。

由於我沒有在設置_NET_WM_STATE_MODAL之前/之後觀察到任何變化,該屬性的預期行爲是什麼?

回答

1

因爲我沒有在設置_NET_WM_STATE_MODAL之前/之後觀察到任何變化,該屬性的預期行爲是什麼?

這是我們無法回答的問題。這是窗口管理者指示模態的暗示,但是,正如在大多數情況下,由窗口管理員決定如何處理這個提示。

換句話說,行爲完全取決於窗口管理器,並且您沒有說明您正在測試哪個窗口管理器。

此外,這個提示要求窗口管理器符合EWMH標準,並不是所有的都是或者不完全。您可以在根窗口上使用_NET_SUPPORTED來查看窗口管理器聲稱支持的原子列表。如果沒有列出_NET_WM_STATE_MODAL,那麼窗口管理器可能根本沒有實現這個提示。如果列出,窗口管理器聲稱來支持它,但a)它可能在說謊(我們不要假設,儘管)和b)行爲取決於窗口管理器。

+0

儘管它是WM特有的,那麼對該屬性是否有任何「共同」期望? – jiandingzhe

+0

@jiandingzhe來自EWMH規範:「在用戶可以繼續在主窗口中工作之前,必須關閉其他對話框,該屬性稱爲模態。」 –

+0

因此,如果這個功能不能保證存在,我應該始終在我的窗口層中實現它嗎? – jiandingzhe

相關問題