moved OnExceptionInMainLoop() from wxAppConsole to wxAppBase because

1. console apps have no main loop
2. in non-monolithic mingw32 build, rethrowing an exception thrown from the
   GUI in the base DLL doesn't work


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@36792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-01-09 00:12:49 +00:00
parent 57436bb7db
commit 2dc62891c4
3 changed files with 39 additions and 27 deletions

View File

@@ -116,20 +116,6 @@ public:
// crash.
virtual void OnFatalException() { }
#if wxUSE_EXCEPTIONS
// function called if an uncaught exception is caught inside the main
// event loop: it may return true to continue running the event loop or
// false to stop it (in the latter case it may rethrow the exception as
// well)
virtual bool OnExceptionInMainLoop();
// Called when an unhandled C++ exception occurs inside OnRun(): note that
// the exception type is lost by now, so if you really want to handle the
// exception you should override OnRun() and put a try/catch around
// MainLoop() call there
virtual void OnUnhandledException() { }
#endif // wxUSE_EXCEPTIONS
// Called from wxExit() function, should terminate the application a.s.a.p.
virtual void Exit();
@@ -237,6 +223,12 @@ public:
virtual void HandleEvent(wxEvtHandler *handler,
wxEventFunction func,
wxEvent& event) const;
// Called when an unhandled C++ exception occurs inside OnRun(): note that
// the exception type is lost by now, so if you really want to handle the
// exception you should override OnRun() and put a try/catch around
// MainLoop() call there or use OnExceptionInMainLoop()
virtual void OnUnhandledException() { }
#endif // wxUSE_EXCEPTIONS
// process all events in the wxPendingEvents list -- it is necessary to
@@ -430,8 +422,14 @@ public:
// Returns true if more idle time is requested.
virtual bool SendIdleEvents(wxWindow* win, wxIdleEvent& event);
// Perform standard OnIdle behaviour: call from port's OnIdle
void OnIdle(wxIdleEvent& event);
#if wxUSE_EXCEPTIONS
// Function called if an uncaught exception is caught inside the main
// event loop: it may return true to continue running the event loop or
// false to stop it (in the latter case it may rethrow the exception as
// well)
virtual bool OnExceptionInMainLoop();
#endif // wxUSE_EXCEPTIONS
// top level window functions
@@ -511,6 +509,9 @@ public:
// returns true if the program is successfully initialized
bool Initialized() { return true; }
// perform standard OnIdle behaviour, ensure that this is always called
void OnIdle(wxIdleEvent& event);
protected:
// delete all objects in wxPendingDelete list

View File

@@ -320,17 +320,6 @@ wxAppConsole::HandleEvent(wxEvtHandler *handler,
(handler->*func)(event);
}
bool
wxAppConsole::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;
#endif
}
#endif // wxUSE_EXCEPTIONS
// ----------------------------------------------------------------------------

View File

@@ -372,6 +372,10 @@ void wxAppBase::SetActive(bool active, wxWindow * WXUNUSED(lastFocus))
(void)ProcessEvent(event);
}
// ----------------------------------------------------------------------------
// idle handling
// ----------------------------------------------------------------------------
void wxAppBase::DeletePendingObjects()
{
wxList::compatibility_iterator node = wxPendingDelete.GetFirst();
@@ -463,6 +467,24 @@ void wxAppBase::OnIdle(wxIdleEvent& WXUNUSED(event))
}
// ----------------------------------------------------------------------------
// 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;
#endif
}
#endif // wxUSE_EXCEPTIONS
// ----------------------------------------------------------------------------
// wxGUIAppTraitsBase
// ----------------------------------------------------------------------------