Fixed bug #196
authorSam Lantinga <slouken@libsdl.org>
Fri, 05 May 2006 05:09:10 +0000
changeset 1767 ae9f6be81810
parent 1766 410b1ed7fe28
child 1768 814f9f2c7a33
Fixed bug #196 Use the title and icon stored in the SDL video info, when creating X11 windows.
src/video/x11/SDL_x11video.c
src/video/x11/SDL_x11wm.c
src/video/x11/SDL_x11wm_c.h
--- 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);