У меня два окна GTK
-
Нормальное (основное) окно, которое запускает анимацию, рисует материал в обратном вызове, зарегистрированный
gtk_widget_add_tick_callback()
. -
В какой-то момент создается вторичное окно, которое запускает модальный цикл:
void show_modal() { GtkWindow* gw = gtkwindow(this); if( parent() ) gtk_window_set_transient_for(gw, gtkwindow( parent() )); gtk_widget_show(GTK_WIDGET(gw)); gtk_window_set_modal(gw,TRUE); gtk_window_set_keep_above(gw,TRUE); this->update_window_state(gool::WINDOW_SHOWN); while( this->is_valid_window() ) { if(this->_window_state == WINDOW_HIDDEN) break; if(this->_window_state == WINDOW_STATE_NA) break; gtk_main_iteration(); // gtk_main_iteration_do(true); } }
Проблема. Анимация в главном окне работает нормально до show_modal()
. Он выглядит как gtk_main_iteration();
блокирует тики, добавленные функцией gtk_widget_add_tick_callback()
. Как только я закрываю вторичное окно, и поэтому while() {gtk_main_iteration();}
цикл завершается, анимации в главном окне снова запускаются.
Любая идея о том, как сделать "анимацию дружественных" модальных петель в GTK?
UPDATE: оно выглядит как gtk_main_iteration();
блокирует не только тики, но и любые обновления любых окон, кроме "текущего" - они просто застывают. В чем же причина такого поведения GTK?
ОБНОВЛЕНИЕ # 2:
gtk_dialog_run();
ведет себя точно так же, как gtk_main_iteration();
- блокирует любые обновления в любом окне, кроме активного окна.