-#if wxUSE_THREADS
- // if we are not in the main thread,
- // output the assert directly and trap since dialogs cannot be displayed
- if (!wxThread::IsMain()) {
- wxStrcat(szBuf, wxT(" [in child thread]"));
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
- wxStrcat(szBuf, wxT("\r\n"));
- OutputDebugString(szBuf);
-#else
- // send to stderr
- wxFprintf(stderr, wxT("%s\n"), szBuf);
- fflush(stderr);
+ return needMore;
+}
+
+void wxAppBase::OnIdle(wxIdleEvent& WXUNUSED(event))
+{
+ // If there are pending events, we must process them: pending events
+ // are either events to the threads other than main or events posted
+ // with wxPostEvent() functions
+ // GRG: I have moved this here so that all pending events are processed
+ // before starting to delete any objects. This behaves better (in
+ // particular, wrt wxPostEvent) and is coherent with wxGTK's current
+ // behaviour. Changed Feb/2000 before 2.1.14
+ ProcessPendingEvents();
+
+ // 'Garbage' collection of windows deleted with Close().
+ DeletePendingObjects();
+
+#if wxUSE_LOG
+ // flush the logged messages if any
+ wxLog::FlushActive();
+#endif // wxUSE_LOG
+
+}
+
+// ----------------------------------------------------------------------------
+// exceptions support
+// ----------------------------------------------------------------------------
+
+#if wxUSE_EXCEPTIONS
+
+bool wxAppBase::OnExceptionInMainLoop()
+{
+ throw;
+
+ // some compilers are too stupid to know that we never return after throw
+#if defined(__DMC__) || (defined(_MSC_VER) && _MSC_VER < 1200)
+ return false;