X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3185abc27836dab3e27221ec60e52fddc984e76b..af7e24c33e1e6e00a7687ee965b921dbe60cdb36:/src/common/appbase.cpp diff --git a/src/common/appbase.cpp b/src/common/appbase.cpp index 0ca0620db1..f2bed9aca8 100644 --- a/src/common/appbase.cpp +++ b/src/common/appbase.cpp @@ -154,6 +154,10 @@ wxAppConsoleBase::wxAppConsoleBase() wxAppConsoleBase::~wxAppConsoleBase() { + // we're being destroyed and using this object from now on may not work or + // even crash so don't leave dangling pointers to it + ms_appInstance = NULL; + delete m_traits; } @@ -161,21 +165,45 @@ wxAppConsoleBase::~wxAppConsoleBase() // initialization/cleanup // ---------------------------------------------------------------------------- -bool wxAppConsoleBase::Initialize(int& WXUNUSED(argc), wxChar **argv) +bool wxAppConsoleBase::Initialize(int& WXUNUSED(argc), wxChar **WXUNUSED(argv)) { #if wxUSE_INTL GetTraits()->SetLocale(); #endif // wxUSE_INTL + return true; +} + +wxString wxAppConsoleBase::GetAppName() const +{ + wxString name = m_appName; #ifndef __WXPALMOS__ - if ( m_appName.empty() && argv && argv[0] ) + if ( name.empty() ) { - // the application name is, by default, the name of its executable file - wxFileName::SplitPath(argv[0], NULL, &m_appName, NULL); + if ( argv ) + { + // the application name is, by default, the name of its executable file + wxFileName::SplitPath(argv[0], NULL, &name, NULL); + } } #endif // !__WXPALMOS__ + return name; +} - return true; +wxString wxAppConsoleBase::GetAppDisplayName() const +{ + // use the explicitly provided display name, if any + if ( !m_appDisplayName.empty() ) + return m_appDisplayName; + + // if the application name was explicitly set, use it as is as capitalizing + // it won't always produce good results + if ( !m_appName.empty() ) + return m_appName; + + // if neither is set, use the capitalized version of the program file as + // it's the most reasonable default + return GetAppName().Capitalize(); } wxEventLoopBase *wxAppConsoleBase::CreateMainLoop() @@ -266,7 +294,7 @@ wxAppTraits *wxAppConsoleBase::GetTraits() { m_traits = CreateTraits(); - wxASSERT_MSG( m_traits, _T("wxApp::CreateTraits() failed?") ); + wxASSERT_MSG( m_traits, wxT("wxApp::CreateTraits() failed?") ); } return m_traits; @@ -340,6 +368,12 @@ bool wxAppConsoleBase::ProcessIdle() event.SetEventObject(this); ProcessEvent(event); +#if wxUSE_LOG + // flush the logged messages if any (do this after processing the events + // which could have logged new messages) + wxLog::FlushActive(); +#endif + return event.MoreRequested(); } @@ -706,7 +740,7 @@ bool wxAppConsoleBase::CheckBuildOptions(const char *optionsSignature, wxString progName = wxString::FromAscii(componentName); wxString msg; - msg.Printf(_T("Mismatch between the program and library build versions detected.\nThe library used %s,\nand %s used %s."), + msg.Printf(wxT("Mismatch between the program and library build versions detected.\nThe library used %s,\nand %s used %s."), lib.c_str(), progName.c_str(), prog.c_str()); wxLogFatalError(msg.c_str()); @@ -850,7 +884,7 @@ bool wxAppTraitsBase::ShowAssertDialog(const wxString& msgOriginal) const wxString stackTrace = GetAssertStackTrace(); if ( !stackTrace.empty() ) - msg << _T("\n\nCall stack:\n") << stackTrace; + msg << wxT("\n\nCall stack:\n") << stackTrace; #endif // wxUSE_STACKWALKER return DoShowAssertDialog(msg); @@ -879,29 +913,29 @@ wxString wxAppTraitsBase::GetAssertStackTrace() { m_stackTrace << wxString::Format ( - _T("[%02d] "), + wxT("[%02d] "), wx_truncate_cast(int, frame.GetLevel()) ); wxString name = frame.GetName(); if ( !name.empty() ) { - m_stackTrace << wxString::Format(_T("%-40s"), name.c_str()); + m_stackTrace << wxString::Format(wxT("%-40s"), name.c_str()); } else { - m_stackTrace << wxString::Format(_T("%p"), frame.GetAddress()); + m_stackTrace << wxString::Format(wxT("%p"), frame.GetAddress()); } if ( frame.HasSourceLocation() ) { - m_stackTrace << _T('\t') + m_stackTrace << wxT('\t') << frame.GetFileName() - << _T(':') + << wxT(':') << frame.GetLine(); } - m_stackTrace << _T('\n'); + m_stackTrace << wxT('\n'); } private: @@ -1016,6 +1050,11 @@ wxDefaultAssertHandler(const wxString& file, wxAssertHandler_t wxTheAssertHandler = wxDefaultAssertHandler; +void wxSetDefaultAssertHandler() +{ + wxTheAssertHandler = wxDefaultAssertHandler; +} + void wxOnAssert(const wxString& file, int line, const wxString& func, @@ -1133,7 +1172,7 @@ bool DoShowAssertDialog(const wxString& msg) wxT("You can also choose [Cancel] to suppress ") wxT("further warnings."); - switch ( ::MessageBox(NULL, msgDlg.wx_str(), _T("wxWidgets Debug Alert"), + switch ( ::MessageBox(NULL, msgDlg.wx_str(), wxT("wxWidgets Debug Alert"), MB_YESNOCANCEL | MB_ICONSTOP ) ) { case IDYES: @@ -1180,16 +1219,16 @@ void ShowAssertDialog(const wxString& file, // add the function name, if any if ( !func.empty() ) - msg << _T(" in ") << func << _T("()"); + msg << wxT(" in ") << func << wxT("()"); // and the message itself if ( !msgUser.empty() ) { - msg << _T(": ") << msgUser; + msg << wxT(": ") << msgUser; } else // no message given { - msg << _T('.'); + msg << wxT('.'); } #if wxUSE_THREADS @@ -1216,7 +1255,7 @@ void ShowAssertDialog(const wxString& file, if ( !s_bNoAsserts ) { // send it to the normal log destination - wxLogDebug(_T("%s"), msg.c_str()); + wxLogDebug(wxT("%s"), msg.c_str()); if ( traits ) {