Factor out exception handling code in a new WXConsumeException()

This will allow using this code from other places and not only when executing
user-defined event handlers.

No changes in this commit yet.
This commit is contained in:
Vadim Zeitlin
2016-11-15 00:55:08 +01:00
parent fd9e71afb7
commit 239469457d
2 changed files with 67 additions and 46 deletions

View File

@@ -3386,6 +3386,18 @@ public:
// NOTE: uses AddPendingEvent(); call only from secondary threads
#endif
#if wxUSE_EXCEPTIONS
// This is a private function which handles any exceptions arising during
// the execution of user-defined code called in the event loop context by
// forwarding them to wxApp::OnExceptionInMainLoop() and, if it rethrows,
// to wxApp::OnUnhandledException(). In any case this function ensures that
// no exceptions ever escape from it and so is useful to call at module
// boundary.
//
// It must be only called when handling an active exception.
static void WXConsumeException();
#endif // wxUSE_EXCEPTIONS
#ifdef wxHAS_CALL_AFTER
// Asynchronous method calls: these methods schedule the given method
// pointer for a later call (during the next idle event loop iteration).

View File

@@ -1603,6 +1603,17 @@ bool wxEvtHandler::SafelyProcessEvent(wxEvent& event)
#if wxUSE_EXCEPTIONS
}
catch ( ... )
{
WXConsumeException();
return false;
}
#endif // wxUSE_EXCEPTIONS
}
#if wxUSE_EXCEPTIONS
/* static */
void wxEvtHandler::WXConsumeException()
{
wxEventLoopBase * const loop = wxEventLoopBase::GetActive();
try
@@ -1664,9 +1675,7 @@ bool wxEvtHandler::SafelyProcessEvent(wxEvent& event)
}
}
return false;
#endif // wxUSE_EXCEPTIONS
}
bool wxEvtHandler::SearchEventTable(wxEventTable& table, wxEvent& event)
{