# HG changeset patch # User Bob Pendleton # Date 1244750913 0 # Node ID 08747e24a50f78be9e510c198f7a230e5381eaaf # Parent c18c03927a7764ad29b0645f35f5d78251b4bf1e Mouse events now report the correct window id and window enter/leave events are now reported. diff -r c18c03927a77 -r 08747e24a50f src/events/SDL_mouse.c --- a/src/events/SDL_mouse.c Thu Jun 11 06:03:05 2009 +0000 +++ b/src/events/SDL_mouse.c Thu Jun 11 20:08:33 2009 +0000 @@ -97,6 +97,7 @@ /* we're setting the mouse properties */ length = 0; length = SDL_strlen(name); + SDL_mice[index]->focus = 0; 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; diff -r c18c03927a77 -r 08747e24a50f src/video/x11/SDL_x11events.c --- a/src/video/x11/SDL_x11events.c Thu Jun 11 06:03:05 2009 +0000 +++ b/src/video/x11/SDL_x11events.c Thu Jun 11 20:08:33 2009 +0000 @@ -83,8 +83,10 @@ /* Gaining mouse coverage? */ case EnterNotify:{ #ifdef DEBUG_XEVENTS - printf("EnterNotify! (%d,%d)\n", xevent.xcrossing.x, - xevent.xcrossing.y); + printf("EnterNotify! (%d,%d,%d)\n", + xevent.xcrossing.x, + xevent.xcrossing.y, + xevent.xcrossing.mode); if (xevent.xcrossing.mode == NotifyGrab) printf("Mode: NotifyGrab\n"); if (xevent.xcrossing.mode == NotifyUngrab) @@ -92,10 +94,12 @@ #endif if ((xevent.xcrossing.mode != NotifyGrab) && (xevent.xcrossing.mode != NotifyUngrab)) { +#if 1 /* FIXME: Should we reset data for all mice? */ -#if 0 - SDL_SetMouseFocus(0, data->windowID); - SDL_SendMouseMotion(0, 0, move->x, move->y, 0); + for (i = 0; i < SDL_GetNumMice(); ++i) { + SDL_Mouse *mouse = SDL_GetMouse(i); + SDL_SetMouseFocus(mouse->id, data->windowID); + } #endif } } @@ -104,8 +108,10 @@ /* Losing mouse coverage? */ case LeaveNotify:{ #ifdef DEBUG_XEVENTS - printf("LeaveNotify! (%d,%d)\n", xevent.xcrossing.x, - xevent.xcrossing.y); + printf("LeaveNotify! (%d,%d,%d)\n", + xevent.xcrossing.x, + xevent.xcrossing.y, + xevent.xcrossing.mode); if (xevent.xcrossing.mode == NotifyGrab) printf("Mode: NotifyGrab\n"); if (xevent.xcrossing.mode == NotifyUngrab) @@ -114,9 +120,12 @@ if ((xevent.xcrossing.mode != NotifyGrab) && (xevent.xcrossing.mode != NotifyUngrab) && (xevent.xcrossing.detail != NotifyInferior)) { +#if 1 /* FIXME: Should we reset data for all mice? */ -#if 0 - SDL_SetMouseFocus(0, 0); + for (i = 0; i < SDL_GetNumMice(); ++i) { + SDL_Mouse *mouse = SDL_GetMouse(i); + SDL_SetMouseFocus(mouse->id, 0); + } #endif } } diff -r c18c03927a77 -r 08747e24a50f src/video/x11/SDL_x11mouse.c --- a/src/video/x11/SDL_x11mouse.c Thu Jun 11 06:03:05 2009 +0000 +++ b/src/video/x11/SDL_x11mouse.c Thu Jun 11 20:08:33 2009 +0000 @@ -52,6 +52,8 @@ #endif int num_mice = 0; + SDL_zero(mouse); + #if SDL_VIDEO_DRIVER_X11_XINPUT /* we're getting the list of input devices */ n = 0;