Skip to content

Commit

Permalink
# User Darren Salt <devspam@moreofthesa.me.uk>
Browse files Browse the repository at this point in the history
# Date 1379621782 -3600
#      Thu Sep 19 21:16:22 2013 +0100
Work around a false-positive in the X11 mouse wheel code

This false positive occurs when one particular button on my mouse is
pressed. The kernel which I'm using is patched to cause a release event to
be synthesised immediately when the mouse says that this button is pressed
because the mouse doesn't signal release until the button is next pressed.

(Also documents a false negative, observed with the horizontal scroll wheel
on the same mouse.)
  • Loading branch information
slouken committed Sep 28, 2013
1 parent c95761e commit b956777
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion src/video/x11/SDL_x11events.c
Expand Up @@ -135,7 +135,9 @@ static Bool X11_IsWheelCheckIfEvent(Display *display, XEvent *chkev,
XPointer arg)
{
XEvent *event = (XEvent *) arg;
/* we only handle buttons 4 and 5 - false positive avoidance */
if (chkev->type == ButtonRelease &&
(event->xbutton.button == Button4 || event->xbutton.button == Button5) &&
chkev->xbutton.button == event->xbutton.button &&
chkev->xbutton.time == event->xbutton.time)
return True;
Expand All @@ -150,7 +152,12 @@ static SDL_bool X11_IsWheelEvent(Display * display,XEvent * event,int * ticks)
however, mouse wheel events trigger a button press and a button release
immediately. thus, checking if the same button was released at the same
time as it was pressed, should be an adequate hack to derive a mouse
wheel event. */
wheel event.
However, there is broken and unusual hardware out there...
- False positive: a button for which a release event is
generated (or synthesised) immediately.
- False negative: a wheel which, when rolled, doesn't have
a release event generated immediately. */
if (XCheckIfEvent(display, &relevent, X11_IsWheelCheckIfEvent,
(XPointer) event)) {

Expand Down

0 comments on commit b956777

Please sign in to comment.