]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/wxcrt.cpp
changing guard to support popupwindows as well
[wxWidgets.git] / src / common / wxcrt.cpp
index daddf430ccd38ecc802eee6056c71f083e529349..197fe9597df0f8c750ef8dcd337e9a635eab7ce5 100644 (file)
     #include "wx/log.h"
 #endif
 
     #include "wx/log.h"
 #endif
 
+#ifdef HAVE_LANGINFO_H
+    #include <langinfo.h>
+#endif
+
 #ifdef __WXWINCE__
     // there is no errno.h under CE apparently
     #define wxSET_ERRNO(value)
 #ifdef __WXWINCE__
     // there is no errno.h under CE apparently
     #define wxSET_ERRNO(value)
@@ -57,6 +61,13 @@ namespace std {}
 using namespace std ;
 #endif
 
 using namespace std ;
 #endif
 
+#if defined(__DARWIN__)
+       #include "wx/mac/corefoundation/cfref.h"
+       #include <CoreFoundation/CFLocale.h>
+       #include "wx/mac/corefoundation/cfstring.h"
+    #include <xlocale.h>
+#endif
+
 #if wxUSE_WCHAR_T
 WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n)
 {
 #if wxUSE_WCHAR_T
 WXDLLIMPEXP_BASE size_t wxMB2WC(wchar_t *buf, const char *psz, size_t n)
 {
@@ -149,7 +160,36 @@ char* wxSetlocale(int category, const char *locale)
 
     return NULL;
 #else // !__WXWINCE__
 
     return NULL;
 #else // !__WXWINCE__
+#ifdef __WXMAC__
+    char *rv = NULL ;
+    if ( locale != NULL && locale[0] == 0 )
+    {
+        locale_t lt = newlocale(LC_ALL_MASK, "", NULL);
+        if ( lt )
+        {
+            rv = (char*) querylocale( LC_ALL_MASK, lt );
+            freelocale(lt);
+        }
+        if ( rv == NULL || rv[0] == 0  || strcmp( rv , "C" ) == 0 || strcmp( rv, "POSIX" ) == 0 )
+        {
+            // we have to emulate the behaviour under OS X
+            wxCFRef<CFLocaleRef> userLocaleRef(CFLocaleCopyCurrent());
+            wxCFStringRef str(wxCFRetain((CFStringRef)CFLocaleGetValue(userLocaleRef, kCFLocaleLanguageCode)));
+            wxString langFull = str.AsString()+"_";
+            str.reset(wxCFRetain((CFStringRef)CFLocaleGetValue(userLocaleRef, kCFLocaleCountryCode)));
+            langFull += str.AsString();
+            rv = setlocale(category, langFull.c_str());
+        }
+        else
+        {
+            rv = setlocale(category, rv);
+        }
+    }
+    else
+        rv = setlocale(category, locale);
+#else
     char *rv = setlocale(category, locale);
     char *rv = setlocale(category, locale);
+#endif
     if ( locale != NULL /* setting locale, not querying */ &&
          rv /* call was successful */ )
     {
     if ( locale != NULL /* setting locale, not querying */ &&
          rv /* call was successful */ )
     {
@@ -1152,7 +1192,7 @@ static bool wxIsLocaleUtf8()
             return true;
         }
     }
             return true;
         }
     }
-#endif
+#endif // HAVE_LANGINFO_H
 
     // check if we're running under the "C" locale: it is 7bit subset
     // of UTF-8, so it can be safely used with the UTF-8 build:
 
     // check if we're running under the "C" locale: it is 7bit subset
     // of UTF-8, so it can be safely used with the UTF-8 build: