]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/log.cpp
wxMessageBox off the main thread lost result code.
[wxWidgets.git] / src / common / log.cpp
index 7cc809d803653468d3edb89fdc12f390e36ca501..3180f46743c2c80d9c12a16c0fd9d70e490a0521 100644 (file)
@@ -4,7 +4,6 @@
 // Author:      Vadim Zeitlin
 // Modified by:
 // Created:     29/01/98
-// RCS-ID:      $Id$
 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
 #include <stdlib.h>
 
-#ifndef __WXPALMOS5__
 #ifndef __WXWINCE__
 #include <time.h>
 #else
 #include "wx/msw/wince/time.h"
 #endif
-#endif /* ! __WXPALMOS5__ */
 
 #if defined(__WINDOWS__)
     #include "wx/msw/private.h" // includes windows.h
@@ -90,8 +87,6 @@ const char *wxLOG_COMPONENT = "";
 
 #if wxUSE_THREADS
 
-wxTLS_TYPE(wxThreadSpecificInfo) wxThreadInfoVar;
-
 namespace
 {
 
@@ -217,9 +212,9 @@ wxLogFormatter::Format(wxLogLevel level,
 
     // don't time stamp debug messages under MSW as debug viewers usually
     // already have an option to do it
-#ifdef __WXMSW__
+#ifdef __WINDOWS__
     if ( level != wxLOG_Debug && level != wxLOG_Trace )
-#endif // __WXMSW__
+#endif // __WINDOWS__
         prefix = FormatTime(info.timestamp);
 
     switch ( level )
@@ -234,7 +229,7 @@ wxLogFormatter::Format(wxLogLevel level,
 
         // don't prepend "debug/trace" prefix under MSW as it goes to the debug
         // window anyhow and so can't be confused with something else
-#ifndef __WXMSW__
+#ifndef __WINDOWS__
     case wxLOG_Debug:
         // this prefix (as well as the one below) is intentionally not
         // translated as nobody translates debug messages anyhow
@@ -244,7 +239,7 @@ wxLogFormatter::Format(wxLogLevel level,
     case wxLOG_Trace:
         prefix += "Trace: ";
         break;
-#endif // !__WXMSW__
+#endif // !__WINDOWS__
     }
 
     return prefix + msg;
@@ -355,11 +350,7 @@ wxLog::OnLog(wxLogLevel level,
     {
         wxSafeShowMessage(wxS("Fatal Error"), msg);
 
-#ifdef __WXWINCE__
-        ExitThread(3);
-#else
-        abort();
-#endif
+        wxAbort();
     }
 
     wxLog *logger;
@@ -862,8 +853,10 @@ wxLogStderr::wxLogStderr(FILE *fp)
 
 void wxLogStderr::DoLogText(const wxString& msg)
 {
-    wxFputs(msg + '\n', m_fp);
-    fflush(m_fp);
+    // First send it to stderr, even if we don't have it (e.g. in a Windows GUI
+    // application under) it's not a problem to try to use it and it's easier
+    // than determining whether we do have it or not.
+    wxMessageOutputStderr(m_fp).Output(msg);
 
     // under GUI systems such as Windows or Mac, programs usually don't have
     // stderr at all, so show the messages also somewhere else, typically in
@@ -908,7 +901,14 @@ wxLogChain::wxLogChain(wxLog *logger)
     m_bPassMessages = true;
 
     m_logNew = logger;
-    m_logOld = wxLog::SetActiveTarget(this);
+
+    // Notice that we use GetActiveTarget() here instead of directly calling
+    // SetActiveTarget() to trigger wxLog auto-creation: if we're created as
+    // the first logger, we should still chain with the standard, implicit and
+    // possibly still not created standard logger instead of disabling normal
+    // logging entirely.
+    m_logOld = wxLog::GetActiveTarget();
+    wxLog::SetActiveTarget(this);
 }
 
 wxLogChain::~wxLogChain()
@@ -1054,7 +1054,7 @@ static void wxLogWrap(FILE *f, const char *pszPrefix, const char *psz)
 // get error code from syste
 unsigned long wxSysErrorCode()
 {
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
     return ::GetLastError();
 #else   //Unix
     return errno;
@@ -1067,7 +1067,7 @@ const wxChar *wxSysErrorMsg(unsigned long nErrCode)
     if ( nErrCode == 0 )
         nErrCode = wxSysErrorCode();
 
-#if defined(__WXMSW__) && !defined(__WXMICROWIN__)
+#if defined(__WINDOWS__) && !defined(__WXMICROWIN__)
     static wxChar s_szBuf[1024];
 
     // get error message from system
@@ -1115,7 +1115,7 @@ const wxChar *wxSysErrorMsg(unsigned long nErrCode)
     }
 
     return s_szBuf;
-#else // !__WXMSW__
+#else // !__WINDOWS__
     #if wxUSE_UNICODE
         static wchar_t s_wzBuf[1024];
         wxConvCurrent->MB2WC(s_wzBuf, strerror((int)nErrCode),
@@ -1124,7 +1124,7 @@ const wxChar *wxSysErrorMsg(unsigned long nErrCode)
     #else
         return strerror((int)nErrCode);
     #endif
-#endif  // __WXMSW__/!__WXMSW__
+#endif  // __WINDOWS__/!__WINDOWS__
 }
 
 #endif // wxUSE_LOG