X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a69be60b0f1dac4713e6650ca3ca9fe5a53de062..1be0560eff23c7b22cd31783df78266f362b5708:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index 6177cbcc67..25bda2572b 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -121,9 +121,6 @@ bool wxAppBase::OnInitGui() #ifdef __WXUNIVERSAL__ if ( !wxTheme::Get() && !wxTheme::CreateDefault() ) return FALSE; - wxArtProvider *art = wxTheme::Get()->GetArtProvider(); - if ( art ) - wxArtProvider::PushProvider(art); #endif // __WXUNIVERSAL__ return TRUE; @@ -215,10 +212,10 @@ void wxAppBase::ProcessPendingEvents() } // iterate until the list becomes empty - wxNode *node = wxPendingEvents->First(); + wxNode *node = wxPendingEvents->GetFirst(); while (node) { - wxEvtHandler *handler = (wxEvtHandler *)node->Data(); + wxEvtHandler *handler = (wxEvtHandler *)node->GetData(); delete node; // In ProcessPendingEvents(), new handlers might be add @@ -227,7 +224,7 @@ void wxAppBase::ProcessPendingEvents() handler->ProcessPendingEvents(); wxENTER_CRIT_SECT( *wxPendingEventsLocker ); - node = wxPendingEvents->First(); + node = wxPendingEvents->GetFirst(); } wxLEAVE_CRIT_SECT( *wxPendingEventsLocker ); @@ -381,10 +378,11 @@ bool wxAppBase::OnCmdLineParsed(wxCmdLineParser& parser) if ( !theme ) { wxLogError(_("Unsupported theme '%s'."), themeName.c_str()); - return FALSE; } + // Delete the defaultly created theme and set the new theme. + delete wxTheme::Get(); wxTheme::Set(theme); } #endif // __WXUNIVERSAL__ @@ -397,7 +395,6 @@ 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; } @@ -446,8 +443,23 @@ bool wxAppBase::CheckBuildOptions(const wxBuildOptions& opts) if ( !(wxCMP(isDebug) && wxCMP(verMaj) && wxCMP(verMin)) ) { - wxLogFatalError(_T("Mismatch between the program and library build ") - _T("versions detected.")); + wxString msg; + wxString libDebug, progDebug; + + if (isDebug) + libDebug = wxT("debug"); + else + libDebug = wxT("no debug"); + + if (opts.m_isDebug) + progDebug = wxT("debug"); + else + progDebug = wxT("no debug"); + + msg.Printf(_T("Mismatch between the program and library build versions detected.\nThe library used %d.%d (%s), and your program used %d.%d (%s)."), + verMaj, verMin, libDebug.c_str(), opts.m_verMaj, opts.m_verMin, progDebug.c_str()); + + wxLogFatalError(msg); // normally wxLogFatalError doesn't return return FALSE; @@ -461,6 +473,7 @@ bool wxAppBase::CheckBuildOptions(const wxBuildOptions& opts) static void LINKAGEMODE SetTraceMasks() { +#if wxUSE_LOG wxString mask; if ( wxGetEnv(wxT("WXTRACE"), &mask) ) { @@ -468,6 +481,7 @@ static void LINKAGEMODE SetTraceMasks() while ( tkn.HasMoreTokens() ) wxLog::AddTraceMask(tkn.GetNextToken()); } +#endif // wxUSE_LOG } // wxASSERT() helper @@ -494,6 +508,17 @@ void wxTrap() #endif // Win/Unix } + +void wxAssert(int cond, + const wxChar *szFile, + int nLine, + const wxChar *szCond, + const wxChar *szMsg) +{ + if ( !cond ) + wxOnAssert(szFile, nLine, szCond, szMsg); +} + // show the assert modal dialog static void ShowAssertDialog(const wxChar *szFile, @@ -523,6 +548,24 @@ void ShowAssertDialog(const wxChar *szFile, wxStrcat(szBuf, wxT(".")); } +#if wxUSE_THREADS + // if we are not in the main thread, + // output the assert directly and trap since dialogs cannot be displayed + if (!wxThread::IsMain()) { + wxStrcat(szBuf, wxT(" [in child thread]")); +#if defined(__WXMSW__) && !defined(__WXMICROWIN__) + wxStrcat(szBuf, wxT("\r\n")); + OutputDebugString(szBuf); +#else + // send to stderr + wxFprintf(stderr, wxT("%s\n"), szBuf); + fflush(stderr); +#endif + // He-e-e-e-elp!! we're asserting in a child thread + wxTrap(); + } +#endif // wxUSE_THREADS + if ( !s_bNoAsserts ) { // send it to the normal log destination