#include "wx/apptrait.h"
#include "wx/cmdline.h"
+#include "wx/evtloop.h"
#include "wx/msgout.h"
#include "wx/thread.h"
#include "wx/utils.h"
+#include "wx/ptr_scpd.h"
#if defined(__WXMSW__)
#include "wx/msw/private.h" // includes windows.h for LOGFONT
#include "wx/build.h"
WX_CHECK_BUILD_OPTIONS("wxCore")
+
+// ----------------------------------------------------------------------------
+// wxEventLoopPtr
+// ----------------------------------------------------------------------------
+
+// this defines wxEventLoopPtr
+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
// to Yes initially as this dialog would be the last top level window.
delete wxTheColourDatabase;
wxTheColourDatabase = NULL;
-#if wxUSE_THREADS
delete wxPendingEvents;
wxPendingEvents = NULL;
+#if wxUSE_THREADS
delete wxPendingEventsLocker;
wxPendingEventsLocker = NULL;
#endif // wxUSE_CMDLINE_PARSER
+// ----------------------------------------------------------------------------
+// main event loop implementation
+// ----------------------------------------------------------------------------
+
+int wxAppBase::MainLoop()
+{
+#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 && 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();
+#else // wxUSE_EVTLOOP_IN_APP
+ return true;
+#endif // wxUSE_EVTLOOP_IN_APP/!wxUSE_EVTLOOP_IN_APP
+}
+
// ----------------------------------------------------------------------------
// OnXXX() hooks
// ----------------------------------------------------------------------------
wxIdleEvent event;
bool needMore = FALSE;
wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst();
- node = wxTopLevelWindows.GetFirst();
while (node)
{
wxWindow* win = node->GetData();
#include "wx/unix/gsockunx.h"
#elif defined(__WINDOWS__)
#include "wx/msw/gsockmsw.h"
+#elif defined(__WXMAC__)
+ #include <MacHeaders.c>
+ #define OTUNIXERRORS 1
+ #include <OpenTransport.h>
+ #include <OpenTransportProviders.h>
+ #include <OpenTptInternet.h>
+
+ #include "wx/mac/gsockmac.h"
#else
#error "Must include correct GSocket header here"
#endif
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
+#else // !__WXMAC__ || __DARWIN__
static GSocketGUIFunctionsTable table =
{
_GSocket_GUI_Init,
_GSocket_Disable_Events
};
return &table;
-#endif
+#endif // !__WXMAC__ || __DARWIN__
}
#endif