Commit 372defa7 authored by Ryan C. Gordon's avatar Ryan C. Gordon

SDL_SetWindowCaption() on Windows: try to use the unicode

SetWindowText() if it exists in user32.dll, and fallback to converting
to the current codepage (instead of latin1) if not.

  Fixes Bugzilla #365.

--HG--
branch : SDL-1.2
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/branches/SDL-1.2%402276
parent d969c7e2
...@@ -207,6 +207,8 @@ void WIN_SetWMIcon(_THIS, SDL_Surface *icon, Uint8 *mask) ...@@ -207,6 +207,8 @@ void WIN_SetWMIcon(_THIS, SDL_Surface *icon, Uint8 *mask)
#endif /* DISABLE_ICON_SUPPORT */ #endif /* DISABLE_ICON_SUPPORT */
} }
typedef BOOL (WINAPI *PtrSetWindowTextW)(HWND hWnd, LPCWSTR lpString);
void WIN_SetWMCaption(_THIS, const char *title, const char *icon) void WIN_SetWMCaption(_THIS, const char *title, const char *icon)
{ {
#ifdef _WIN32_WCE #ifdef _WIN32_WCE
...@@ -215,8 +217,36 @@ void WIN_SetWMCaption(_THIS, const char *title, const char *icon) ...@@ -215,8 +217,36 @@ void WIN_SetWMCaption(_THIS, const char *title, const char *icon)
SetWindowText(SDL_Window, lpszW); SetWindowText(SDL_Window, lpszW);
SDL_free(lpszW); SDL_free(lpszW);
#else #else
char *lpsz = SDL_iconv_utf8_latin1((char *)title); /*
SetWindowText(SDL_Window, lpsz); * Try loading SetWindowTextW from kernel32.dll first, and if it exists,
* pass the UCS-2 string to it. If it doesn't, use
* WideCharToMultiByte(CP_ACP) and hope that the codepage can support the
* string data in question. This lets us keep binary compatibility with
* Win95/98/ME but still use saner Unicode on NT-based Windows.
*/
static int tried_loading = 0;
static PtrSetWindowTextW swtw = NULL;
Uint16 *lpsz = SDL_iconv_utf8_ucs2(title);
if (!tried_loading) {
HMODULE dll = LoadLibrary("user32.dll");
if (dll != NULL) {
swtw = (PtrSetWindowTextW) GetProcAddress(dll, "SetWindowTextW");
if (swtw == NULL) {
FreeLibrary(dll);
}
}
tried_loading = 1;
}
if (swtw != NULL) {
swtw(SDL_Window, lpsz);
} else {
size_t len = WideCharToMultiByte(CP_ACP, 0, lpsz, -1, NULL, 0, NULL, NULL);
char *cvt = SDL_malloc(len + 1);
WideCharToMultiByte(CP_ACP, 0, lpsz, -1, cvt, len, NULL, NULL);
SetWindowText(SDL_Window, cvt);
SDL_free(cvt);
}
SDL_free(lpsz); SDL_free(lpsz);
#endif #endif
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment