mirror of
https://gitlab.freedesktop.org/xorg/xserver.git
synced 2026-01-01 07:10:09 +01:00
Xext: set POINTER_SCREEN flag in XTestFakeInput if necessary. (RH #490984)
The POINTER_SCREEN flag must be set explicitly for XTest core events to avoid
out-of-range events when the lastSlave was an SD with an explicit axis range.
Device events sent through XTest don't need this flag, they are expected to be
in the valuator range of the device anyway.
Red Hat Bug 490984 <https://bugzilla.redhat.com/show_bug.cgi?id=490984>
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 603db34337)
This commit is contained in:
parent
6ff60c6261
commit
fcffa3a178
1 changed files with 11 additions and 3 deletions
14
Xext/xtest.c
14
Xext/xtest.c
|
|
@ -161,6 +161,7 @@ ProcXTestFakeInput(client)
|
|||
int nevents;
|
||||
int i;
|
||||
int base = 0;
|
||||
int flags = 0;
|
||||
|
||||
nev = (stuff->length << 2) - sizeof(xReq);
|
||||
if ((nev % sizeof(xEvent)) || !nev)
|
||||
|
|
@ -211,8 +212,14 @@ ProcXTestFakeInput(client)
|
|||
client->errorValue = ev->u.u.type;
|
||||
return BadValue;
|
||||
}
|
||||
|
||||
if (ev->u.u.detail == xFalse)
|
||||
flags |= POINTER_ABSOLUTE;
|
||||
} else
|
||||
{
|
||||
firstValuator = 0;
|
||||
flags |= POINTER_ABSOLUTE;
|
||||
}
|
||||
|
||||
if (nev == 1 && type == XI_DeviceMotionNotify && !dev->valuator)
|
||||
{
|
||||
|
|
@ -281,6 +288,8 @@ ProcXTestFakeInput(client)
|
|||
valuators[1] = ev->u.keyButtonPointer.rootY;
|
||||
numValuators = 2;
|
||||
firstValuator = 0;
|
||||
if (ev->u.u.detail == xFalse)
|
||||
flags = POINTER_ABSOLUTE | POINTER_SCREEN;
|
||||
break;
|
||||
default:
|
||||
client->errorValue = ev->u.u.type;
|
||||
|
|
@ -378,14 +387,13 @@ ProcXTestFakeInput(client)
|
|||
GetEventList(&events);
|
||||
switch(type) {
|
||||
case MotionNotify:
|
||||
nevents = GetPointerEvents(events, dev, type, 0,
|
||||
(ev->u.u.detail == xFalse) ? POINTER_ABSOLUTE : 0,
|
||||
nevents = GetPointerEvents(events, dev, type, 0, flags,
|
||||
firstValuator, numValuators, valuators);
|
||||
break;
|
||||
case ButtonPress:
|
||||
case ButtonRelease:
|
||||
nevents = GetPointerEvents(events, dev, type, ev->u.u.detail,
|
||||
POINTER_ABSOLUTE, firstValuator,
|
||||
flags, firstValuator,
|
||||
numValuators, valuators);
|
||||
break;
|
||||
case KeyPress:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue