From b93d8cc460d43840abb28f0f67f8c59c1af4bbd0 Mon Sep 17 00:00:00 2001 From: David Elliott Date: Wed, 13 Aug 2003 15:25:34 +0000 Subject: [PATCH] Don't send idle events while an assertion dialog is showing. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22800 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/cocoa/app.h | 10 ++++++++++ src/cocoa/app.mm | 40 +++++++++++++++++++++++++++++++--------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/include/wx/cocoa/app.h b/include/wx/cocoa/app.h index 8f4eb674f0..c658fbb3ae 100644 --- a/include/wx/cocoa/app.h +++ b/include/wx/cocoa/app.h @@ -61,6 +61,16 @@ public: virtual bool OnInit(); virtual bool OnInitGui(); + +#ifdef __WXDEBUG__ + virtual void OnAssert(const wxChar *file, int line, const wxChar *cond, const wxChar *msg); + bool IsInAssert() const { return m_isInAssert; } +#endif // __WXDEBUG__ + +private: +#ifdef __WXDEBUG__ + bool m_isInAssert; +#endif // __WXDEBUG__ }; #endif // _WX_COCOA_APP_H_ diff --git a/src/cocoa/app.mm b/src/cocoa/app.mm index fc253712db..fe12b0f00e 100644 --- a/src/cocoa/app.mm +++ b/src/cocoa/app.mm @@ -64,18 +64,27 @@ wxPoseAsInitializer *wxPoseAsInitializer::sm_first = NULL; { wxASSERT(wxTheApp); wxLogDebug("doIdle called"); - NSRunLoop *rl = [NSRunLoop currentRunLoop]; - // runMode: beforeDate returns YES if something was done - while(wxTheApp->ProcessIdle()) // FIXME: AND NO EVENTS ARE PENDING +#ifdef __WXDEBUG__ + if(wxTheApp->IsInAssert()) { - wxLogDebug("Looping for idle events"); - #if 1 - if( [rl runMode:[rl currentMode] beforeDate:[NSDate distantPast]]) + wxLogDebug("Idle events ignored durring assertion dialog"); + } + else +#endif + { + NSRunLoop *rl = [NSRunLoop currentRunLoop]; + // runMode: beforeDate returns YES if something was done + while(wxTheApp->ProcessIdle()) // FIXME: AND NO EVENTS ARE PENDING { - wxLogDebug("Found actual work to do"); - break; + wxLogDebug("Looping for idle events"); + #if 1 + if( [rl runMode:[rl currentMode] beforeDate:[NSDate distantPast]]) + { + wxLogDebug("Found actual work to do"); + break; + } + #endif } - #endif } wxLogDebug("Idle processing complete, requesting next idle event"); // Add ourself back into the run loop (on next event) if necessary @@ -175,6 +184,10 @@ wxApp::wxApp() #if WXWIN_COMPATIBILITY_2_2 m_wantDebugOutput = TRUE; #endif +#ifdef __WXDEBUG__ + m_isInAssert = FALSE; +#endif // __WXDEBUG__ + argc = 0; argv = NULL; @@ -309,3 +322,12 @@ bool wxApp::Yield(bool onlyIfNeeded) return true; } +#ifdef __WXDEBUG__ +void wxApp::OnAssert(const wxChar *file, int line, const wxChar* cond, const wxChar *msg) +{ + m_isInAssert = TRUE; + wxAppBase::OnAssert(file, line, cond, msg); + m_isInAssert = FALSE; +} +#endif // __WXDEBUG__ + -- 2.45.2