From 2dc62891c42229d26e0cb1b5c3fb6e37750c01d3 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Mon, 9 Jan 2006 00:12:49 +0000 Subject: [PATCH] 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 --- include/wx/app.h | 33 +++++++++++++++++---------------- src/common/appbase.cpp | 11 ----------- src/common/appcmn.cpp | 22 ++++++++++++++++++++++ 3 files changed, 39 insertions(+), 27 deletions(-) diff --git a/include/wx/app.h b/include/wx/app.h index 3996543145..38878cf44d 100644 --- a/include/wx/app.h +++ b/include/wx/app.h @@ -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 diff --git a/src/common/appbase.cpp b/src/common/appbase.cpp index 663e7ea670..fd408ab0d9 100644 --- a/src/common/appbase.cpp +++ b/src/common/appbase.cpp @@ -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 // ---------------------------------------------------------------------------- diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 1e30f70f15..e19c11697a 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -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 // ---------------------------------------------------------------------------- -- 2.45.2