]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/xlocale.cpp
Add another test for the insertion point position after SetValue().
[wxWidgets.git] / src / common / xlocale.cpp
index f66b2ab71a31e57ab8a2124f68db8c2782b47da2..24dca049ca66fa89fdc3ba7ce5de8549fb56b30e 100644 (file)
@@ -32,6 +32,7 @@
 #include "wx/xlocale.h"
 
 #include <errno.h>
+#include <locale.h>
 
 // ----------------------------------------------------------------------------
 // module globals
@@ -153,7 +154,7 @@ void wxXLocale::Init(const char *loc)
             m_locale = newlocale(LC_ALL_MASK, buf2.c_str(), NULL);
         }
     }
-    
+
     // TODO: wxLocale performs many more manipulations of the given locale
     //       string in the attempt to set a valid locale; reusing that code
     //       (changing it to take a generic wxTryLocale callback) would be nice
@@ -194,7 +195,7 @@ void wxXLocale::Free()
 #define CTYPE_UPPER 0x0200
 #define CTYPE_XDIGIT 0x0400
 
-static unsigned int gs_lookup[] =
+static const unsigned int gs_lookup[] =
 {
     0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004,
     0x0004, 0x0104, 0x0104, 0x0104, 0x0104, 0x0104, 0x0004, 0x0004,
@@ -276,22 +277,22 @@ int wxToupper_l(const wxUniChar& c, const wxXLocale& loc)
              case !wxHAS_XLOCALE_SUPPORT...
 */
 
+/*
+    Note that this code is similar to (a portion of) wxLocale::IsAvailable code
+*/
 #define IMPLEMENT_STRTOX_L_START                                \
     wxCHECK(loc.IsOk(), 0);                                     \
                                                                 \
-    /* (Try to) temporary set the locale to 'C' */              \
-    const char *oldLocale = wxSetlocale(LC_NUMERIC, "");        \
-    const char *tmp = wxSetlocale(LC_NUMERIC, "C");             \
-    if ( !tmp )                                                 \
+    /* (Try to) temporary set the 'C' locale */                 \
+    const char *oldLocale = wxSetlocale(LC_NUMERIC, "C");       \
+    if ( !oldLocale )                                           \
     {                                                           \
-        /* restore the original locale */                       \
-        wxSetlocale(LC_NUMERIC, oldLocale);                     \
+        /* the current locale was not changed; no need to */    \
+        /* restore the previous one... */                       \
         errno = EINVAL;                                         \
             /* signal an error (better than nothing) */         \
         return 0;                                               \
-    }                                                           \
-                                                                \
-
+    }
 
 #define IMPLEMENT_STRTOX_L_END                                  \
     /* restore the original locale */                           \
@@ -313,7 +314,7 @@ double wxStrtod_l(const char* str, char **endptr, const wxXLocale& loc)
 }
 
 long wxStrtol_l(const wchar_t* str, wchar_t **endptr, int base, const wxXLocale& loc)
-{ 
+{
     IMPLEMENT_STRTOX_L_START
     long ret = wxStrtol(str, endptr, base);
     IMPLEMENT_STRTOX_L_END