#include "wx/thread.h"
#include "wx/utils.h"
#include "wx/ptr_scpd.h"
+#include "wx/evtloop.h"
#if defined(__WXMSW__)
#include "wx/msw/private.h" // includes windows.h for LOGFONT
// ----------------------------------------------------------------------------
// this defines wxEventLoopPtr
+#if wxUSE_EVTLOOP_IN_APP
wxDEFINE_TIED_SCOPED_PTR_TYPE(wxEventLoop)
+#endif
// ============================================================================
// wxAppBase implementation
}
+// ----------------------------------------------------------------------------
+// exception handling
+// ----------------------------------------------------------------------------
+
+#if wxUSE_EXCEPTIONS
+
+void wxAppBase::HandleEvent(wxEvtHandler *handler,
+ wxEventFunction func,
+ wxEvent& event) const
+{
+ // by default, call wxApp::OnExceptionInMainLoop if an exception occurs
+ try
+ {
+ handler->DoHandleEvent(func, event);
+ }
+ catch ( ... )
+ {
+ if ( !wxConstCast(this, wxAppBase)->OnExceptionInMainLoop() )
+ {
+#if wxUSE_EVTLOOP_IN_APP
+ wxEventLoop *loop = wxEventLoop::GetActive();
+ if ( loop )
+ loop->Exit(-1);
+#else
+ wxConstCast(this, wxAppBase)->ExitMainLoop();
+#endif
+ }
+ //else: continue running the event loop
+ }
+}
+
+#endif // wxUSE_EXCEPTIONS
+
// ----------------------------------------------------------------------------
// wxGUIAppTraitsBase
// ----------------------------------------------------------------------------