У меня два окна 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(); - блокирует любые обновления в любом окне, кроме активного окна.