Merge remote-tracking branch 'whot/for-keith'
No conflicts here
This commit is contained in:
commit
97041364a6
|
@ -79,10 +79,21 @@ ProcXIQueryPointer(ClientPtr client)
|
||||||
XkbStatePtr state;
|
XkbStatePtr state;
|
||||||
char *buttons = NULL;
|
char *buttons = NULL;
|
||||||
int buttons_size = 0; /* size of buttons array */
|
int buttons_size = 0; /* size of buttons array */
|
||||||
|
XIClientPtr xi_client;
|
||||||
|
Bool have_xi22 = FALSE;
|
||||||
|
|
||||||
REQUEST(xXIQueryPointerReq);
|
REQUEST(xXIQueryPointerReq);
|
||||||
REQUEST_SIZE_MATCH(xXIQueryPointerReq);
|
REQUEST_SIZE_MATCH(xXIQueryPointerReq);
|
||||||
|
|
||||||
|
/* Check if client is compliant with XInput 2.2 or later. Earlier clients
|
||||||
|
* do not know about touches, so we must report emulated button presses. 2.2
|
||||||
|
* and later clients are aware of touches, so we don't include emulated
|
||||||
|
* button presses in the reply. */
|
||||||
|
xi_client = dixLookupPrivate(&client->devPrivates, XIClientPrivateKey);
|
||||||
|
if (version_compare(xi_client->major_version,
|
||||||
|
xi_client->minor_version, 2, 2) >= 0)
|
||||||
|
have_xi22 = TRUE;
|
||||||
|
|
||||||
rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixReadAccess);
|
rc = dixLookupDevice(&pDev, stuff->deviceid, client, DixReadAccess);
|
||||||
if (rc != Success) {
|
if (rc != Success) {
|
||||||
client->errorValue = stuff->deviceid;
|
client->errorValue = stuff->deviceid;
|
||||||
|
@ -132,7 +143,7 @@ ProcXIQueryPointer(ClientPtr client)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pDev->button) {
|
if (pDev->button) {
|
||||||
int i, down;
|
int i;
|
||||||
|
|
||||||
rep.buttons_len =
|
rep.buttons_len =
|
||||||
bytes_to_int32(bits_to_bytes(pDev->button->numButtons));
|
bytes_to_int32(bits_to_bytes(pDev->button->numButtons));
|
||||||
|
@ -142,14 +153,12 @@ ProcXIQueryPointer(ClientPtr client)
|
||||||
if (!buttons)
|
if (!buttons)
|
||||||
return BadAlloc;
|
return BadAlloc;
|
||||||
|
|
||||||
down = pDev->button->buttonsDown;
|
for (i = 1; i < pDev->button->numButtons; i++)
|
||||||
|
if (BitIsOn(pDev->button->down, i))
|
||||||
|
SetBit(buttons, pDev->button->map[i]);
|
||||||
|
|
||||||
for (i = 0; i < pDev->button->numButtons && down; i++) {
|
if (!have_xi22 && pDev->touch && pDev->touch->buttonsDown > 0)
|
||||||
if (BitIsOn(pDev->button->down, i)) {
|
SetBit(buttons, pDev->button->map[1]);
|
||||||
SetBit(buttons, i);
|
|
||||||
down--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
rep.buttons_len = 0;
|
rep.buttons_len = 0;
|
||||||
|
|
Loading…
Reference in New Issue