2015-09-04 33 views
1

我基礎上做一個小的窗口管理器:的Xlib蟒蛇:不能映射Firefox的菜單

simplewm.py https://github.com/mpnordland/Mozzarella/blob/master/cheesewm.py~

我試圖讓Firefox的工作,但一直未能得到未映射窗口(這是Firefox的菜單/右鍵點擊選項)出現。

我試過window.map(),但是隻讓菜單閃爍並再次消失。這也導致「Xlib.X.UnmapNotify」的事件

當我右鍵點擊(或單擊菜單)在Firefox它會導致2×程序庫事件:

Xlib.protocol.event.ClientMessage(type = 161, window = <Xlib.display.Window 0x010005a9>, client_type = 343, data = (32, array('I', [0L, 383L, 0L, 0L, 0L])), sequence_number = 3106) 


    Xlib.protocol.event.UnmapNotify(window = <Xlib.display.Window 0x010005a9>, type = 146, event = <Xlib.display.Window 0x00000292>, sequence_number = 3108, from_configure = 0) 

所以看上去Firefox是在去映射菜單我試圖映射...:/

回答

0

找到它!

問題出在窗口焦點。除非在Firefox主窗口上設置了輸入焦點,否則Firefox不會允許菜單或右鍵單擊對話框保持打開狀態。

window.set_input_focus(Xlib.X.RevertToPointerRoot, Xlib.X.CurrentTime) 
+0

好的,我有完全相同的問題,但這種解決方案似乎並沒有解決問題。發生的事情是,在mapnotify事件之後,我有兩個UnMapNotify。在這裏我的問題:http://stackoverflow.com/questions/31535560/xlib-and-firefox-behavior如果你能幫助我將不勝感激! (我自7月起就陷入這個問題:D) – Ivan

+0

還有一個問題,你什麼時候set_input_focus?在哪個事件? – Ivan

0

我一直在尋找一個解決方案,大約一個星期了,這有所幫助。

更具體地說set_input_focus()的時候,你的框架窗口上得到一個EnterNotify要在 主要客戶窗口調用。 (即,在焦點跟隨鼠標模式下)。 使用RevertToPointerRoot或RevertToParent似乎並不重要。