// wxWakeUpIdle
//-----------------------------------------------------------------------------
+static bool gs_WakeUpIdle = false;
+
void wxWakeUpIdle()
{
#if wxUSE_THREADS
wxMutexGuiEnter();
#endif
- if (g_isIdle)
+ if (g_isIdle) {
+ gs_WakeUpIdle = true;
wxapp_install_idle_handler();
+ gs_WakeUpIdle = false;
+ }
#if wxUSE_THREADS
if (!wxThread::IsMain())
void wxapp_install_idle_handler()
{
+ // GD: this assert is raised when using the thread sample (which works)
+ // so the test is probably not so easy. Can widget callbacks be
+ // triggered from child threads and, if so, for which widgets?
+ // wxASSERT_MSG( wxThread::IsMain() || gs_WakeUpIdle, wxT("attempt to install idle handler from widget callback in child thread (should be exclusively from wxWakeUpIdle)") );
+
wxASSERT_MSG( wxTheApp->m_idleTag == 0, wxT("attempt to install idle handler twice") );
g_isIdle = FALSE;
#if wxUSE_THREADS
delete wxPendingEvents;
+ wxPendingEvents = NULL;
delete wxPendingEventsLocker;
+ wxPendingEventsLocker = NULL;
#endif
// check for memory leaks
if (!wxOKlibc()) wxConvCurrent = (wxMBConv*) NULL;
#endif
- gdk_threads_enter();
-
gtk_init( &argc, &argv );
+ /* we can not enter threads before gtk_init is done */
+ gdk_threads_enter();
+
wxSetDetectableAutoRepeat( TRUE );
if (!wxApp::Initialize())