x11: Drop duplicate XInput2 XI_RawMotion events.
This happens when the pointer is grabbed, but it's not clear if this is a bug in x.org or my misunderstanding of the XGrabPointer() documentation. At any rate, we'll want to revisit this later for a better solution. Fixes Bugzilla #2963.main
parent
7232e51a68
commit
50981d418a
|
@ -136,15 +136,25 @@ X11_HandleXinput2Event(SDL_VideoData *videodata,XGenericEventCookie *cookie)
|
||||||
case XI_RawMotion: {
|
case XI_RawMotion: {
|
||||||
const XIRawEvent *rawev = (const XIRawEvent*)cookie->data;
|
const XIRawEvent *rawev = (const XIRawEvent*)cookie->data;
|
||||||
SDL_Mouse *mouse = SDL_GetMouse();
|
SDL_Mouse *mouse = SDL_GetMouse();
|
||||||
double relative_cords[2];
|
double relative_coords[2];
|
||||||
|
static Time prev_time = 0;
|
||||||
|
static double prev_rel_coords[2];
|
||||||
|
|
||||||
if (!mouse->relative_mode || mouse->relative_mode_warp) {
|
if (!mouse->relative_mode || mouse->relative_mode_warp) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
parse_valuators(rawev->raw_values,rawev->valuators.mask,
|
parse_valuators(rawev->raw_values,rawev->valuators.mask,
|
||||||
rawev->valuators.mask_len,relative_cords,2);
|
rawev->valuators.mask_len,relative_coords,2);
|
||||||
SDL_SendMouseMotion(mouse->focus,mouse->mouseID,1,(int)relative_cords[0],(int)relative_cords[1]);
|
|
||||||
|
if ((rawev->time == prev_time) && (relative_coords[0] == prev_rel_coords[0]) && (relative_coords[1] == prev_rel_coords[1])) {
|
||||||
|
return 0; /* duplicate event, drop it. */
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_SendMouseMotion(mouse->focus,mouse->mouseID,1,(int)relative_coords[0],(int)relative_coords[1]);
|
||||||
|
prev_rel_coords[0] = relative_coords[0];
|
||||||
|
prev_rel_coords[1] = relative_coords[1];
|
||||||
|
prev_time = rawev->time;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue