# HG changeset patch # User Szymon Wilczek # Date 1219687334 0 # Node ID abacf2555bb4fe25ef4738eb4a8e5638c7d864d1 # Parent 50bc882455e5d6534f74d686ca595c98331f0271 Removed unneccesary code lines. Fixed mousename bug. Added lacking code in mousebutton diff -r 50bc882455e5 -r abacf2555bb4 include/SDL_mouse.h --- a/include/SDL_mouse.h Mon Aug 25 17:34:58 2008 +0000 +++ b/include/SDL_mouse.h Mon Aug 25 18:02:14 2008 +0000 @@ -55,6 +55,17 @@ extern DECLSPEC int SDLCALL SDL_GetNumMice(void); /** + * \fn char* SDL_GetMouseName(int index) + * + * \brief Gets the name of a mouse with the given index. + * + * \param index is the index of the mouse, which name is to be returned. + * + * \return the name of the mouse with the specified index + */ +extern DECLSPEC char *SDLCALL SDL_GetMouseName(int index); + +/** * \fn int SDL_SelectMouse(int index) * * \brief Set the index of the currently selected mouse. @@ -206,13 +217,35 @@ Button 3: Right mouse button */ -/* FIXME: Where do these functions go in this header? - Also, add doxygen documentation for these... -*/ -extern DECLSPEC char *SDLCALL SDL_GetMouseName(int index); - +/** + * \fn int SDL_GetCursorsNumber(int index) + * + * \brief Gets the number of cursors a pointing device supports. + * Useful for tablet users. Useful only under Windows. + * + * \param index is the index of the pointing device, which number of cursors we + * want to receive. + * + * \return the number of cursors supported by the pointing device. On Windows + * if a device is a tablet it returns a number >=1. Normal mice always return 1. + * On Linux every device reports one cursor. + */ extern DECLSPEC int SDLCALL SDL_GetCursorsNumber(int index); +/** + * \fn int SDL_GetCurrentCursor(int index) + * + * \brief Returns the index of the current cursor used by a specific pointing + * device. Useful only under Windows. + * + * \param index is the index of the pointing device, which cursor index we want + * to receive. + * + * \return the index of the cursor currently used by a specific pointing device. + * Always 0 under Linux. On Windows if the device isn't a tablet it returns 0. + * If the device is the tablet it returns the cursor index. + * 0 - stylus, 1 - eraser, 2 - cursor. + */ extern DECLSPEC int SDLCALL SDL_GetCurrentCursor(int index); #define SDL_BUTTON(X) (1 << ((X)-1)) diff -r 50bc882455e5 -r abacf2555bb4 src/events/SDL_mouse.c --- a/src/events/SDL_mouse.c Mon Aug 25 17:34:58 2008 +0000 +++ b/src/events/SDL_mouse.c Mon Aug 25 18:02:14 2008 +0000 @@ -116,8 +116,8 @@ /* we're setting the mouse properties */ length = 0; length = SDL_strlen(name); - SDL_mice[index]->name = SDL_malloc((length + 1) * sizeof(char)); - SDL_strlcpy(SDL_mice[index]->name, name, length); + SDL_mice[index]->name = SDL_malloc((length + 2) * sizeof(char)); + SDL_strlcpy(SDL_mice[index]->name, name, length+1); SDL_mice[index]->pressure_max = pressure_max; SDL_mice[index]->pressure_min = pressure_min; SDL_mice[index]->cursor_shown = SDL_TRUE; @@ -512,6 +512,10 @@ mouse->buttonstate |= SDL_BUTTON(button); break; case SDL_RELEASED: + if(!(mouse->buttonstate & SDL_BUTTON(button))) { + /* Ignore this event, no state change */ + return 0; + } type = SDL_MOUSEBUTTONUP; mouse->buttonstate &= ~SDL_BUTTON(button); break; diff -r 50bc882455e5 -r abacf2555bb4 src/video/x11/SDL_x11window.c --- a/src/video/x11/SDL_x11window.c Mon Aug 25 17:34:58 2008 +0000 +++ b/src/video/x11/SDL_x11window.c Mon Aug 25 18:02:14 2008 +0000 @@ -483,7 +483,6 @@ Uint32 fevent = 0; pXGetICValues(((SDL_WindowData *) window->driverdata)->ic, XNFilterEvents, &fevent, NULL); - XMapWindow(data->display, w); XSelectInput(data->display, w, (FocusChangeMask | EnterWindowMask | LeaveWindowMask | ExposureMask | ButtonPressMask | ButtonReleaseMask | @@ -492,13 +491,14 @@ KeymapStateMask | fevent)); } #else - XMapWindow(data->display, w); - XSelectInput(data->display, w, + { + XSelectInput(data->display, w, (FocusChangeMask | EnterWindowMask | LeaveWindowMask | ExposureMask | ButtonPressMask | ButtonReleaseMask | PointerMotionMask | KeyPressMask | KeyReleaseMask | PropertyChangeMask | StructureNotifyMask | KeymapStateMask)); + } #endif /* we're informing the display what extension events we want to receive from it */