X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0055cc0e4a21e460eab83a79269f3fe5b0037239..a01d6442f4dcf2d30d52e50bc8c8410066f76265:/src/common/appcmn.cpp diff --git a/src/common/appcmn.cpp b/src/common/appcmn.cpp index ea3a17c7c9..844aec1f42 100644 --- a/src/common/appcmn.cpp +++ b/src/common/appcmn.cpp @@ -128,8 +128,7 @@ void wxAppBase::CleanUp() wxDeleteStockLists(); - delete wxTheColourDatabase; - wxTheColourDatabase = NULL; + wxDELETE(wxTheColourDatabase); wxAppConsole::CleanUp(); } @@ -399,7 +398,11 @@ bool wxAppBase::SendIdleEvents(wxWindow* win, wxIdleEvent& event) wxLog *wxGUIAppTraitsBase::CreateLogTarget() { #if wxUSE_LOGGUI +#ifndef __WXOSX_IPHONE__ return new wxLogGui; +#else + return new wxLogStderr; +#endif #else // we must have something! return new wxLogStderr; @@ -447,6 +450,7 @@ wxRendererNative *wxGUIAppTraitsBase::CreateRenderer() bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg) { +#if wxDEBUG_LEVEL // under MSW we prefer to use the base class version using ::MessageBox() // even if wxMessageBox() is available because it has less chances to // double fault our app than our wxMessageBox() @@ -455,50 +459,46 @@ bool wxGUIAppTraitsBase::ShowAssertDialog(const wxString& msg) // // and finally we can't use wxMessageBox() if it wasn't compiled in, of // course -#if defined(__WXMSW__) || defined(__WXDFB__) || !wxUSE_MSGDLG - return wxAppTraitsBase::ShowAssertDialog(msg); -#else // wxUSE_MSGDLG -#if wxDEBUG_LEVEL - wxString msgDlg = msg; +#if !defined(__WXMSW__) && !defined(__WXDFB__) && wxUSE_MSGDLG + + // we can't (safely) show the GUI dialog from another thread, only do it + // for the asserts in the main thread + if ( wxIsMainThread() ) + { + wxString msgDlg = msg; #if wxUSE_STACKWALKER - // on Unix stack frame generation may take some time, depending on the - // size of the executable mainly... warn the user that we are working - wxFprintf(stderr, wxT("[Debug] Generating a stack trace... please wait")); - fflush(stderr); - - const wxString stackTrace = GetAssertStackTrace(); - if ( !stackTrace.empty() ) - msgDlg << wxT("\n\nCall stack:\n") << stackTrace; + const wxString stackTrace = GetAssertStackTrace(); + if ( !stackTrace.empty() ) + msgDlg << wxT("\n\nCall stack:\n") << stackTrace; #endif // wxUSE_STACKWALKER - // this message is intentionally not translated -- it is for - // developpers only - msgDlg += wxT("\nDo you want to stop the program?\n") - wxT("You can also choose [Cancel] to suppress ") - wxT("further warnings."); + // this message is intentionally not translated -- it is for + // developpers only + msgDlg += wxT("\nDo you want to stop the program?\n") + wxT("You can also choose [Cancel] to suppress ") + wxT("further warnings."); - switch ( wxMessageBox(msgDlg, wxT("wxWidgets Debug Alert"), - wxYES_NO | wxCANCEL | wxICON_STOP ) ) - { - case wxYES: - wxTrap(); - break; + switch ( wxMessageBox(msgDlg, wxT("wxWidgets Debug Alert"), + wxYES_NO | wxCANCEL | wxICON_STOP ) ) + { + case wxYES: + wxTrap(); + break; - case wxCANCEL: - // no more asserts - return true; + case wxCANCEL: + // no more asserts + return true; + + //case wxNO: nothing to do + } - //case wxNO: nothing to do + return false; } -#else // !wxDEBUG_LEVEL - // this function always exists (for ABI compatibility) but is never called - // if debug level is 0 and so can simply do nothing then - wxUnusedVar(msg); -#endif // wxDEBUG_LEVEL/!wxDEBUG_LEVEL +#endif // wxUSE_MSGDLG +#endif // wxDEBUG_LEVEL - return false; -#endif // !wxUSE_MSGDLG/wxUSE_MSGDLG + return wxAppTraitsBase::ShowAssertDialog(msg); } bool wxGUIAppTraitsBase::HasStderr()