在Gtk應用程序中,有1個監聽事件的主循環(例如鼠標點擊,鍵盤等)。當模態對話框彈出時,主循環被阻塞,直到用戶在對話框中單擊「確定」,對吧? (即當用戶點擊主窗口時不會發生)。那是對的嗎?關於Gtk應用程序中模態對話框的問題
我的問題是火狐如何做它的模態對話框,以便它可以:1. 1時,有2個Firefox窗口 2.其中一人有一個模式對話框 3.另一種是仍然互動
如果兩個窗口共享相同的gtk主循環,那怎麼可能?請幫我理解這一點。
謝謝。
在Gtk應用程序中,有1個監聽事件的主循環(例如鼠標點擊,鍵盤等)。當模態對話框彈出時,主循環被阻塞,直到用戶在對話框中單擊「確定」,對吧? (即當用戶點擊主窗口時不會發生)。那是對的嗎?關於Gtk應用程序中模態對話框的問題
我的問題是火狐如何做它的模態對話框,以便它可以:1. 1時,有2個Firefox窗口 2.其中一人有一個模式對話框 3.另一種是仍然互動
如果兩個窗口共享相同的gtk主循環,那怎麼可能?請幫我理解這一點。
謝謝。
如果兩個窗口共享相同的GTK主循環,那麼這是不可能的。所以他們沒有。要麼他們有兩個主循環,要麼通過每次單擊主窗口時提高對話框來僞造模態對話框。
Firefox的警報窗口是模態的。當你在firefox中打開一個新窗口時,它會產生另一個firefox進程,所以你有兩個進程,兩個窗口,兩個獨立的主循環。
不,我在ubuntu上試過這個。當我有1個Firefox然後去'新窗口'時,它仍然顯示它使用1個進程(從'ps -ef'輸出)。 – michael 2010-04-19 07:27:39
在模態行爲的情況下,有兩個進程而不是兩個線程有自己的循環有什麼重大區別? Mozilla選擇了多線程方法來完成適合流程的東西(參考:http://www.linux-magazine.com/Online/News/Electrolysis-Multi-Process-Firefox),我敢打賭,這與優化有關。改爲使用'ps -AL'。 – fetasail 2010-04-20 12:23:39
如何爲每個窗口分配一個新的GTK主循環? – michael 2010-04-15 15:31:02
對不起,從來沒有做過。查看GLIB文檔,在'g_main_whatever'函數下(_not_'gtk_main') – ptomato 2010-04-15 15:59:12
或者查看Firefox源代碼;-) – ptomato 2010-04-15 15:59:53