X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dd435a79ed2c79e20621fbe6b1013a86a9e05fed..74ebd40690d3676e74a7cfc239eee6c7e9764f05:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 778f5a2a7f..1e30f70f15 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: common/appcmn.cpp +// Name: src/common/appcmn.cpp // Purpose: wxAppConsole and wxAppBase methods common to all platforms // Author: Vadim Zeitlin // Modified by: @@ -17,10 +17,6 @@ // headers // --------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "appbase.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -48,7 +44,7 @@ #include "wx/ptr_scpd.h" #if defined(__WXMSW__) - #include "wx/msw/private.h" // includes windows.h for LOGFONT + #include "wx/msw/private.h" // includes windows.h for LOGFONT #endif #if wxUSE_FONTMAP @@ -65,7 +61,7 @@ WX_CHECK_BUILD_OPTIONS("wxCore") // ---------------------------------------------------------------------------- // this defines wxEventLoopPtr -wxDEFINE_TIED_SCOPED_PTR_TYPE(wxEventLoop); +wxDEFINE_TIED_SCOPED_PTR_TYPE(wxEventLoop) // ============================================================================ // wxAppBase implementation @@ -78,8 +74,8 @@ wxDEFINE_TIED_SCOPED_PTR_TYPE(wxEventLoop); wxAppBase::wxAppBase() { m_topWindow = (wxWindow *)NULL; - m_useBestVisual = FALSE; - m_isActive = TRUE; + m_useBestVisual = false; + m_isActive = true; #if wxUSE_EVTLOOP_IN_APP m_mainLoop = NULL; @@ -91,18 +87,18 @@ wxAppBase::wxAppBase() // OTOH, if we set it to No initially we'll have to overwrite it with Yes // when we enter our OnRun() because we do want the default behaviour from // then on. But this would be a problem if the user code calls - // SetExitOnFrameDelete(FALSE) from OnInit(). + // SetExitOnFrameDelete(false) from OnInit(). // // So we use the special "Later" value which is such that - // GetExitOnFrameDelete() returns FALSE for it but which we know we can + // GetExitOnFrameDelete() returns false for it but which we know we can // safely (i.e. without losing the effect of the users SetExitOnFrameDelete // call) overwrite in OnRun() m_exitOnFrameDelete = Later; } -bool wxAppBase::Initialize(int& argc, wxChar **argv) +bool wxAppBase::Initialize(int& argcOrig, wxChar **argvOrig) { - if ( !wxAppConsole::Initialize(argc, argv) ) + if ( !wxAppConsole::Initialize(argcOrig, argvOrig) ) return false; #if wxUSE_THREADS @@ -128,9 +124,19 @@ wxAppBase::~wxAppBase() void wxAppBase::CleanUp() { - // one last chance for pending objects to be cleaned up + // clean up all the pending objects DeletePendingObjects(); + // and any remaining TLWs (they remove themselves from wxTopLevelWindows + // when destroyed, so iterate until none are left) + while ( !wxTopLevelWindows.empty() ) + { + // do not use Destroy() here as it only puts the TLW in pending list + // but we want to delete them now + delete wxTopLevelWindows.GetFirst()->GetData(); + } + + // undo everything we did in Initialize() above wxBitmap::CleanUpHandlers(); wxDeleteStockObjects(); @@ -140,10 +146,10 @@ void wxAppBase::CleanUp() delete wxTheColourDatabase; wxTheColourDatabase = NULL; -#if wxUSE_THREADS delete wxPendingEvents; wxPendingEvents = NULL; +#if wxUSE_THREADS delete wxPendingEventsLocker; wxPendingEventsLocker = NULL; @@ -174,7 +180,7 @@ void wxAppBase::OnInitCmdLine(wxCmdLineParser& parser) #ifdef __WXUNIVERSAL__ { wxCMD_LINE_OPTION, - _T(""), + wxEmptyString, OPTION_THEME, gettext_noop("specify the theme to use"), wxCMD_LINE_VAL_STRING, @@ -188,7 +194,7 @@ void wxAppBase::OnInitCmdLine(wxCmdLineParser& parser) // and not mgl/app.cpp { wxCMD_LINE_OPTION, - _T(""), + wxEmptyString, OPTION_MODE, gettext_noop("specify display mode to use (e.g. 640x480-16)"), wxCMD_LINE_VAL_STRING, @@ -199,9 +205,9 @@ void wxAppBase::OnInitCmdLine(wxCmdLineParser& parser) // terminator { wxCMD_LINE_NONE, - _T(""), - _T(""), - _T(""), + wxEmptyString, + wxEmptyString, + wxEmptyString, wxCMD_LINE_VAL_NONE, 0x0 } @@ -220,7 +226,7 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) if ( !theme ) { wxLogError(_("Unsupported theme '%s'."), themeName.c_str()); - return FALSE; + return false; } // Delete the defaultly created theme and set the new theme. @@ -237,11 +243,11 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) if ( wxSscanf(modeDesc.c_str(), _T("%ux%u-%u"), &w, &h, &bpp) != 3 ) { wxLogError(_("Invalid display mode specification '%s'."), modeDesc.c_str()); - return FALSE; + return false; } - if ( !SetDisplayMode(wxDisplayModeInfo(w, h, bpp)) ) - return FALSE; + if ( !SetDisplayMode(wxVideoMode(w, h, bpp)) ) + return false; } #endif // __WXMGL__ @@ -311,10 +317,10 @@ bool wxAppBase::OnInitGui() { #ifdef __WXUNIVERSAL__ if ( !wxTheme::Get() && !wxTheme::CreateDefault() ) - return FALSE; + return false; #endif // __WXUNIVERSAL__ - return TRUE; + return true; } int wxAppBase::OnRun() @@ -384,34 +390,34 @@ void wxAppBase::DeletePendingObjects() } } -// Returns TRUE if more time is needed. +// Returns true if more time is needed. bool wxAppBase::ProcessIdle() { wxIdleEvent event; - bool needMore = FALSE; + bool needMore = false; wxWindowList::compatibility_iterator node = wxTopLevelWindows.GetFirst(); while (node) { wxWindow* win = node->GetData(); if (SendIdleEvents(win, event)) - needMore = TRUE; + needMore = true; node = node->GetNext(); } event.SetEventObject(this); (void) ProcessEvent(event); if (event.MoreRequested()) - needMore = TRUE; + needMore = true; wxUpdateUIEvent::ResetUpdateTime(); - + return needMore; } // Send idle event to window and all subwindows bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event) { - bool needMore = FALSE; + bool needMore = false; win->OnInternalIdle(); @@ -421,14 +427,14 @@ bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event) win->GetEventHandler()->ProcessEvent(event); if (event.MoreRequested()) - needMore = TRUE; + needMore = true; } wxWindowList::compatibility_iterator node = win->GetChildren().GetFirst(); while ( node ) { wxWindow *child = node->GetData(); if (SendIdleEvents(child, event)) - needMore = TRUE; + needMore = true; node = node->GetNext(); } @@ -465,7 +471,12 @@ void wxAppBase::OnIdle(wxIdleEvent& WXUNUSED(event)) wxLog *wxGUIAppTraitsBase::CreateLogTarget() { +#if wxUSE_LOGGUI return new wxLogGui; +#else + // we must have something! + return new wxLogStderr; +#endif } #endif // wxUSE_LOG @@ -521,7 +532,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: @@ -565,45 +576,32 @@ void wxGUIAppTraitsBase::RemoveFromPendingDelete(wxObject *object) #if wxUSE_SOCKETS -#if defined(__UNIX__) || defined(__DARWIN__) || defined(__OS2__) - #include "wx/unix/gsockunx.h" -#elif defined(__WINDOWS__) +#if defined(__WINDOWS__) #include "wx/msw/gsockmsw.h" +#elif defined(__UNIX__) || defined(__DARWIN__) || defined(__OS2__) + #include "wx/unix/gsockunx.h" #elif defined(__WXMAC__) - #include - #define OTUNIXERRORS 1 - #include - #include - #include + #include + #define OTUNIXERRORS 1 + #include + #include + #include - #include "wx/mac/gsockmac.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 // !__WXMAC__ - static GSocketGUIFunctionsTable table = - { - _GSocket_GUI_Init, - _GSocket_GUI_Cleanup, - _GSocket_GUI_Init_Socket, - _GSocket_GUI_Destroy_Socket, -#ifndef __WINDOWS__ - _GSocket_Install_Callback, - _GSocket_Uninstall_Callback, -#endif - _GSocket_Enable_Events, - _GSocket_Disable_Events - }; +#else // !__WXMAC__ || __DARWIN__ + static GSocketGUIFunctionsTableConcrete table; return &table; -#endif // __WXMAC__/!__WXMAC__ +#endif // !__WXMAC__ || __DARWIN__ } #endif -