Fix for bug #447 merged from SDL 1.2
--HG-- extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%402408
This commit is contained in:
parent
5d2577791f
commit
1066adb528
4 changed files with 38 additions and 12 deletions
|
@ -656,8 +656,7 @@ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode,
|
||||||
const char *fromcode,
|
const char *fromcode,
|
||||||
const char *inbuf,
|
const char *inbuf,
|
||||||
size_t inbytesleft);
|
size_t inbytesleft);
|
||||||
#define SDL_iconv_utf8_ascii(S) SDL_iconv_string("646", "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_latin1(S) SDL_iconv_string("8859-1", "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_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)
|
#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
|
||||||
|
|
||||||
|
|
|
@ -773,6 +773,27 @@ SDL_iconv_close(SDL_iconv_t cd)
|
||||||
|
|
||||||
#endif /* !HAVE_ICONV */
|
#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 *
|
char *
|
||||||
SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
|
SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
|
||||||
size_t inbytesleft)
|
size_t inbytesleft)
|
||||||
|
@ -784,6 +805,12 @@ SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
|
||||||
size_t outbytesleft;
|
size_t outbytesleft;
|
||||||
size_t retCode = 0;
|
size_t retCode = 0;
|
||||||
|
|
||||||
|
if (!fromcode || !*fromcode) {
|
||||||
|
fromcode = getlocale();
|
||||||
|
}
|
||||||
|
if (!tocode || !*tocode) {
|
||||||
|
tocode = getlocale();
|
||||||
|
}
|
||||||
cd = SDL_iconv_open(tocode, fromcode);
|
cd = SDL_iconv_open(tocode, fromcode);
|
||||||
if (cd == (SDL_iconv_t) - 1) {
|
if (cd == (SDL_iconv_t) - 1) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -429,13 +429,13 @@ X11_SetWindowTitle(_THIS, SDL_Window * window)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (title != NULL) {
|
if (title != NULL) {
|
||||||
char *title_latin1 = SDL_iconv_utf8_latin1((char *) title);
|
char *title_locale = SDL_iconv_utf8_locale(title);
|
||||||
if (!title_latin1) {
|
if (!title_locale) {
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
status = XStringListToTextProperty(&title_latin1, 1, &titleprop);
|
status = XStringListToTextProperty(&title_locale, 1, &titleprop);
|
||||||
SDL_free(title_latin1);
|
SDL_free(title_locale);
|
||||||
if (status) {
|
if (status) {
|
||||||
XSetTextProperty(display, data->window, &titleprop, XA_WM_NAME);
|
XSetTextProperty(display, data->window, &titleprop, XA_WM_NAME);
|
||||||
XFree(titleprop.value);
|
XFree(titleprop.value);
|
||||||
|
@ -454,13 +454,13 @@ X11_SetWindowTitle(_THIS, SDL_Window * window)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
if (icon != NULL) {
|
if (icon != NULL) {
|
||||||
char *icon_latin1 = SDL_iconv_utf8_latin1((char *) icon);
|
char *icon_locale = SDL_iconv_utf8_locale(icon);
|
||||||
if (!icon_latin1) {
|
if (!icon_locale) {
|
||||||
SDL_OutOfMemory();
|
SDL_OutOfMemory();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
status = XStringListToTextProperty(&icon_latin1, 1, &iconprop);
|
status = XStringListToTextProperty(&icon_locale, 1, &iconprop);
|
||||||
SDL_free(icon_latin1);
|
SDL_free(icon_locale);
|
||||||
if (status) {
|
if (status) {
|
||||||
XSetTextProperty(display, data->window, &iconprop,
|
XSetTextProperty(display, data->window, &iconprop,
|
||||||
XA_WM_ICON_NAME);
|
XA_WM_ICON_NAME);
|
||||||
|
|
|
@ -61,10 +61,10 @@ main(int argc, char *argv[])
|
||||||
fprintf(stderr, "FAIL: %s\n", formats[i]);
|
fprintf(stderr, "FAIL: %s\n", formats[i]);
|
||||||
++errors;
|
++errors;
|
||||||
}
|
}
|
||||||
if(test[0]) {
|
if (test[0]) {
|
||||||
SDL_free(test[0]);
|
SDL_free(test[0]);
|
||||||
}
|
}
|
||||||
if(test[1]) {
|
if (test[1]) {
|
||||||
SDL_free(test[1]);
|
SDL_free(test[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue