// ----------------------------------------------------------------------------
// 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
m_useBestVisual = FALSE;
m_isActive = TRUE;
+#if wxUSE_EVTLOOP_IN_APP
m_mainLoop = NULL;
+#endif // wxUSE_EVTLOOP_IN_APP
// We don't want to exit the app if the user code shows a dialog from its
// OnInit() -- but this is what would happen if we set m_exitOnFrameDelete
delete wxTheColourDatabase;
wxTheColourDatabase = NULL;
-#if wxUSE_THREADS
delete wxPendingEvents;
wxPendingEvents = NULL;
+#if wxUSE_THREADS
delete wxPendingEventsLocker;
wxPendingEventsLocker = NULL;
int wxAppBase::MainLoop()
{
- wxTiedEventLoopPtr mainLoop(&m_mainLoop, new wxEventLoop);
+#if wxUSE_EVTLOOP_IN_APP
+ wxEventLoopTiedPtr mainLoop(&m_mainLoop, new wxEventLoop);
return m_mainLoop->Run();
+#else // !wxUSE_EVTLOOP_IN_APP
+ return 0;
+#endif // wxUSE_EVTLOOP_IN_APP/!wxUSE_EVTLOOP_IN_APP
}
void wxAppBase::ExitMainLoop()
{
+#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);
}
+#endif // wxUSE_EVTLOOP_IN_APP
}
bool wxAppBase::Pending()
{
+#if wxUSE_EVTLOOP_IN_APP
// use the currently active message loop here, not m_mainLoop, because if
// we're showing a modal dialog (with its own event loop) currently the
// main event loop is not running anyhow
wxEventLoop * const loop = wxEventLoop::GetActive();
return loop && loop->Pending();
+#else // wxUSE_EVTLOOP_IN_APP
+ return false;
+#endif // wxUSE_EVTLOOP_IN_APP/!wxUSE_EVTLOOP_IN_APP
}
bool wxAppBase::Dispatch()
{
+#if wxUSE_EVTLOOP_IN_APP
// 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
}
// ----------------------------------------------------------------------------
GSocketGUIFunctionsTable* wxGUIAppTraitsBase::GetSocketGUIFunctionsTable()
{
-#ifdef __WXMAC__
- // NB: wxMac does not have any GUI-specific functions in gsocket.c and
+#if defined(__WXMAC__) && !defined(__DARWIN__)
+ // NB: wxMac CFM does not have any GUI-specific functions in gsocket.c and
// so it doesn't need this table at all
return NULL;
-#else // !__WXMAC__
+#else // !__WXMAC__ || __DARWIN__
static GSocketGUIFunctionsTable table =
{
_GSocket_GUI_Init,
_GSocket_Disable_Events
};
return &table;
-#endif // __WXMAC__/!__WXMAC__
+#endif // !__WXMAC__ || __DARWIN__
}
#endif