# HG changeset patch # User Sam Lantinga # Date 1183535646 0 # Node ID 098ac044cd2f93cea4a916566c2e335a2620c1f1 # Parent 6a4f3a32c2e6e596a70b131d226b7a8b1a09a3d5 Fixed bug #447 Xlib uses the native locale, not latin1 ... the question is... what does the server use? :) diff -r 6a4f3a32c2e6 -r 098ac044cd2f include/SDL_stdinc.h --- a/include/SDL_stdinc.h Wed Jul 04 04:27:47 2007 +0000 +++ b/include/SDL_stdinc.h Wed Jul 04 07:54:06 2007 +0000 @@ -584,8 +584,7 @@ string that must be freed with SDL_free() or NULL on error. */ extern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft); -#define SDL_iconv_utf8_ascii(S) SDL_iconv_string("646", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_latin1(S) SDL_iconv_string("8859-1", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) diff -r 6a4f3a32c2e6 -r 098ac044cd2f src/stdlib/SDL_iconv.c --- a/src/stdlib/SDL_iconv.c Wed Jul 04 04:27:47 2007 +0000 +++ b/src/stdlib/SDL_iconv.c Wed Jul 04 07:54:06 2007 +0000 @@ -772,6 +772,26 @@ #endif /* !HAVE_ICONV */ +static const char *getlocale() +{ + const char *lang; + + lang = SDL_getenv("LC_ALL"); + if ( !lang ) { + lang = SDL_getenv("LC_CTYPE"); + } + if ( !lang ) { + lang = SDL_getenv("LC_MESSAGES"); + } + if ( !lang ) { + lang = SDL_getenv("LANG"); + } + if ( !lang || SDL_strcmp(lang, "C") == 0 ) { + lang = "ASCII"; + } + return lang; +} + char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft) { SDL_iconv_t cd; @@ -781,6 +801,12 @@ size_t outbytesleft; size_t retCode = 0; + if ( !fromcode || !*fromcode ) { + fromcode = getlocale(); + } + if ( !tocode || !*tocode ) { + tocode = getlocale(); + } cd = SDL_iconv_open(tocode, fromcode); if ( cd == (SDL_iconv_t)-1 ) { return NULL; diff -r 6a4f3a32c2e6 -r 098ac044cd2f src/video/x11/SDL_x11wm.c --- a/src/video/x11/SDL_x11wm.c Wed Jul 04 04:27:47 2007 +0000 +++ b/src/video/x11/SDL_x11wm.c Wed Jul 04 07:54:06 2007 +0000 @@ -257,13 +257,13 @@ #endif if ( title != NULL ) { - char *title_latin1 = SDL_iconv_utf8_latin1((char *)title); - if ( !title_latin1 ) { + char *title_locale = SDL_iconv_utf8_locale(title); + if ( !title_locale ) { SDL_OutOfMemory(); return; } - status = XStringListToTextProperty(&title_latin1, 1, &titleprop); - SDL_free(title_latin1); + status = XStringListToTextProperty(&title_locale, 1, &titleprop); + SDL_free(title_locale); if ( status ) { XSetTextProperty(SDL_Display, WMwindow, &titleprop, XA_WM_NAME); XFree(titleprop.value); @@ -280,13 +280,13 @@ #endif } if ( icon != NULL ) { - char *icon_latin1 = SDL_iconv_utf8_latin1((char *)icon); - if ( !icon_latin1 ) { + char *icon_locale = SDL_iconv_utf8_locale(icon); + if ( !icon_locale ) { SDL_OutOfMemory(); return; } - status = XStringListToTextProperty(&icon_latin1, 1, &iconprop); - SDL_free(icon_latin1); + status = XStringListToTextProperty(&icon_locale, 1, &iconprop); + SDL_free(icon_locale); if ( status ) { XSetTextProperty(SDL_Display, WMwindow, &iconprop, XA_WM_ICON_NAME); XFree(iconprop.value);