X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1bf77ee556a5418059139305e9edb05bde9b8a1d..f43bb7e246603413a43382e43e480972687eca92:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 7bb2873177..20699cb688 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -65,23 +65,7 @@ WX_CHECK_BUILD_OPTIONS("wxCore") // ---------------------------------------------------------------------------- // 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 @@ -97,7 +81,9 @@ wxAppBase::wxAppBase() 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 @@ -154,10 +140,10 @@ void wxAppBase::CleanUp() delete wxTheColourDatabase; wxTheColourDatabase = NULL; -#if wxUSE_THREADS delete wxPendingEvents; wxPendingEvents = NULL; +#if wxUSE_THREADS delete wxPendingEventsLocker; wxPendingEventsLocker = NULL; @@ -254,7 +240,7 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) return FALSE; } - if ( !SetDisplayMode(wxDisplayModeInfo(w, h, bpp)) ) + if ( !SetDisplayMode(wxVideoMode(w, h, bpp)) ) return FALSE; } #endif // __WXMGL__ @@ -270,37 +256,51 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) 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 } // ---------------------------------------------------------------------------- @@ -465,7 +465,12 @@ void wxAppBase::OnIdle(wxIdleEvent& WXUNUSED(event)) wxLog *wxGUIAppTraitsBase::CreateLogTarget() { +#if wxUSE_LOGGUI return new wxLogGui; +#else + // wem ust have something! + return new wxLogStderr; +#endif } #endif // wxUSE_LOG @@ -521,7 +526,7 @@ bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg) wxT("You can also choose [Cancel] to suppress ") wxT("further warnings."); - switch ( wxMessageBox(msgDlg, wxT("wxWindows Debug Alert"), + switch ( wxMessageBox(msgDlg, wxT("wxWidgets Debug Alert"), wxYES_NO | wxCANCEL | wxICON_STOP ) ) { case wxYES: @@ -583,11 +588,11 @@ void wxGUIAppTraitsBase::RemoveFromPendingDelete(wxObject *object) 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, @@ -602,7 +607,7 @@ GSocketGUIFunctionsTable* wxGUIAppTraitsBase::GetSocketGUIFunctionsTable() _GSocket_Disable_Events }; return &table; -#endif // __WXMAC__/!__WXMAC__ +#endif // !__WXMAC__ || __DARWIN__ } #endif