view BUGS @ 1212:7663bb0f52c7

To: sdl@libsdl.org From: Christian Walther <cwalther@gmx.ch> Date: Thu, 15 Dec 2005 21:19:53 +0100 Subject: [SDL] More mouse enhancements for Mac OS X The attached patch brings two more enhancements to mouse handling on Mac OS X (Quartz): 1. Currently, after launching an SDL application, SDL's notion of the mouse position is stuck in the top left corner (0,0) until the first time the mouse is moved. That's because the UpdateMouse() function isn't implemented in the Quartz driver. This patch adds it. 2. When grabbing input while the mouse cursor is hidden, the function CGAssociateMouseAndMouseCursorPosition(0) is called, which prevents the system's notion of the mouse location from moving (and therefore leaving the SDL window) even when the mouse is moved. However, apparently the Wacom tablet driver (and maybe other special pointing device drivers) doesn't care about that setting and still allows the mouse location to go outside of the window. Interestingly, the system cursor, which is made visible by the existing code in SDL in that case, does not follow the mouse location, but appears in the middle of the SDL window. The mouse location being outside of the window however means that mouse button events go to background applications (or the dock or whatever is there), which is very confusing to the user who sees no cursor outside of the SDL window. I have not found any way of intercepting these events (and that's probably by design, as "normal" applications shouldn't prevent the user from bringing other applications' windows to the front by clicking on them). An idea would be placing a fully transparent, screen-filling window in front of everything, but I fear that this might affect rendering performance (by doing unnecessary compositing, using up memory, or whatever). The deluxe solution to the problem would be talking to the tablet driver using AppleEvents to tell it to constrain its mapped area to the window (see Wacom's "TabletEventDemo" sample app, http://www.wacomeng.com/devsupport/mac/downloads.html), but I think that the bloat that solution would add to SDL would outweigh its usefulness. What I did instead in my patch is reassociating mouse and cursor when the mouse leaves the window while an invisible grab is in effect, and restoring the grab when the window is entered. That way, the grab can still be effectively broken by a tablet, but at least it's obvious to the user that it is broken. That change is minimal - it doesn't affect operation with a mouse (or a trackpad), and the code that it adds is not executed on every PumpEvents() call, only when entering and leaving the window. Unless there are any concerns about the patch, please apply. Feel free to shorten the lengthy comment in SDL_QuartzEvents.m if you think it's too verbose. Thanks -Christian
author Ryan C. Gordon <icculus@icculus.org>
date Mon, 02 Jan 2006 00:31:00 +0000
parents 9867f3d86e44
children f12379c41042
line wrap: on
line source


All:
	Audio rate conversion is only implemented by multiplying or dividing
	by a power of two.  This is a side-effect of the requirement that the
	raw audio buffer size be a power of two, and can hopefully be fixed.
	This means 8 KHz audio converted to 22 KHz ends up being 16 KHz. :-/

	When the implementation is writing directly to video memory the mouse
	cursor doesn't work properly.  Applications which do this should use
	their own mouse cursor and call SDL_ShowCursor(0) to hide the system
	cursor.

Linux:
	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.
	(UPDATE 04/06/2004: this bug is now fixed)

	The keyboard modifiers are not set to the correct state on startup.

	The AAlib, GGI, and SVGAlib video drivers are not heavily tested.

Win32:
	The MCI driver can't tell if the CD-ROM drive is paused or stopped.

	The SDL_INIT_EVENTTHREAD flag is not supported on Win32
	(Idea: create a separate DirectInput polling thread)
	The main purpose of this flag is for smooth cursor motion in
	fullscreen environments.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	This requires the ToUnicode() API which is only implemented on
	Windows NT/2000, not on Windows 95/98.
	Latin-1 keyboard input works fine.

	Joysticks are only supported under the Win32 MultiMedia API,
	DirectInput support is not yet implemented.

BeOS:
	BePPC is not supported, apparently not even by Be Inc.

	SDL_WM_GrabInput() is not implemented.
	Does anyone know how to do this?  SDL_WM_GrabInput() is designed
	to prevent the user from switching input and mouse focus away from
	the SDL application.

	Continuous relative mouse motion is not implemented.

	Wide UNICODE character input (Kanji, etc.) has not been tested.
	Latin-1 keyboard input works fine.

MacOS:
	Palette handling isn't implemented in windowed mode yet.

	Audio hasn't been extensively tested, in particular the locking
	isn't implemented and mixer routines may not call malloc() or free()
	because they are called at interrupt time.

	SDL_WM_GrabInput() is not implemented.
	Does anyone know how to do this?  SDL_WM_GrabInput() is designed
	to prevent the user from switching input and mouse focus away from
	the SDL application.

	Continuous relative mouse motion is not implemented.

	SDL_AddTimer() and SDL_RemoveTimer() haven't been implemented yet.

	Not all of the keys are properly recognized on the keyboard.

MacOS X:
	Depth switching for windowed mode isn't implemented yet.
	
	Palette handling isn't implemented in windowed mode yet.
	
	Command-line arguments dialog is not implemented yet.

	Fullscreen drawing has some artifacts.
	
	Fullscreen OpenGL for the software renderer is broken.

	Some OpenGL parameters are not accounted for, for example color bits customization.
	
	Continuous mouse motion perhaps is not as smooth as it should be.

	SDL_WM_GrabInput() is implemented, but it "freezes" the hardware
	cursor in the center of the window/screen.  Also, mouse moved events
	are not generated, and the keyboard cannot be grabbed.

	MacOS X seems to have a broken pthread_cancel() implementation.
	Actually, it just only has one cancellation point defined.
	http://lists.apple.com/archives/darwin-development/2004/Jun/24/killingapthread.001.txt

FreeBSD:
	pthread_cancel() isn't supported by FreeBSD 3.X, so threads don't
	work on versions of FreeBSD earlier than 4.0.

	The CD-ROM handling doesn't work completely.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.
	(UPDATE 04/06/2004: this bug is now fixed but needs testing)
	
	The keyboard modifiers are not set to the correct state on startup.

Solaris:
	The joystick functions are not implemented yet.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.
	(UPDATE 04/06/2004: this bug is now fixed but needs testing)
	
	The keyboard modifiers are not set to the correct state on startup.

IRIX:
	The CD-ROM handling doesn't work completely.

	The joystick functions are not implemented yet.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.
	(UPDATE 04/06/2004: this bug is now fixed but needs testing)
	
	The keyboard modifiers are not set to the correct state on startup.

EPOC:
    Only Crystal version of Epoc/SymbianOS is currently supported.

    SDL is implemented in static library only. SDL uses static/global
    variables and that is not allowed in EPOC dll libraries.

    Sound is not yet supported.

    Joystick, OpenGL and cdrom is not supported (think about cdrom in a cell phone:-).
    
    No console output screen. Printing to stdout do not have any effect.

QNX:
	Fullscreen switch doesn't work (disabled for now).
 

OpenBSD:  -= NOT YET SUPPORTED =-
	This is reported to work, but I haven't verified this.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.
	(UPDATE 04/06/2004: this bug is now fixed but needs testing)
	
	The keyboard modifiers are not set to the correct state on startup.

OSF/Tru64:  -= NOT YET SUPPORTED =-
	The audio functions are not implemented yet.

	Joysticks and CD-ROM functions are not implemented yet.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.
	(UPDATE 04/06/2004: this bug is now fixed but needs testing)
	
	The keyboard modifiers are not set to the correct state on startup.

AIX:  -= NOT YET SUPPORTED =-
	This port has only been tested with AIX 4.3.3

	The OpenGL support doesn't work yet.

	The joystick subsystem isn't implemented yet.

	Endian detection doesn't work yet - needs a unique CPP symbol.

	Wide UNICODE character input (Kanji, etc.) is not yet supported.
	It requires handling of keyboard mapping events and using the XIM
	input translation extension.  I will implement it as requested.
	Latin-1 keyboard input works fine.
	(UPDATE 04/06/2004: this bug is now fixed but needs testing)
	
	The keyboard modifiers are not set to the correct state on startup.

	The AIX port was done by Carsten.Griwodz@KOM.tu-darmstadt.de
	More information on this port is available at:
	http://www.kom.e-technik.tu-darmstadt.de/~griff/SDL/

AmigaOS:  -= NOT YET SUPPORTED =-
	The OpenGL support isn't implemented yet.

	SDL_WM_GrabInput() is not implemented.
	Does anyone know how to do this?  SDL_WM_GrabInput() is designed
	to prevent the user from switching input and mouse focus away from
	the SDL application.

	Continuous relative mouse motion is not implemented.

	The AmigaOS port was done by Gabriele.Greco@galactica.it