From 758f0d7fa1cf7383d68003ea24ed6dc77997c3e7 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Fri, 5 May 2006 05:09:10 +0000 Subject: [PATCH] Fixed bug #196 Use the title and icon stored in the SDL video info, when creating X11 windows. --- src/video/x11/SDL_x11video.c | 28 +--------------------------- src/video/x11/SDL_x11wm.c | 19 +++++++------------ src/video/x11/SDL_x11wm_c.h | 1 + 3 files changed, 9 insertions(+), 39 deletions(-) diff --git a/src/video/x11/SDL_x11video.c b/src/video/x11/SDL_x11video.c index fcd59e029..0e4aab666 100644 --- a/src/video/x11/SDL_x11video.c +++ b/src/video/x11/SDL_x11video.c @@ -311,18 +311,13 @@ static char *get_classname(char *classname, int maxlen) 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 @@ static void create_aux_windows(_THIS) } 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 @@ static void create_aux_windows(_THIS) } 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 diff --git a/src/video/x11/SDL_x11wm.c b/src/video/x11/SDL_x11wm.c index d47dd8b9e..b4d7836f7 100644 --- a/src/video/x11/SDL_x11wm.c +++ b/src/video/x11/SDL_x11wm.c @@ -240,7 +240,7 @@ void X11_SetIcon(_THIS, SDL_Surface *icon, Uint8 *mask) 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 @@ void X11_SetCaption(_THIS, const char *title, const char *icon) } #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 @@ void X11_SetCaption(_THIS, const char *title, const char *icon) #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 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS, SDL_GrabMode mode) 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 @@ SDL_GrabMode X11_GrabInputNoLock(_THIS, SDL_GrabMode mode) #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, diff --git a/src/video/x11/SDL_x11wm_c.h b/src/video/x11/SDL_x11wm_c.h index f258fe450..3d59842f0 100644 --- a/src/video/x11/SDL_x11wm_c.h +++ b/src/video/x11/SDL_x11wm_c.h @@ -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);