У меня есть код Gtk+
, написанный на C
, который делает некоторую анимацию с использованием Cairo
и таймера. Большую часть времени, когда я нажимаю на значок закрытия приложения, я получаю следующее сообщение на терминале:Как определить, был ли виджет GTK уничтожен
Gtk-ВАЖНЫЙ **: gtk_widget_queue_draw: утверждение `GTK_IS_WIDGET (виджета)» не удалось
Теперь я предполагаю, что это происходит, потому что на момент закрытия приложения таймер запускается, а виджет главного окна доступен, но с тех пор был уничтожен. Каков обычный метод определения, действительно ли виджет 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
все еще активен и действует?
Спасибо, Родриго за ваш очень подробный ответ. Я многому научился и ценю это. – Chimera
Вау, какой отличный ответ. –
Очень воспитательный ответ, +1! – Nelson