xserver: Branch 'master' - 2 commits

Peter Hutterer whot at kemper.freedesktop.org
Wed Jun 25 22:59:40 PDT 2008


 Xi/selectev.c      |    4 ++--
 dix/devices.c      |    7 ++++---
 dix/events.c       |    2 +-
 include/inputstr.h |    2 +-
 4 files changed, 8 insertions(+), 7 deletions(-)

New commits:
commit 15e4b6c57484b6afb790c7dc1db9f529ba2219cf
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Tue Jun 24 13:46:40 2008 +0930

    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.

diff --git a/Xi/selectev.c b/Xi/selectev.c
index d3670ab..53d8f74 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 91a43f3..0a68c0e 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 4c7ec2e..e5de6fc 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;
 
commit f0c56ffd980db19bea271aeebf118bd931f6f40d
Author: Peter Hutterer <peter at cs.unisa.edu.au>
Date:   Tue Jun 24 12:58:49 2008 +0930

    dix: don't dereference dev->key if it doesn't exist.
    
    This may happen if we check for a passive grab on a floating pointer device.

diff --git a/dix/events.c b/dix/events.c
index f6309f2..a4deaaa 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3389,7 +3389,7 @@ CheckPassiveGrabsOnWindow(
             else
                 gdev = device;
         }
-        if (gdev)
+        if (gdev && gdev->key)
             xkbi= gdev->key->xkbInfo;
 #endif
 	tempGrab.modifierDevice = grab->modifierDevice;


More information about the xorg-commit mailing list