Update device valuators on XTest motion event, otherwise the cursor jumps

between coordinates stored in device and coordinates sent by the event.
This commit is contained in:
Peter Hutterer 2007-02-28 15:43:06 +10:30 committed by Peter Hutterer
parent bc4ae25433
commit 2a35d44b6d

View File

@ -316,7 +316,7 @@ ProcXTestFakeInput(client)
#ifdef XINPUT #ifdef XINPUT
if (!extension) if (!extension)
#endif /* XINPUT */ #endif /* XINPUT */
dev = (DeviceIntPtr)LookupKeyboardDevice(); dev = inputInfo.keyboard;
if (ev->u.u.detail < dev->key->curKeySyms.minKeyCode || if (ev->u.u.detail < dev->key->curKeySyms.minKeyCode ||
ev->u.u.detail > dev->key->curKeySyms.maxKeyCode) ev->u.u.detail > dev->key->curKeySyms.maxKeyCode)
{ {
@ -360,7 +360,8 @@ ProcXTestFakeInput(client)
break; break;
} }
#endif /* XINPUT */ #endif /* XINPUT */
dev = (DeviceIntPtr)LookupPointerDevice(); if (!dev)
dev = inputInfo.pointer;
if (ev->u.keyButtonPointer.root == None) if (ev->u.keyButtonPointer.root == None)
root = GetCurrentRootWindow(); root = GetCurrentRootWindow();
else else
@ -378,7 +379,7 @@ ProcXTestFakeInput(client)
if (ev->u.u.detail == xTrue) if (ev->u.u.detail == xTrue)
{ {
int x, y; int x, y;
GetSpritePosition(inputInfo.pointer, &x, &y); GetSpritePosition(dev, &x, &y);
ev->u.keyButtonPointer.rootX += x; ev->u.keyButtonPointer.rootX += x;
ev->u.keyButtonPointer.rootY += y; ev->u.keyButtonPointer.rootY += y;
} }
@ -442,13 +443,15 @@ ProcXTestFakeInput(client)
(dev, root->drawable.pScreen, (dev, root->drawable.pScreen,
ev->u.keyButtonPointer.rootX, ev->u.keyButtonPointer.rootX,
ev->u.keyButtonPointer.rootY, FALSE); ev->u.keyButtonPointer.rootY, FALSE);
dev->valuator->lastx = ev->u.keyButtonPointer.rootX;
dev->valuator->lasty = ev->u.keyButtonPointer.rootY;
break; break;
case ButtonPress: case ButtonPress:
case ButtonRelease: case ButtonRelease:
#ifdef XINPUT #ifdef XINPUT
if (!extension) if (!extension)
#endif /* XINPUT */ #endif /* XINPUT */
dev = (DeviceIntPtr)LookupPointerDevice(); dev = inputInfo.pointer;
if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons) if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons)
{ {
client->errorValue = ev->u.u.detail; client->errorValue = ev->u.u.detail;