return false;
}
+// add emission hook for "event" signal, to re-install idle handler when needed
static inline void wxAddEmissionHook()
{
- // add emission hook for "event" signal, to re-install idle handler when needed
- guint sig_id = g_signal_lookup("event", GTK_TYPE_WIDGET);
- g_signal_add_emission_hook(sig_id, 0, event_emission_hook, NULL, NULL);
+ GType widgetType = GTK_TYPE_WIDGET;
+ // if GtkWidget type is loaded
+ if (g_type_class_peek(widgetType) != NULL)
+ {
+ guint sig_id = g_signal_lookup("event", widgetType);
+ g_signal_add_emission_hook(sig_id, 0, event_emission_hook, NULL, NULL);
+ }
}
static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
// thread so we must lock it here ourselves.
gdk_threads_enter();
- // Indicate that we are now in idle mode and event handlers
- // will have to reinstall the idle handler again.
- {
-#if wxUSE_THREADS
- wxMutexLocker lock(gs_idleTagsMutex);
-#endif
- g_isIdle = true;
- wxTheApp->m_idleTag = 0;
- }
-
bool moreIdles;
// Send idle event to all who request them as long as
gdk_threads_leave();
if (!moreIdles)
+ {
+#if wxUSE_THREADS
+ wxMutexLocker lock(gs_idleTagsMutex);
+#endif
+ // Indicate that we are now in idle mode and event handlers
+ // will have to reinstall the idle handler again.
+ g_isIdle = true;
+ wxTheApp->m_idleTag = 0;
+
wxAddEmissionHook();
+ }
// Return FALSE if no more idle events are to be sent
return moreIdles;
void wxapp_install_idle_handler()
{
+ if (wxTheApp == NULL)
+ return;
+
#if wxUSE_THREADS
wxMutexLocker lock(gs_idleTagsMutex);
#endif