From 15e4b6c57484b6afb790c7dc1db9f529ba2219cf Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Tue, 24 Jun 2008 13:46:40 +0930 Subject: [PATCH] input: for non-device events (e.g. DevicePresence) use MAX_DEVICES as id. Using id = 0 only worked pre-MPX since XInput didn't allow XOpenDevice for the core devices (0 and 1). Now we can now legally register for events so we may overwrite our device-independent classes with the ones selected for the VCP. So, increase the EMASKSIZE to MAX_DEVICES + 1 and use MAX_DEVICES as the ID when we don't have a device. --- Xi/selectev.c | 4 ++-- dix/devices.c | 7 ++++--- include/inputstr.h | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Xi/selectev.c b/Xi/selectev.c index d3670ab1b..53d8f7408 100644 --- a/Xi/selectev.c +++ b/Xi/selectev.c @@ -106,10 +106,10 @@ HandleDevicePresenceMask(ClientPtr client, WindowPtr win, if (mask == 0) return Success; - /* We always only use mksidx = 0 for events not bound to + /* We always only use mksidx = MAX_DEVICES for events not bound to * devices */ - if (AddExtensionClient (win, client, mask, 0) != Success) + if (AddExtensionClient (win, client, mask, MAX_DEVICES) != Success) return BadAlloc; RecalculateDeviceDeliverableEvents(win); diff --git a/dix/devices.c b/dix/devices.c index 91a43f342..0a68c0e61 100644 --- a/dix/devices.c +++ b/dix/devices.c @@ -275,7 +275,7 @@ EnableDevice(DeviceIntPtr dev) ev.time = currentTime.milliseconds; ev.devchange = DeviceEnabled; ev.deviceid = dev->id; - dummyDev.id = 0; + dummyDev.id = MAX_DEVICES; SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask, (xEvent *) &ev, 1); @@ -339,7 +339,7 @@ DisableDevice(DeviceIntPtr dev) ev.time = currentTime.milliseconds; ev.devchange = DeviceDisabled; ev.deviceid = dev->id; - dummyDev.id = 0; + dummyDev.id = MAX_DEVICES; SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask, (xEvent *) &ev, 1); @@ -379,6 +379,7 @@ ActivateDevice(DeviceIntPtr dev) ev.deviceid = dev->id; memset(&dummyDev, 0, sizeof(DeviceIntRec)); + dummyDev.id = MAX_DEVICES; SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask, (xEvent *) &ev, 1); @@ -937,7 +938,7 @@ RemoveDevice(DeviceIntPtr dev) ev.time = currentTime.milliseconds; ev.devchange = DeviceRemoved; ev.deviceid = deviceid; - dummyDev.id = 0; + dummyDev.id = MAX_DEVICES; SendEventToAllWindows(&dummyDev, DevicePresenceNotifyMask, (xEvent *) &ev, 1); } diff --git a/include/inputstr.h b/include/inputstr.h index 4c7ec2eb9..e5de6fc31 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -66,7 +66,7 @@ SOFTWARE. #define MAX_DEVICES 20 -#define EMASKSIZE MAX_DEVICES +#define EMASKSIZE MAX_DEVICES + 1 extern DevPrivateKey CoreDevicePrivateKey;