xkb: always post XTest button up when the physical button released (#28808)

Regression introduced by commit 2decff6393
  xkb: ProcesssPointerEvent must work on the VCP if it gets the VCP

XTest buttons must be released when a physical button is released. This was
fixed in 1432785839, but
2decff6393 changed a condition that this code
didn't get triggered anymore.

"dev" for pointer events is now always the VCP which doesn't have a xkbi
struct. So move this condition out and always trigger the XTest released for
button events.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Tested-by: Frank Roscher <Frank-Roscher@gmx.net>
This commit is contained in:
Peter Hutterer 2012-12-04 15:03:37 +10:00
parent b51a1bd276
commit c4fee9d2ec

View File

@ -723,23 +723,22 @@ ProcessPointerEvent(InternalEvent *ev, DeviceIntPtr mouse)
changed |= XkbPointerButtonMask;
}
else if (event->type == ET_ButtonRelease) {
if (xkbi) {
xkbi->lockedPtrButtons &= ~(1 << (event->detail.key & 0x7));
if (IsMaster(dev)) {
DeviceIntPtr source;
int rc;
if (IsMaster(dev)) {
DeviceIntPtr source;
int rc;
rc = dixLookupDevice(&source, event->sourceid, serverClient,
DixWriteAccess);
if (rc != Success)
ErrorF("[xkb] bad sourceid '%d' on button release event.\n",
event->sourceid);
else if (!IsXTestDevice(source, GetMaster(dev, MASTER_POINTER)))
XkbFakeDeviceButton(dev, FALSE, event->detail.key);
}
rc = dixLookupDevice(&source, event->sourceid, serverClient,
DixWriteAccess);
if (rc != Success)
ErrorF("[xkb] bad sourceid '%d' on button release event.\n",
event->sourceid);
else if (!IsXTestDevice(source, GetMaster(dev, MASTER_POINTER)))
XkbFakeDeviceButton(dev, FALSE, event->detail.key);
}
if (xkbi)
xkbi->lockedPtrButtons &= ~(1 << (event->detail.key & 0x7));
changed |= XkbPointerButtonMask;
}