From ec439571cb9a59dd3354e601a90ded95019f13a9 Mon Sep 17 00:00:00 2001 From: Paul Cornett Date: Fri, 8 Dec 2006 17:22:08 +0000 Subject: [PATCH] re-enable blocking of wx idle events when assert dialog is showing git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43866 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/gtk/app.cpp | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index a75f0f47b7..05cf17cf56 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -208,31 +208,32 @@ static inline void wxAddEmissionHook() static gint wxapp_idle_callback( gpointer WXUNUSED(data) ) { + // this does not look possible, but just in case... if (!wxTheApp) return false; + bool moreIdles = false; + #ifdef __WXDEBUG__ // don't generate the idle events while the assert modal dialog is shown, - // this completely confuses the apps which don't expect to be reentered - // from some safely-looking functions - if ( wxTheApp->IsInAssert() ) - return false; + // this matches the behavior of wxMSW + if (!wxTheApp->IsInAssert()) #endif // __WXDEBUG__ + { + // When getting called from GDK's time-out handler + // we are no longer within GDK's grab on the GUI + // thread so we must lock it here ourselves. + gdk_threads_enter(); - // When getting called from GDK's time-out handler - // we are no longer within GDK's grab on the GUI - // thread so we must lock it here ourselves. - gdk_threads_enter(); + // Send idle event to all who request them as long as + // no events have popped up in the event queue. + do { + moreIdles = wxTheApp->ProcessIdle(); + } while (moreIdles && gtk_events_pending() == 0); - bool moreIdles; - - // Send idle event to all who request them as long as - // no events have popped up in the event queue. - while ( (moreIdles = wxTheApp->ProcessIdle()) && gtk_events_pending() == 0) - ; - - // Release lock again - gdk_threads_leave(); + // Release lock again + gdk_threads_leave(); + } if (!moreIdles) { @@ -616,14 +617,13 @@ void wxApp::OnAssertFailure(const wxChar *file, const wxChar* cond, const wxChar *msg) { - // This doesn't seem to be required anymore. Indeed, - // it breaks any code from working after a suppressed - // assert. - // m_isInAssert = true; + + // block wx idle events while assert dialog is showing + m_isInAssert = true; wxAppBase::OnAssertFailure(file, line, func, cond, msg); - // m_isInAssert = false; + m_isInAssert = false; } #endif // __WXDEBUG__