Mercurial > sdl-ios-xcode
view test/testlock.c @ 1558:b46bb79cc197
Fixed bug #113:
Date: Sat, 16 Apr 2005 08:39:22 +1000
From: "Eric Mangold"
Subject: [SDL] Window manager does not show SDL window titles
Hello,
I have an issue with SDL-using applications and the sawfish window manager.
The problem is that SDL windows do not show the window caption. My gnome
panel *does* show the window name, but the actual sawfish window frame
shows no caption at all. All other non-SDL applications that I use work
fine.
I tried a couple other window managers, and they *were* able to show the
SDL window captions correctly. Though there many be other WMs that can't.
I believe the problem is that SDL is using the UTF8_STRING type for the
window's WM_NAME and WM_ICON properties. In fact, WM_NAME and WM_ICON are
supposed to set to a TEXT type, usually STRING (ISO 8859-1).
The property names _NET_WM_NAME and _NET_WM_ICON_NAME should be used to
store the UTF8_STRING versions of the window title and icon name.
You can see the properties I refer to with a command like this:
xprop|grep -e "WM.*NAME"
Please note the freedesktop.org standard:
http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2506954
This page talks a little bit about the history of these properties. Just
search down the page for "WM_NAME".
http://www.cl.cam.ac.uk/~mgk25/unicode.html
Please let me know if I can be of any assistance in resolving this issue.
Thanks,
Eric Mangold
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 20 Mar 2006 07:31:36 +0000 |
parents | be9c9c8f6d53 |
children | 14717b52abc0 |
line wrap: on
line source
/* Test the thread and mutex locking functions Also exercises the system's signal/thread interaction */ #include <signal.h> #include <stdio.h> #include <stdlib.h> #include "SDL.h" #include "SDL_mutex.h" #include "SDL_thread.h" static SDL_mutex *mutex = NULL; static Uint32 mainthread; static SDL_Thread *threads[6]; /* * SDL_Quit() shouldn't be used with atexit() directly because * calling conventions may differ... */ static void SDL_Quit_Wrapper(void) { SDL_Quit(); } void printid(void) { printf("Process %u: exiting\n", SDL_ThreadID()); } void terminate(int sig) { printf("Process %u: raising SIGTERM\n", SDL_ThreadID()); raise(SIGTERM); } void closemutex(int sig) { Uint32 id = SDL_ThreadID(); int i; printf("Process %u: Cleaning up...\n", id == mainthread ? 0 : id); for ( i=0; i<6; ++i ) SDL_KillThread(threads[i]); SDL_DestroyMutex(mutex); exit(sig); } int Run(void *data) { if ( SDL_ThreadID() == mainthread ) signal(SIGTERM, closemutex); while ( 1 ) { printf("Process %u ready to work\n", SDL_ThreadID()); if ( SDL_mutexP(mutex) < 0 ) { fprintf(stderr, "Couldn't lock mutex: %s", SDL_GetError()); exit(1); } printf("Process %u, working!\n", SDL_ThreadID()); SDL_Delay(1*1000); printf("Process %u, done!\n", SDL_ThreadID()); if ( SDL_mutexV(mutex) < 0 ) { fprintf(stderr, "Couldn't unlock mutex: %s", SDL_GetError()); exit(1); } /* If this sleep isn't done, then threads may starve */ SDL_Delay(10); } return(0); } int main(int argc, char *argv[]) { int i; int maxproc = 6; /* Load the SDL library */ if ( SDL_Init(0) < 0 ) { fprintf(stderr, "%s\n", SDL_GetError()); exit(1); } atexit(SDL_Quit_Wrapper); if ( (mutex=SDL_CreateMutex()) == NULL ) { fprintf(stderr, "Couldn't create mutex: %s\n", SDL_GetError()); exit(1); } mainthread = SDL_ThreadID(); printf("Main thread: %u\n", mainthread); atexit(printid); for ( i=0; i<maxproc; ++i ) { if ( (threads[i]=SDL_CreateThread(Run, NULL)) == NULL ) fprintf(stderr, "Couldn't create thread!\n"); } signal(SIGINT, terminate); Run(NULL); return(0); /* Never reached */ }