Вопрос о модальном диалоге в приложении Gtk

В приложении Gtk есть 1 основной цикл, который прослушивает события (например, щелчок мышью, клавиатуру и т. д.). И когда появляется всплывающее модальное диалоговое окно, основной цикл блокируется до тех пор, пока пользователь не нажмет «ОК» в диалоговом окне, верно? (т.е. ничего не произойдет, когда пользователь нажмет на главное окно). Это правильно?

Мой вопрос заключается в том, как Firefox может сделать свой модальный диалог, чтобы он мог: 1. когда у 1 есть 2 окна Firefox 2. у одного из них есть модальный диалог 3. другой все еще интерактивен

Если оба окна используют один и тот же основной цикл gtk, как это возможно? Пожалуйста, помогите мне понять это.

Спасибо.


person michael    schedule 14.04.2010    source источник


Ответы (2)


Окно предупреждения firefox модальное. Когда вы открываете новое окно в firefox, оно порождает другой процесс firefox, поэтому у вас есть два процесса, два окна, два независимых основных цикла.

person fetasail    schedule 16.04.2010
comment
Нет. Я пробовал это на Ubuntu. Когда у меня есть 1 Firefox, а затем я перехожу в «Новое окно», он по-прежнему показывает, что использует 1 процесс (из вывода «ps -ef»). - person michael; 19.04.2010
comment
В случае с модальным поведением, какая большая разница в наличии двух процессов вместо двух потоков с собственным циклом? Mozilla выбрала многопоточный подход для чего-то, что идеально подходит для процессов (для справки: linux-magazine.com/Online/News/), и я уверен, что это связано с оптимизацией. Вместо этого попробуйте ps -AL. - person fetasail; 20.04.2010

Если оба окна используют один и тот же основной цикл GTK, то это невозможно. Так они не делают. Либо у них есть два основных цикла, либо они имитируют модальный диалог, поднимая диалог каждый раз, когда вы нажимаете на одно главное окно.

person ptomato    schedule 15.04.2010
comment
Как я могу назначить новый основной цикл GTK для каждого окна? - person michael; 15.04.2010
comment
Извините, никогда этого не делал. Посмотрите в документации GLib под функциями g_main_whatever (не gtk_main) - person ptomato; 15.04.2010