diff options
Diffstat (limited to 'Xi/xiselectev.c')
-rw-r--r-- | Xi/xiselectev.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Xi/xiselectev.c b/Xi/xiselectev.c index 87811dc2d..cdb9c6ff0 100644 --- a/Xi/xiselectev.c +++ b/Xi/xiselectev.c @@ -67,6 +67,7 @@ ProcXISelectEvent(ClientPtr client) int rc, num_masks, i; WindowPtr win; DeviceIntPtr dev; + DeviceIntRec dummy; xXIDeviceEventMask *evmask; int *types = NULL; @@ -109,7 +110,13 @@ ProcXISelectEvent(ClientPtr client) num_masks = stuff->num_masks; while(num_masks--) { - dixLookupDevice(&dev, evmask->deviceid, client, DixReadAccess); + if (evmask->deviceid == AllDevices || + evmask->deviceid == AllMasterDevices) + { + dummy.id = evmask->deviceid; + dev = &dummy; + } else + dixLookupDevice(&dev, evmask->deviceid, client, DixReadAccess); XISetEventMask(dev, win, client, evmask->mask_len * 4, (unsigned char*)&evmask[1]); evmask = (xXIDeviceEventMask*)(((unsigned char*)evmask) + evmask->mask_len * 4); } |