// ----------------------------------------------------------------------------
// this defines wxEventLoopPtr
-wxDEFINE_SCOPED_PTR_TYPE(wxEventLoop);
-
-// but we need a smart pointer tied to wxAppBase::m_mainLoop, so we define
-// another helper class
-class wxTiedEventLoopPtr : public wxEventLoopPtr
-{
-public:
- wxTiedEventLoopPtr(wxEventLoop **ppEvtLoop, wxEventLoop *pLoop)
- : wxEventLoopPtr(*ppEvtLoop = pLoop), m_ppEvtLoop(ppEvtLoop)
- {
- }
-
- ~wxTiedEventLoopPtr() { *m_ppEvtLoop = NULL; }
-
-private:
- wxEventLoop **m_ppEvtLoop;
-};
+wxDEFINE_TIED_SCOPED_PTR_TYPE(wxEventLoop);
// ============================================================================
// wxAppBase implementation
delete wxTheColourDatabase;
wxTheColourDatabase = NULL;
-#if wxUSE_THREADS
delete wxPendingEvents;
wxPendingEvents = NULL;
+#if wxUSE_THREADS
delete wxPendingEventsLocker;
wxPendingEventsLocker = NULL;
int wxAppBase::MainLoop()
{
#if wxUSE_EVTLOOP_IN_APP
- wxTiedEventLoopPtr mainLoop(&m_mainLoop, new wxEventLoop);
+ wxEventLoopTiedPtr mainLoop(&m_mainLoop, new wxEventLoop);
return m_mainLoop->Run();
#else // !wxUSE_EVTLOOP_IN_APP
#if wxUSE_EVTLOOP_IN_APP
// we should exit from the main event loop, not just any currently active
// (e.g. modal dialog) event loop
- if ( m_mainLoop )
+ if ( m_mainLoop && m_mainLoop->IsRunning() )
{
m_mainLoop->Exit(0);
}
// see comment in Pending()
wxEventLoop * const loop = wxEventLoop::GetActive();
- return loop ? loop->Dispatch() : true;
+ return loop && loop->Dispatch();
#else // wxUSE_EVTLOOP_IN_APP
return true;
#endif // wxUSE_EVTLOOP_IN_APP/!wxUSE_EVTLOOP_IN_APP