summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-03-13 14:59:18 +1000
committerPeter Hutterer <peter.hutterer@who-t.net>2009-03-16 13:29:06 +1000
commit18430616cfd5d0bc5a3efe61fcc2982b1726b0de (patch)
treea54929e6280d45a49b1ab8b2272c6cba2195368f
parente31727158cda7729283233cfdc9bc5bcb59a52c1 (diff)
dix: use PickPointer() and PickKeyboard instead of inputInfo.pointer/keyboard.
Affected calls: ProcChangeKeyboardControl ProcBell ProcUngrabKey ProcUngrabButton
-rw-r--r--dix/devices.c19
-rw-r--r--dix/events.c10
2 files changed, 19 insertions, 10 deletions
diff --git a/dix/devices.c b/dix/devices.c
index 4406fcd76..a79d04eb2 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -1824,13 +1824,16 @@ DoChangeKeyboardControl (ClientPtr client, DeviceIntPtr keybd, XID *vlist,
#undef DO_ALL
}
+/**
+ * Changes kbd control on the ClientPointer and all attached SDs.
+ */
int
ProcChangeKeyboardControl (ClientPtr client)
{
XID *vlist;
BITS32 vmask;
int ret = Success, error = Success;
- DeviceIntPtr pDev = NULL;
+ DeviceIntPtr pDev = NULL, keyboard;
REQUEST(xChangeKeyboardControlReq);
REQUEST_AT_LEAST_SIZE(xChangeKeyboardControlReq);
@@ -1841,8 +1844,10 @@ ProcChangeKeyboardControl (ClientPtr client)
if (client->req_len != (sizeof(xChangeKeyboardControlReq)>>2)+Ones(vmask))
return BadLength;
+ keyboard = PickKeyboard(client);
+
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
- if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
+ if ((pDev == keyboard || (!pDev->isMaster && pDev->u.master == keyboard)) &&
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
ret = XaceHook(XACE_DEVICE_ACCESS, client, pDev, DixManageAccess);
if (ret != Success)
@@ -1851,7 +1856,7 @@ ProcChangeKeyboardControl (ClientPtr client)
}
for (pDev = inputInfo.devices; pDev; pDev = pDev->next) {
- if ((pDev->coreEvents || pDev == inputInfo.keyboard) &&
+ if ((pDev == keyboard || (!pDev->isMaster && pDev->u.master == keyboard)) &&
pDev->kbdfeed && pDev->kbdfeed->CtrlProc) {
ret = DoChangeKeyboardControl(client, pDev, vlist, vmask);
if (ret != Success)
@@ -1893,7 +1898,7 @@ ProcGetKeyboardControl (ClientPtr client)
int
ProcBell(ClientPtr client)
{
- DeviceIntPtr keybd = PickKeyboard(client);
+ DeviceIntPtr dev, keybd = PickKeyboard(client);
int base = keybd->kbdfeed->ctrl.bell;
int newpercent;
int rc;
@@ -1920,14 +1925,14 @@ ProcBell(ClientPtr client)
newpercent = base - newpercent + stuff->percent;
for (keybd = inputInfo.devices; keybd; keybd = keybd->next) {
- if ((keybd->coreEvents || keybd == inputInfo.keyboard) &&
+ if ((dev == keybd || (!dev->isMaster && dev->u.master == keybd)) &&
keybd->kbdfeed && keybd->kbdfeed->BellProc) {
- rc = XaceHook(XACE_DEVICE_ACCESS, client, keybd, DixBellAccess);
+ rc = XaceHook(XACE_DEVICE_ACCESS, client, dev, DixBellAccess);
if (rc != Success)
return rc;
XkbHandleBell(FALSE, FALSE, keybd, newpercent,
- &keybd->kbdfeed->ctrl, 0, None, NULL, client);
+ &dev->kbdfeed->ctrl, 0, None, NULL, client);
}
}
diff --git a/dix/events.c b/dix/events.c
index 68826c2a8..d8d8ec536 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -4880,7 +4880,7 @@ ProcUngrabKey(ClientPtr client)
tempGrab.window = pWin;
tempGrab.modifiersDetail.exact = stuff->modifiers;
tempGrab.modifiersDetail.pMask = NULL;
- tempGrab.modifierDevice = inputInfo.keyboard;
+ tempGrab.modifierDevice = GetPairedDevice(keybd);
tempGrab.type = KeyPress;
tempGrab.detail.exact = stuff->key;
tempGrab.detail.pMask = NULL;
@@ -5055,6 +5055,7 @@ ProcUngrabButton(ClientPtr client)
WindowPtr pWin;
GrabRec tempGrab;
int rc;
+ DeviceIntPtr ptr;
REQUEST_SIZE_MATCH(xUngrabButtonReq);
if ((stuff->modifiers != AnyModifier) &&
@@ -5066,12 +5067,15 @@ ProcUngrabButton(ClientPtr client)
rc = dixLookupWindow(&pWin, stuff->grabWindow, client, DixReadAccess);
if (rc != Success)
return rc;
+
+ ptr = PickPointer(client);
+
tempGrab.resource = client->clientAsMask;
- tempGrab.device = PickPointer(client);
+ tempGrab.device = ptr;
tempGrab.window = pWin;
tempGrab.modifiersDetail.exact = stuff->modifiers;
tempGrab.modifiersDetail.pMask = NULL;
- tempGrab.modifierDevice = inputInfo.keyboard;
+ tempGrab.modifierDevice = GetPairedDevice(ptr);
tempGrab.type = ButtonPress;
tempGrab.detail.exact = stuff->button;
tempGrab.detail.pMask = NULL;