Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
The core pointer is comprised of merging the inputs of all mice.
Browse files Browse the repository at this point in the history
If there are other mice, they should show up in the device list, and
we want to report events from those devices instead of the core events.
However, if XInput isn't supported or we can't find other mice in the
device list, we'll add the core pointer and interpret normal mouse events.
  • Loading branch information
slouken committed Jan 4, 2009
1 parent 38ca010 commit 6e15856
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 24 deletions.
31 changes: 16 additions & 15 deletions src/video/x11/SDL_x11events.c
Expand Up @@ -280,21 +280,6 @@ X11_DispatchEvent(_THIS)
}
break;

case MotionNotify:
#ifdef DEBUG_MOTION
printf("X11 motion: %d,%d\n", xevent.xmotion.x, xevent.xmotion.y);
#endif
SDL_SendMouseMotion(0, 0, xevent.xmotion.x, xevent.xmotion.y, 0);
break;

case ButtonPress:
SDL_SendMouseButton(0, SDL_PRESSED, xevent.xbutton.button);
break;

case ButtonRelease:
SDL_SendMouseButton(0, SDL_RELEASED, xevent.xbutton.button);
break;

default:{
#if SDL_VIDEO_DRIVER_X11_XINPUT
for (i = 0; i < SDL_GetNumMice(); ++i) {
Expand All @@ -304,6 +289,22 @@ X11_DispatchEvent(_THIS)
mouse = SDL_GetMouse(i);
data = (X11_MouseData *) mouse->driverdata;
if (!data) {
switch (xevent.type) {
case MotionNotify:
#ifdef DEBUG_MOTION
printf("X11 motion: %d,%d\n", xevent.xmotion.x, xevent.xmotion.y);
#endif
SDL_SendMouseMotion(0, 0, xevent.xmotion.x, xevent.xmotion.y, 0);
break;

case ButtonPress:
SDL_SendMouseButton(0, SDL_PRESSED, xevent.xbutton.button);
break;

case ButtonRelease:
SDL_SendMouseButton(0, SDL_RELEASED, xevent.xbutton.button);
break;
}
continue;
}

Expand Down
21 changes: 12 additions & 9 deletions src/video/x11/SDL_x11mouse.c
Expand Up @@ -50,19 +50,14 @@ X11_InitMouse(_THIS)
int event_code;
XEventClass xEvent;
#endif

SDL_zero(mouse);
SDL_AddMouse(&mouse, "CorePointer", 0, 0, 1);
int num_mice = 0;

#if SDL_VIDEO_DRIVER_X11_XINPUT
if (!SDL_X11_HAVE_XINPUT) {
/* should have dynamically loaded, but wasn't available. */
return;
}

/* we're getting the list of input devices */
n = 0;
DevList = XListInputDevices(display, &n);
if (SDL_X11_HAVE_XINPUT) {
DevList = XListInputDevices(display, &n);
}

/* we're aquiring valuators: mice, tablets, etc. */
for (i = 0; i < n; ++i) {
Expand Down Expand Up @@ -127,6 +122,9 @@ X11_InitMouse(_THIS)
} else {
SDL_AddMouse(&mouse, DevList[i].name, 0, 0, 1);
}
if (DevList[i].use == IsXExtensionPointer) {
++num_mice;
}
break;
}
/* if it's not class we're interested in, lets go further */
Expand All @@ -138,6 +136,11 @@ X11_InitMouse(_THIS)
}
XFreeDeviceList(DevList);
#endif

if (num_mice == 0) {
SDL_zero(mouse);
SDL_AddMouse(&mouse, "CorePointer", 0, 0, 1);
}
}

void
Expand Down

0 comments on commit 6e15856

Please sign in to comment.