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:
parent
bc4ae25433
commit
2a35d44b6d
11
Xext/xtest.c
11
Xext/xtest.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user