2010-04-14 55 views
1

在Gtk應用程序中,有1個監聽事件的主循環(例如鼠標點擊,鍵盤等)。當模態對話框彈出時,主循環被阻塞,直到用戶在對話框中單擊「確定」,對吧? (即當用戶點擊主窗口時不會發生)。那是對的嗎?關於Gtk應用程序中模態對話框的問題

我的問題是火狐如何做它的模態對話框,以便它可以:1. 1時,有2個Firefox窗口 2.其中一人有一個模式對話框 3.另一種是仍然互動

如果兩個窗口共享相同的gtk主循環,那怎麼可能?請幫我理解這一點。

謝謝。

回答

1

如果兩個窗口共享相同的GTK主循環,那麼這是不可能的。所以他們沒有。要麼他們有兩個主循環,要麼通過每次單擊主窗口時提高對話框來僞造模態對話框。

+0

如何爲每個窗口分配一個新的GTK主循環? – michael 2010-04-15 15:31:02

+0

對不起,從來沒有做過。查看GLIB文檔,在'g_main_whatever'函數下(_not_'gtk_main') – ptomato 2010-04-15 15:59:12

+1

或者查看Firefox源代碼;-) – ptomato 2010-04-15 15:59:53

2

Firefox的警報窗口是模態的。當你在firefox中打開一個新窗口時,它會產生另一個firefox進程,所以你有兩個進程,兩個窗口,兩個獨立的主循環。

+0

不,我在ubuntu上試過這個。當我有1個Firefox然後去'新窗口'時,它仍然顯示它使用1個進程(從'ps -ef'輸出)。 – michael 2010-04-19 07:27:39

+0

在模態行爲的情況下,有兩個進程而不是兩個線程有​​自己的循環有什麼重大區別? Mozilla選擇了多線程方法來完成適合流程的東西(參考:http://www.linux-magazine.com/Online/News/Electrolysis-Multi-Process-Firefox),我敢打賭,這與優化有關。改爲使用'ps -AL'。 – fetasail 2010-04-20 12:23:39

相關問題