src/video/x11/SDL_x11wm.c
changeset 1767 ae9f6be81810
parent 1765 c2c6ff414ef5
child 1849 b5a4ac87b98c
equal deleted inserted replaced
1766:410b1ed7fe28 1767:ae9f6be81810
   238   done:
   238   done:
   239 	SDL_Unlock_EventThread();
   239 	SDL_Unlock_EventThread();
   240 	SDL_FreeSurface(sicon);
   240 	SDL_FreeSurface(sicon);
   241 }
   241 }
   242 
   242 
   243 void X11_SetCaption(_THIS, const char *title, const char *icon)
   243 void X11_SetCaptionNoLock(_THIS, const char *title, const char *icon)
   244 {
   244 {
   245 	XTextProperty titleprop, iconprop;
   245 	XTextProperty titleprop, iconprop;
   246 	Status status;
   246 	Status status;
   247 
   247 
   248 #ifdef X_HAVE_UTF8_STRING
   248 #ifdef X_HAVE_UTF8_STRING
   253 	if (SDL_X11_HAVE_UTF8) {
   253 	if (SDL_X11_HAVE_UTF8) {
   254 		_NET_WM_NAME = XInternAtom(SDL_Display, "_NET_WM_NAME", False);
   254 		_NET_WM_NAME = XInternAtom(SDL_Display, "_NET_WM_NAME", False);
   255 		_NET_WM_ICON_NAME = XInternAtom(SDL_Display, "_NET_WM_ICON_NAME", False);
   255 		_NET_WM_ICON_NAME = XInternAtom(SDL_Display, "_NET_WM_ICON_NAME", False);
   256 	}
   256 	}
   257 #endif
   257 #endif
   258 
       
   259 	/* Lock the event thread, in multi-threading environments */
       
   260 	SDL_Lock_EventThread();
       
   261 
   258 
   262 	if ( title != NULL ) {
   259 	if ( title != NULL ) {
   263 		char *title_latin1 = SDL_iconv_utf8_latin1((char *)title);
   260 		char *title_latin1 = SDL_iconv_utf8_latin1((char *)title);
   264 		if ( !title_latin1 ) {
   261 		if ( !title_latin1 ) {
   265 			SDL_OutOfMemory();
   262 			SDL_OutOfMemory();
   304 			}
   301 			}
   305 		}
   302 		}
   306 #endif
   303 #endif
   307 	}
   304 	}
   308 	XSync(SDL_Display, False);
   305 	XSync(SDL_Display, False);
   309 
   306 }
       
   307 
       
   308 void X11_SetCaption(_THIS, const char *title, const char *icon)
       
   309 {
       
   310 	SDL_Lock_EventThread();
       
   311 	X11_SetCaptionNoLock(this, title, icon);
   310 	SDL_Unlock_EventThread();
   312 	SDL_Unlock_EventThread();
   311 }
   313 }
   312 
   314 
   313 /* Iconify the window */
   315 /* Iconify the window */
   314 int X11_IconifyWindow(_THIS)
   316 int X11_IconifyWindow(_THIS)
   330 		return(SDL_GRAB_OFF);
   332 		return(SDL_GRAB_OFF);
   331 	}
   333 	}
   332 	if ( ! SDL_Window ) {
   334 	if ( ! SDL_Window ) {
   333 		return(mode);	/* Will be set later on mode switch */
   335 		return(mode);	/* Will be set later on mode switch */
   334 	}
   336 	}
   335 #if SDL_VIDEO_DRIVER_X11_XINERAMA
       
   336         /* FIXME: Is this okay?
       
   337         if ( use_xinerama ) {
       
   338             mode &= ~SDL_GRAB_FULLSCREEN;
       
   339         }
       
   340         */
       
   341 #endif
       
   342 	if ( mode == SDL_GRAB_OFF ) {
   337 	if ( mode == SDL_GRAB_OFF ) {
   343 		XUngrabPointer(SDL_Display, CurrentTime);
   338 		XUngrabPointer(SDL_Display, CurrentTime);
   344 		XUngrabKeyboard(SDL_Display, CurrentTime);
   339 		XUngrabKeyboard(SDL_Display, CurrentTime);
   345 	} else {
   340 	} else {
   346 		if ( this->screen->flags & SDL_FULLSCREEN ) {
   341 		if ( this->screen->flags & SDL_FULLSCREEN ) {
   349 		}
   344 		}
   350 		/* Try to grab the mouse */
   345 		/* Try to grab the mouse */
   351 #if 0 /* We'll wait here until we actually grab, otherwise behavior undefined */
   346 #if 0 /* We'll wait here until we actually grab, otherwise behavior undefined */
   352 		for ( numtries = 0; numtries < 10; ++numtries ) {
   347 		for ( numtries = 0; numtries < 10; ++numtries ) {
   353 #else
   348 #else
   354 		while ( 1 ) {
   349 		for ( ; ; ) {
   355 #endif
   350 #endif
   356 			result = XGrabPointer(SDL_Display, SDL_Window, True, 0,
   351 			result = XGrabPointer(SDL_Display, SDL_Window, True, 0,
   357 						GrabModeAsync, GrabModeAsync,
   352 						GrabModeAsync, GrabModeAsync,
   358 						SDL_Window, None, CurrentTime);
   353 						SDL_Window, None, CurrentTime);
   359 			if ( result == GrabSuccess ) {
   354 			if ( result == GrabSuccess ) {