X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1e6feb95a79834836e88143b15d9f424ebe79621..9fe52545f5b4a21e3cdeab5d0aa8d9e6a91355c3:/src/gtk/app.cpp?ds=sidebyside diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index e2bdb2f344..cc85a29c9f 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -108,13 +108,13 @@ bool wxYield() g_isIdle = TRUE; } - while (gtk_events_pending()) - gtk_main_iteration(); - // disable log flushing from here because a call to wxYield() shouldn't // normally result in message boxes popping up &c wxLog::Suspend(); + while (gtk_events_pending()) + gtk_main_iteration(); + /* it's necessary to call ProcessIdle() to update the frames sizes which might have been changed (it also will update other things set from OnUpdateUI() which is a nice (and desired) side effect) */ @@ -194,7 +194,18 @@ gint wxapp_pending_callback( gpointer WXUNUSED(data) ) gint wxapp_idle_callback( gpointer WXUNUSED(data) ) { - if (!wxTheApp) return TRUE; + if (!wxTheApp) + return TRUE; + +#ifdef __WXDEBUG__ + if ( wxTheApp->IsInAssert() ) + { + // 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 + return FALSE; + } +#endif // __WXDEBUG__ // when getting called from GDK's time-out handler // we are no longer within GDK's grab on the GUI @@ -309,6 +320,11 @@ END_EVENT_TABLE() wxApp::wxApp() { + m_initialized = FALSE; +#ifdef __WXDEBUG__ + m_isInAssert = FALSE; +#endif // __WXDEBUG__ + m_idleTag = 0; wxapp_install_idle_handler(); @@ -850,3 +866,17 @@ wxApp::GetStdIcon(int which) const return wxIcon(error_xpm); } } + +#ifdef __WXDEBUG__ + +void wxApp::OnAssert(const wxChar *file, int line, const wxChar *msg) +{ + m_isInAssert = TRUE; + + wxAppBase::OnAssert(file, line, msg); + + m_isInAssert = FALSE; +} + +#endif // __WXDEBUG__ +