Skip to content
Permalink
Browse files

Fixed bug #196

Use the title and icon stored in the SDL video info, when creating X11 windows.
  • Loading branch information
slouken committed May 5, 2006
1 parent eefae53 commit 758f0d7fa1cf7383d68003ea24ed6dc77997c3e7
Showing with 9 additions and 39 deletions.
  1. +1 −27 src/video/x11/SDL_x11video.c
  2. +7 −12 src/video/x11/SDL_x11wm.c
  3. +1 −0 src/video/x11/SDL_x11wm_c.h
@@ -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
@@ -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,
@@ -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);

0 comments on commit 758f0d7

Please sign in to comment.