+// ----------------------------------------------------------------------------
+// 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
+}
+