Как определить, был ли виджет GTK уничтожен

У меня есть код Gtk+, написанный на C, который выполняет анимацию с использованием Cairoи таймера. В большинстве случаев, когда я нажимаю на значок закрытия приложения, я получаю следующее сообщение на терминале:

Gtk-CRITICAL **: gtk_widget_queue_draw: assertion `GTK_IS_WIDGET (widget)' failed

Теперь я предполагаю, что это происходит, потому что в тот момент, когда я закрываю приложение, срабатывает таймер, и виджет главного окна доступен, но с тех пор был уничтожен. Каков обычный метод определения того, действителен ли виджет Gtk и на него можно ссылаться?

Код нарушения находится здесь:

gboolean rotate_cb( void *degrees )
{
    rotation += DegreesToRadians((*(int*)(degrees)));
    // Tell our window that it should repaint itself (ie. emit an expose event)
    /* need to only call gtk_widget_queue_draw() if window is still valid / exists */
    gtk_widget_queue_draw(window);
    return( TRUE );
}

Я предполагаю, что должен быть какой-то способ проверить, является ли windowвсе еще активным и действительным?

5
задан Chimera 14 June 2012 в 18:15
поделиться