X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7c9955d147ed92cdd79d795ed94d6e03fca06a52..47be989f6bee132748c4051577251e72c0b0c045:/src/gtk/app.cpp diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index ff2211ebbf..bc09ab8263 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -168,6 +168,8 @@ bool wxApp::Yield(bool onlyIfNeeded) // wxWakeUpIdle //----------------------------------------------------------------------------- +static bool gs_WakeUpIdle = false; + void wxWakeUpIdle() { #if wxUSE_THREADS @@ -175,8 +177,11 @@ void wxWakeUpIdle() wxMutexGuiEnter(); #endif - if (g_isIdle) + if (g_isIdle) { + gs_WakeUpIdle = true; wxapp_install_idle_handler(); + gs_WakeUpIdle = false; + } #if wxUSE_THREADS if (!wxThread::IsMain()) @@ -361,6 +366,11 @@ static gint wxapp_poll_func( GPollFD *ufds, guint nfds, gint timeout ) 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; @@ -733,7 +743,9 @@ void wxApp::CleanUp() #if wxUSE_THREADS delete wxPendingEvents; + wxPendingEvents = NULL; delete wxPendingEventsLocker; + wxPendingEventsLocker = NULL; #endif // check for memory leaks