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
This commit is contained in:
Paul Cornett
2006-12-08 17:22:08 +00:00
parent bf9a1615ed
commit ec439571cb

View File

@@ -208,31 +208,32 @@ static inline void wxAddEmissionHook()
static gint wxapp_idle_callback( gpointer WXUNUSED(data) ) static gint wxapp_idle_callback( gpointer WXUNUSED(data) )
{ {
// this does not look possible, but just in case...
if (!wxTheApp) if (!wxTheApp)
return false; return false;
bool moreIdles = false;
#ifdef __WXDEBUG__ #ifdef __WXDEBUG__
// don't generate the idle events while the assert modal dialog is shown, // 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 // this matches the behavior of wxMSW
// from some safely-looking functions if (!wxTheApp->IsInAssert())
if ( wxTheApp->IsInAssert() )
return false;
#endif // __WXDEBUG__ #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 // Send idle event to all who request them as long as
// we are no longer within GDK's grab on the GUI // no events have popped up in the event queue.
// thread so we must lock it here ourselves. do {
gdk_threads_enter(); moreIdles = wxTheApp->ProcessIdle();
} while (moreIdles && gtk_events_pending() == 0);
bool moreIdles; // Release lock again
gdk_threads_leave();
// 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();
if (!moreIdles) if (!moreIdles)
{ {
@@ -616,14 +617,13 @@ void wxApp::OnAssertFailure(const wxChar *file,
const wxChar* cond, const wxChar* cond,
const wxChar *msg) const wxChar *msg)
{ {
// This doesn't seem to be required anymore. Indeed,
// it breaks any code from working after a suppressed // block wx idle events while assert dialog is showing
// assert. m_isInAssert = true;
// m_isInAssert = true;
wxAppBase::OnAssertFailure(file, line, func, cond, msg); wxAppBase::OnAssertFailure(file, line, func, cond, msg);
// m_isInAssert = false; m_isInAssert = false;
} }
#endif // __WXDEBUG__ #endif // __WXDEBUG__