Fixed bug #196
Use the title and icon stored in the SDL video info, when creating X11 windows.
--- a/src/video/x11/SDL_x11video.c Thu May 04 16:52:53 2006 +0000
+++ b/src/video/x11/SDL_x11video.c Fri May 05 05:09:10 2006 +0000
@@ -311,18 +311,13 @@
static void create_aux_windows(_THIS)
{
int x = 0, y = 0;
- Atom _NET_WM_NAME;
- Atom _NET_WM_ICON_NAME;
char classname[1024];
XSetWindowAttributes xattr;
XWMHints *hints;
- XTextProperty titleprop, titlepropUTF8, iconprop, iconpropUTF8;
int def_vis = (SDL_Visual == DefaultVisual(SDL_Display, SDL_Screen));
/* Look up some useful Atoms */
WM_DELETE_WINDOW = XInternAtom(SDL_Display, "WM_DELETE_WINDOW", False);
- _NET_WM_NAME = XInternAtom(SDL_Display, "_NET_WM_NAME", False);
- _NET_WM_ICON_NAME = XInternAtom(SDL_Display, "_NET_WM_ICON_NAME", False);
/* Don't create any extra windows if we are being managed */
if ( SDL_windowid ) {
@@ -372,15 +367,9 @@
}
hints = NULL;
- titleprop.value = titlepropUTF8.value = NULL;
- iconprop.value = iconpropUTF8.value = NULL;
if(WMwindow) {
/* All window attributes must survive the recreation */
hints = XGetWMHints(SDL_Display, WMwindow);
- XGetTextProperty(SDL_Display, WMwindow, &titleprop, XA_WM_NAME);
- XGetTextProperty(SDL_Display, WMwindow, &titlepropUTF8, _NET_WM_NAME);
- XGetTextProperty(SDL_Display, WMwindow, &iconprop, XA_WM_ICON_NAME);
- XGetTextProperty(SDL_Display, WMwindow, &iconpropUTF8, _NET_WM_ICON_NAME);
XDestroyWindow(SDL_Display, WMwindow);
}
@@ -400,22 +389,7 @@
}
XSetWMHints(SDL_Display, WMwindow, hints);
XFree(hints);
- if(titleprop.value) {
- XSetTextProperty(SDL_Display, WMwindow, &titleprop, XA_WM_NAME);
- XFree(titleprop.value);
- }
- if(titlepropUTF8.value) {
- XSetTextProperty(SDL_Display, WMwindow, &titlepropUTF8, _NET_WM_NAME);
- XFree(titlepropUTF8.value);
- }
- if(iconprop.value) {
- XSetTextProperty(SDL_Display, WMwindow, &iconprop, XA_WM_ICON_NAME);
- XFree(iconprop.value);
- }
- if(iconpropUTF8.value) {
- XSetTextProperty(SDL_Display, WMwindow, &iconpropUTF8, _NET_WM_ICON_NAME);
- XFree(iconpropUTF8.value);
- }
+ X11_SetCaptionNoLock(this, this->wm_title, this->wm_icon);
XSelectInput(SDL_Display, WMwindow,
FocusChangeMask | KeyPressMask | KeyReleaseMask
--- a/src/video/x11/SDL_x11wm.c Thu May 04 16:52:53 2006 +0000
+++ b/src/video/x11/SDL_x11wm.c Fri May 05 05:09:10 2006 +0000
@@ -240,7 +240,7 @@
SDL_FreeSurface(sicon);
}
-void X11_SetCaption(_THIS, const char *title, const char *icon)
+void X11_SetCaptionNoLock(_THIS, const char *title, const char *icon)
{
XTextProperty titleprop, iconprop;
Status status;
@@ -256,9 +256,6 @@
}
#endif
- /* Lock the event thread, in multi-threading environments */
- SDL_Lock_EventThread();
-
if ( title != NULL ) {
char *title_latin1 = SDL_iconv_utf8_latin1((char *)title);
if ( !title_latin1 ) {
@@ -306,7 +303,12 @@
#endif
}
XSync(SDL_Display, False);
+}
+void X11_SetCaption(_THIS, const char *title, const char *icon)
+{
+ SDL_Lock_EventThread();
+ X11_SetCaptionNoLock(this, title, icon);
SDL_Unlock_EventThread();
}
@@ -332,13 +334,6 @@
if ( ! SDL_Window ) {
return(mode); /* Will be set later on mode switch */
}
-#if SDL_VIDEO_DRIVER_X11_XINERAMA
- /* FIXME: Is this okay?
- if ( use_xinerama ) {
- mode &= ~SDL_GRAB_FULLSCREEN;
- }
- */
-#endif
if ( mode == SDL_GRAB_OFF ) {
XUngrabPointer(SDL_Display, CurrentTime);
XUngrabKeyboard(SDL_Display, CurrentTime);
@@ -351,7 +346,7 @@
#if 0 /* We'll wait here until we actually grab, otherwise behavior undefined */
for ( numtries = 0; numtries < 10; ++numtries ) {
#else
- while ( 1 ) {
+ for ( ; ; ) {
#endif
result = XGrabPointer(SDL_Display, SDL_Window, True, 0,
GrabModeAsync, GrabModeAsync,
--- a/src/video/x11/SDL_x11wm_c.h Thu May 04 16:52:53 2006 +0000
+++ b/src/video/x11/SDL_x11wm_c.h Fri May 05 05:09:10 2006 +0000
@@ -24,6 +24,7 @@
#include "SDL_x11video.h"
/* Functions to be exported */
+extern void X11_SetCaptionNoLock(_THIS, const char *title, const char *icon);
extern void X11_SetCaption(_THIS, const char *title, const char *icon);
extern void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask);
extern int X11_IconifyWindow(_THIS);