Mercurial > sdl-ios-xcode
diff src/video/x11/SDL_x11wm.c @ 1558:b46bb79cc197
Fixed bug #113:
Date: Sat, 16 Apr 2005 08:39:22 +1000
From: "Eric Mangold"
Subject: [SDL] Window manager does not show SDL window titles
Hello,
I have an issue with SDL-using applications and the sawfish window manager.
The problem is that SDL windows do not show the window caption. My gnome
panel *does* show the window name, but the actual sawfish window frame
shows no caption at all. All other non-SDL applications that I use work
fine.
I tried a couple other window managers, and they *were* able to show the
SDL window captions correctly. Though there many be other WMs that can't.
I believe the problem is that SDL is using the UTF8_STRING type for the
window's WM_NAME and WM_ICON properties. In fact, WM_NAME and WM_ICON are
supposed to set to a TEXT type, usually STRING (ISO 8859-1).
The property names _NET_WM_NAME and _NET_WM_ICON_NAME should be used to
store the UTF8_STRING versions of the window title and icon name.
You can see the properties I refer to with a command like this:
xprop|grep -e "WM.*NAME"
Please note the freedesktop.org standard:
http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2506954
This page talks a little bit about the history of these properties. Just
search down the page for "WM_NAME".
http://www.cl.cam.ac.uk/~mgk25/unicode.html
Please let me know if I can be of any assistance in resolving this issue.
Thanks,
Eric Mangold
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 20 Mar 2006 07:31:36 +0000 |
parents | 4d005dfbb7f5 |
children | 3ba88cb7eb1b |
line wrap: on
line diff
--- a/src/video/x11/SDL_x11wm.c Mon Mar 20 06:37:58 2006 +0000 +++ b/src/video/x11/SDL_x11wm.c Mon Mar 20 07:31:36 2006 +0000 @@ -243,46 +243,61 @@ void X11_SetCaption(_THIS, const char *title, const char *icon) { XTextProperty titleprop, iconprop; + Status status; + +#ifdef X_HAVE_UTF8_STRING + Atom _NET_WM_NAME; + Atom _NET_WM_ICON_NAME; + + /* Look up some useful Atoms */ + _NET_WM_NAME = pXInternAtom(SDL_Display, "_NET_WM_NAME", False); + _NET_WM_ICON_NAME = pXInternAtom(SDL_Display, "_NET_WM_ICON_NAME", False); +#endif /* Lock the event thread, in multi-threading environments */ SDL_Lock_EventThread(); if ( title != NULL ) { - int error = XLocaleNotSupported; + char *title_latin1 = SDL_iconv_utf8_latin1((char *)title); + if ( !title_latin1 ) { + SDL_OutOfMemory(); + return; + } + status = pXStringListToTextProperty(&title_latin1, 1, &titleprop); + SDL_free(title_latin1); + if ( status ) { + pXSetTextProperty(SDL_Display, WMwindow, &titleprop, XA_WM_NAME); + pXFree(titleprop.value); + } #ifdef X_HAVE_UTF8_STRING - error = pXutf8TextListToTextProperty(SDL_Display, - (char **)&title, 1, XUTF8StringStyle, - &titleprop); + status = pXutf8TextListToTextProperty(SDL_Display, + (char **)&title, 1, XUTF8StringStyle, &titleprop); + if ( status == Success ) { + pXSetTextProperty(SDL_Display, WMwindow, &titleprop, _NET_WM_NAME); + pXFree(titleprop.value); + } #endif - if ( error != Success ) { - char *title_latin1 = SDL_iconv_utf8_latin1((char *)title); - if ( !title_latin1 ) { - SDL_OutOfMemory(); - return; - } - pXStringListToTextProperty(&title_latin1, 1, &titleprop); - SDL_free(title_latin1); - } - pXSetWMName(SDL_Display, WMwindow, &titleprop); - pXFree(titleprop.value); } if ( icon != NULL ) { - int error = XLocaleNotSupported; + char *icon_latin1 = SDL_iconv_utf8_latin1((char *)icon); + if ( !icon_latin1 ) { + SDL_OutOfMemory(); + return; + } + status = pXStringListToTextProperty(&icon_latin1, 1, &iconprop); + SDL_free(icon_latin1); + if ( status ) { + pXSetTextProperty(SDL_Display, WMwindow, &iconprop, XA_WM_ICON_NAME); + pXFree(iconprop.value); + } #ifdef X_HAVE_UTF8_STRING - error = pXutf8TextListToTextProperty(SDL_Display, + status = pXutf8TextListToTextProperty(SDL_Display, (char **)&icon, 1, XUTF8StringStyle, &iconprop); + if ( status == Success ) { + pXSetTextProperty(SDL_Display, WMwindow, &iconprop, _NET_WM_ICON_NAME); + pXFree(iconprop.value); + } #endif - if ( error != Success ) { - char *icon_latin1 = SDL_iconv_utf8_latin1((char *)title); - if ( !icon_latin1 ) { - SDL_OutOfMemory(); - return; - } - pXStringListToTextProperty(&icon_latin1, 1, &iconprop); - SDL_free(icon_latin1); - } - pXSetWMIconName(SDL_Display, WMwindow, &iconprop); - pXFree(iconprop.value); } pXSync(SDL_Display, False);