diff --git a/dix/getevents.c b/dix/getevents.c index ee08bed49..ce086d524 100644 --- a/dix/getevents.c +++ b/dix/getevents.c @@ -1006,10 +1006,14 @@ GetPointerEvents(EventList *events, DeviceIntPtr pDev, int type, int buttons, kbp->type = DeviceMotionNotify; } else { - if (type == ButtonPress) + if (type == ButtonPress) { kbp->type = DeviceButtonPress; - else if (type == ButtonRelease) + pDev->button->postdown[buttons >> 3] |= (1 << (buttons & 7)); + } + else if (type == ButtonRelease) { kbp->type = DeviceButtonRelease; + pDev->button->postdown[buttons >> 3] &= ~(1 << (buttons & 7)); + } kbp->detail = buttons; } diff --git a/include/inputstr.h b/include/inputstr.h index daee7ed32..2ee4f9be3 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -181,6 +181,7 @@ typedef struct _ButtonClassRec { unsigned short state; Mask motionMask; CARD8 down[DOWN_LENGTH]; + CARD8 postdown[DOWN_LENGTH]; CARD8 map[MAP_LENGTH]; union _XkbAction *xkb_acts; } ButtonClassRec, *ButtonClassPtr;