xserver: Branch 'master' - 8 commits

Peter Hutterer whot at kemper.freedesktop.org
Sun Aug 16 21:42:30 PDT 2009


 Xext/dpms.c                      |   17 --
 Xi/exevents.c                    |  149 +++------------------
 dix/eventconvert.c               |  145 +++++++++++++++++---
 dix/events.c                     |    2 
 dix/getevents.c                  |   12 -
 include/eventstr.h               |   15 --
 include/exevents.h               |  241 +++++++++++++++++++---------------
 include/extinit.h                |    2 
 test/xi2/protocol-eventconvert.c |  274 ++++++++++++++++++++++++++++++++++++++-
 9 files changed, 563 insertions(+), 294 deletions(-)

New commits:
commit 7e37e7c50e4fdcb53296a99d90af3d90081ce9bb
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 11 14:39:50 2009 +1000

    test: add protocol tests for DeviceChangedEvents
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/test/xi2/protocol-eventconvert.c b/test/xi2/protocol-eventconvert.c
index d7fe22e..f723f74 100644
--- a/test/xi2/protocol-eventconvert.c
+++ b/test/xi2/protocol-eventconvert.c
@@ -11,8 +11,7 @@
  *  The above copyright notice and this permission notice (including the next
  *  paragraph) shall be included in all copies or substantial portions of the
  *  Software.
- *
- *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  *  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  *  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  *  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
@@ -31,6 +30,7 @@
 #include "inputstr.h"
 #include "eventstr.h"
 #include "eventconvert.h"
+#include "exevents.h"
 #include <X11/extensions/XI2proto.h>
 
 
@@ -142,12 +142,11 @@ static void test_XIRawEvent(RawDeviceEvent *in)
     test_values_XIRawEvent(in, out, FALSE);
 
     swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
-    XI2EventSwap(out, swapped);
+    XI2EventSwap((xGenericEvent*)out, (xGenericEvent*)swapped);
     test_values_XIRawEvent(in, swapped, TRUE);
 
     xfree(out);
     xfree(swapped);
-
 }
 
 static void test_convert_XIFocusEvent(void)
@@ -402,7 +401,7 @@ static void test_XIDeviceEvent(DeviceEvent *in)
     test_values_XIDeviceEvent(in, out, FALSE);
 
     swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
-    XI2EventSwap(out, swapped);
+    XI2EventSwap((xGenericEvent*)out, (xGenericEvent*)swapped);
     test_values_XIDeviceEvent(in, swapped, TRUE);
 
     xfree(out);
@@ -627,6 +626,270 @@ static void test_convert_XIDeviceEvent(void)
     }
 }
 
+static void test_values_XIDeviceChangedEvent(DeviceChangedEvent *in,
+                                             xXIDeviceChangedEvent *out,
+                                             BOOL swap)
+{
+    int i, j;
+    unsigned char *ptr;
+
+    if (swap)
+    {
+        char n;
+
+        swaps(&out->sequenceNumber, n);
+        swapl(&out->length, n);
+        swaps(&out->evtype, n);
+        swaps(&out->deviceid, n);
+        swaps(&out->sourceid, n);
+        swapl(&out->time, n);
+        swaps(&out->num_classes, n);
+    }
+
+    g_assert(out->type == GenericEvent);
+    g_assert(out->extension == 0); /* IReqCode defaults to 0 */
+    g_assert(out->evtype == GetXI2Type((InternalEvent*)in));
+    g_assert(out->time == in->time);
+    g_assert(out->deviceid == in->deviceid);
+    g_assert(out->sourceid == in->sourceid);
+
+    ptr = (unsigned char*)&out[1];
+    for (i = 0; i < out->num_classes; i++)
+    {
+        xXIAnyInfo* any = (xXIAnyInfo*)ptr;
+
+        if (swap)
+        {
+            char n;
+            swaps(&any->length, n);
+            swaps(&any->type, n);
+            swaps(&any->sourceid, n);
+        }
+
+        switch(any->type)
+        {
+            case XIButtonClass:
+                {
+                    xXIButtonInfo *b = (xXIButtonInfo*)any;
+                    Atom *names;
+
+                    if (swap)
+                    {
+                        char n;
+                        swaps(&b->num_buttons, n);
+                    }
+
+                    g_assert(b->length ==
+                            bytes_to_int32(sizeof(xXIButtonInfo)) +
+                            bytes_to_int32(bits_to_bytes(b->num_buttons)) +
+                            b->num_buttons);
+                    g_assert(b->num_buttons == in->buttons.num_buttons);
+
+                    names = (Atom*)((char*)&b[1] +
+                            pad_to_int32(bits_to_bytes(b->num_buttons)));
+                    for (j = 0; j < b->num_buttons; j++)
+                    {
+                        if (swap)
+                        {
+                            char n;
+                            swapl(&names[j], n);
+                        }
+                        g_assert(names[j] == in->buttons.names[j]);
+                    }
+                }
+                break;
+            case XIKeyClass:
+                {
+                    xXIKeyInfo *k = (xXIKeyInfo*)any;
+                    uint32_t *kc;
+
+                    if (swap)
+                    {
+                        char n;
+                        swaps(&k->num_keycodes, n);
+                    }
+
+                    g_assert(k->length ==
+                            bytes_to_int32(sizeof(xXIKeyInfo)) +
+                            k->num_keycodes);
+                    g_assert(k->num_keycodes == in->keys.max_keycode -
+                            in->keys.min_keycode + 1);
+
+                    kc = (uint32_t*)&k[1];
+                    for (j = 0; j < k->num_keycodes; j++)
+                    {
+                        if (swap)
+                        {
+                            char n;
+                            swapl(&kc[j], n);
+                        }
+                        g_assert(kc[j] >= in->keys.min_keycode);
+                        g_assert(kc[j] <= in->keys.max_keycode);
+                    }
+                }
+                break;
+            case XIValuatorClass:
+                {
+                    xXIValuatorInfo *v = (xXIValuatorInfo*)any;
+                    g_assert(v->length ==
+                             bytes_to_int32(sizeof(xXIValuatorInfo)));
+
+                }
+                break;
+        }
+
+        ptr += any->length * 4;
+    }
+
+}
+
+static void test_XIDeviceChangedEvent(DeviceChangedEvent *in)
+{
+    xXIDeviceChangedEvent *out, *swapped;
+    int rc;
+
+    rc = EventToXI2((InternalEvent*)in, (xEvent**)&out);
+    g_assert(rc == Success);
+
+    test_values_XIDeviceChangedEvent(in, out, FALSE);
+
+    swapped = xcalloc(1, sizeof(xEvent) + out->length * 4);
+    XI2EventSwap((xGenericEvent*)out, (xGenericEvent*)swapped);
+    test_values_XIDeviceChangedEvent(in, swapped, TRUE);
+
+    xfree(out);
+    xfree(swapped);
+}
+
+static void test_convert_XIDeviceChangedEvent(void)
+{
+    DeviceChangedEvent in;
+    int i;
+
+    g_test_message("Testing simple field values");
+    memset(&in, 0, sizeof(in));
+    in.header = ET_Internal;
+    in.type = ET_DeviceChanged;
+    in.length = sizeof(DeviceChangedEvent);
+    in.time             = 0;
+    in.deviceid         = 1;
+    in.sourceid         = 2;
+    in.masterid         = 3;
+    in.num_valuators    = 4;
+    in.flags = DEVCHANGE_SLAVE_SWITCH | DEVCHANGE_POINTER_EVENT | DEVCHANGE_KEYBOARD_EVENT;
+
+    for (i = 0; i < MAX_BUTTONS; i++)
+        in.buttons.names[i] = i + 10;
+
+    in.keys.min_keycode = 8;
+    in.keys.max_keycode = 255;
+
+    test_XIDeviceChangedEvent(&in);
+
+    in.time = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.time = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.time = 1L << 16;
+    test_XIDeviceChangedEvent(&in);
+    in.time = 1L << 24;
+    test_XIDeviceChangedEvent(&in);
+    in.time = ~0L;
+    test_XIDeviceChangedEvent(&in);
+
+    in.deviceid = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.deviceid = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.deviceid = ~0 & 0xFFFF;
+    test_XIDeviceChangedEvent(&in);
+
+    in.sourceid = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.sourceid = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.sourceid = ~0 & 0xFFFF;
+    test_XIDeviceChangedEvent(&in);
+
+    in.masterid = 1L;
+    test_XIDeviceChangedEvent(&in);
+    in.masterid = 1L << 8;
+    test_XIDeviceChangedEvent(&in);
+    in.masterid = ~0 & 0xFFFF;
+    test_XIDeviceChangedEvent(&in);
+
+    in.buttons.num_buttons = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.buttons.num_buttons = 1;
+    test_XIDeviceChangedEvent(&in);
+
+    in.buttons.num_buttons = MAX_BUTTONS;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.min_keycode = 0;
+    in.keys.max_keycode = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.max_keycode = 1 << 8;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.max_keycode = 0xFFFD; /* highest range, above that the length
+                                     field gives up */
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.min_keycode = 1 << 8;
+    in.keys.max_keycode = 1 << 8;
+    test_XIDeviceChangedEvent(&in);
+
+    in.keys.min_keycode = 1 << 8;
+    in.keys.max_keycode = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.num_valuators = 0;
+    test_XIDeviceChangedEvent(&in);
+
+    in.num_valuators = 1;
+    test_XIDeviceChangedEvent(&in);
+
+    in.num_valuators = MAX_VALUATORS;
+    test_XIDeviceChangedEvent(&in);
+
+    for (i = 0; i < MAX_VALUATORS; i++)
+    {
+        in.valuators[i].min = 0;
+        in.valuators[i].max = 0;
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].max = 1 << 8;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].max = 1 << 16;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].max = 1 << 24;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].max = abs(~0);
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].resolution = 1 << 8;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].resolution = 1 << 16;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].resolution = 1 << 24;
+        test_XIDeviceChangedEvent(&in);
+        in.valuators[i].resolution = abs(~0);
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].name = i;
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].mode = Relative;
+        test_XIDeviceChangedEvent(&in);
+
+        in.valuators[i].mode = Absolute;
+        test_XIDeviceChangedEvent(&in);
+    }
+}
+
 int main(int argc, char** argv)
 {
     g_test_init(&argc, &argv,NULL);
@@ -635,6 +898,7 @@ int main(int argc, char** argv)
     g_test_add_func("/xi2/eventconvert/XIRawEvent", test_convert_XIRawEvent);
     g_test_add_func("/xi2/eventconvert/XIFocusEvent", test_convert_XIFocusEvent);
     g_test_add_func("/xi2/eventconvert/XIDeviceEvent", test_convert_XIDeviceEvent);
+    g_test_add_func("/xi2/eventconvert/XIDeviceChangedEvent", test_convert_XIDeviceChangedEvent);
 
     return g_test_run();
 }
commit 2851f04cb2f6e5c30267f733d867c86d4e69a485
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 11 16:27:40 2009 +1000

    dix: rework DeviceChangedEvents a bit.
    
    DCEs are now processed when sent throught the master device, not when sent
    through the slave device. This includes a removal of some un-used (or partly
    used) fields in the DCE itself to something more self-explanatory.
    
    TODO: if a device has events queued and its attachment is changed, the DCE
    is silently dropped now. Instead, it should be generated as soon as the
    first event after the attachment is sent.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 2212649..2377d05 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -699,23 +699,31 @@ XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChanged
 static void
 ChangeMasterDeviceClasses(DeviceIntPtr device, DeviceChangedEvent *dce)
 {
-    DeviceIntPtr master = device->u.master;
+    DeviceIntPtr slave;
+    int rc;
 
-    if (IsMaster(device))
+    /* For now, we don't have devices that change physically. */
+    if (!IsMaster(device))
         return;
 
-    if (!master) /* if device was set floating between SIGIO and now */
-        return;
+    rc = dixLookupDevice(&slave, dce->sourceid, serverClient, DixReadAccess);
+
+    if (rc != Success)
+        return; /* Device has disappeared */
+
+    if (!slave->u.master)
+        return; /* set floating since the event */
 
+    if (slave->u.master->id != dce->masterid)
+        return; /* not our slave anymore, don't care */
 
-    master = GetMaster(device,
-             (dce->flags & DEVCHANGE_POINTER_EVENT) ? MASTER_POINTER : MASTER_KEYBOARD);
+    /* FIXME: we probably need to send a DCE for the new slave now */
 
-    master->public.devicePrivate = device->public.devicePrivate;
+    device->public.devicePrivate = slave->public.devicePrivate;
 
     /* FIXME: the classes may have changed since we generated the event. */
-    DeepCopyDeviceClasses(device, master, dce);
-    XISendDeviceChangedEvent(device, master, dce);
+    DeepCopyDeviceClasses(slave, device, dce);
+    XISendDeviceChangedEvent(slave, device, dce);
 }
 
 /**
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index f0c98ea..07a8e5f 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -350,7 +350,7 @@ appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
     info->type = XIKeyClass;
     info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
     info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
-    info->sourceid = dce->deviceid;
+    info->sourceid = dce->sourceid;
 
     kc = (uint32_t*)&info[1];
     for (i = 0; i < info->num_keycodes; i++)
@@ -371,7 +371,7 @@ appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
     info->num_buttons = dce->buttons.num_buttons;
     info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
                    info->num_buttons + mask_len;
-    info->sourceid = dce->deviceid;
+    info->sourceid = dce->sourceid;
 
     bits = (unsigned char*)&info[1];
     memset(bits, 0, mask_len * 4);
@@ -399,7 +399,7 @@ appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumbe
     info->resolution = dce->valuators[axisnumber].resolution;
     info->number = axisnumber;
     info->mode = dce->valuators[axisnumber].mode; /* Server doesn't have per-axis mode yet */
-    info->sourceid = dce->deviceid;
+    info->sourceid = dce->sourceid;
 
     return info->length * 4;
 }
@@ -441,7 +441,7 @@ eventToDeviceChanged(DeviceChangedEvent *dce, xEvent **xi)
     dcce->evtype       = XI_DeviceChanged;
     dcce->time         = dce->time;
     dcce->deviceid     = dce->deviceid;
-    dcce->sourceid     = dce->deviceid;
+    dcce->sourceid     = dce->sourceid;
     dcce->reason       = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
     dcce->num_classes  = 0;
     dcce->length = bytes_to_int32(len - sizeof(xEvent));
diff --git a/dix/getevents.c b/dix/getevents.c
index 5f00954..2912c1e 100644
--- a/dix/getevents.c
+++ b/dix/getevents.c
@@ -193,19 +193,15 @@ CreateClassesChangedEvent(EventList* event,
 
     dce = (DeviceChangedEvent*)event->event;
     memset(dce, 0, sizeof(DeviceChangedEvent));
-    dce->deviceid = master->id;
+    dce->deviceid = slave->id;
+    dce->masterid = master->id;
     dce->header = ET_Internal;
     dce->length = sizeof(DeviceChangedEvent);
     dce->type = ET_DeviceChanged;
     dce->time = ms;
     dce->flags = type;
-    if (master->last.slave)
-    {
-        dce->flags |= DEVCHANGE_HAS_OLD_SLAVE;
-        dce->old_slaveid = master->last.slave->id;
-    }
-    dce->flags |= DEVCHANGE_HAS_NEW_SLAVE;
-    dce->new_slaveid = slave->id;
+    dce->flags |= DEVCHANGE_SLAVE_SWITCH;
+    dce->sourceid = slave->id;
 
     if (slave->button)
     {
diff --git a/include/eventstr.h b/include/eventstr.h
index b7611a5..8dd98be 100644
--- a/include/eventstr.h
+++ b/include/eventstr.h
@@ -120,9 +120,8 @@ struct _DeviceEvent
 };
 
 
-/* Flags used in DeviceChangedEvent to signal if new/old slave is present. */
-#define DEVCHANGE_HAS_OLD_SLAVE 0x1
-#define DEVCHANGE_HAS_NEW_SLAVE 0x2
+/* Flags used in DeviceChangedEvent to signal if the slave has changed */
+#define DEVCHANGE_SLAVE_SWITCH 0x2
 /* Flags used in DeviceChangedEvent to signal whether the event was a
  * pointer event or a keyboard event */
 #define DEVCHANGE_POINTER_EVENT 0x4
@@ -140,14 +139,10 @@ struct _DeviceChangedEvent
     int length;           /**< Length in bytes */
     Time time;            /**< Time in ms */
     int deviceid;         /**< Device whose capabilities have changed */
-    int flags;            /**< Mask of ::HAS_OLD_SLAVE, ::HAS_NEW_SLAVE,
+    int flags;            /**< Mask of ::HAS_NEW_SLAVE,
                                ::POINTER_EVENT, ::KEYBOARD_EVENT */
-    /** If flags & HAS_OLD_SLAVE is set, old_slaveid specifies SD previously
-     * attached to this device. */
-    int old_slaveid;
-    /** If flags & HAS_NEW_SLAVE is set, new_slaveid specifies device now
-     * attached to this device. */
-    int new_slaveid;
+    int masterid;         /**< MD when event was generated */
+    int sourceid;         /**< The device that caused the change */
 
     struct {
         int num_buttons;        /**< Number of buttons */
commit c1d901d723c3bee523736eacc15b44a7dff484fe
Author: Richard Hughes <richard at hughsie.com>
Date:   Fri Aug 14 11:44:35 2009 +0100

    Don't reset the lastDeviceEventTime when doing DPMS actions
    
    When we change the DPMS mode, don't play games with the last event time as
    this breaks applications using IDLETIME to turn the backlight off after a
    preset time.
    
    This patch fixes gnome-power-manager and xfce-power-manager
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xext/dpms.c b/Xext/dpms.c
index 21ba923..df63a8b 100644
--- a/Xext/dpms.c
+++ b/Xext/dpms.c
@@ -177,19 +177,10 @@ ProcDPMSForceLevel(ClientPtr client)
     if (!DPMSEnabled)
 	return BadMatch;
 
-    if (stuff->level == DPMSModeOn) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis();
-    } else if (stuff->level == DPMSModeStandby) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSStandbyTime;
-    } else if (stuff->level == DPMSModeSuspend) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSSuspendTime;
-    } else if (stuff->level == DPMSModeOff) {
-      lastDeviceEventTime.milliseconds =
-          GetTimeInMillis() -  DPMSOffTime;
-    } else {
+    if (stuff->level != DPMSModeOn &&
+        stuff->level != DPMSModeStandby &&
+        stuff->level != DPMSModeSuspend &&
+        stuff->level != DPMSModeOff) {
 	client->errorValue = stuff->level;
 	return BadValue;
     }
commit dca4de72d375c4b9bcdd25b151e291a77a5b06cc
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Sat Aug 15 20:17:20 2009 +1000

    dix: fix potential use of unused variable 'mask'.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/events.c b/dix/events.c
index d554a7f..8450706 100644
--- a/dix/events.c
+++ b/dix/events.c
@@ -3418,7 +3418,7 @@ CheckPassiveGrabsOnWindow(
     {
 	DeviceIntPtr	gdev;
 	XkbSrvInfoPtr	xkbi = NULL;
-	Mask		mask;
+	Mask		mask = 0;
 
 	gdev= grab->modifierDevice;
         if (grab->grabtype == GRABTYPE_CORE)
commit 978b65bce14598f2d42ca0177ea58fef71fc12c5
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 14 15:05:42 2009 +1000

    include: XInputExtensionInit doesn't need to be exported.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/extinit.h b/include/extinit.h
index 0b36d3b..c3aa7b6 100644
--- a/include/extinit.h
+++ b/include/extinit.h
@@ -32,7 +32,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
 #include "extnsionst.h"
 
-extern _X_EXPORT void
+extern void
 XInputExtensionInit(
 	void
 	);
commit 3989dc1d34f116f30915632cc5286937392e180a
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Tue Aug 11 16:20:20 2009 +1000

    dix: use the XI2 defines for class types.
    
    Doesn't matter really, they have the same values anyway.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index 554f6eb..f0c98ea 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -347,7 +347,7 @@ appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
     uint32_t *kc;
     int i;
 
-    info->type = KeyClass;
+    info->type = XIKeyClass;
     info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
     info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
     info->sourceid = dce->deviceid;
@@ -367,7 +367,7 @@ appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
 
     mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
 
-    info->type = ButtonClass;
+    info->type = XIButtonClass;
     info->num_buttons = dce->buttons.num_buttons;
     info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
                    info->num_buttons + mask_len;
@@ -386,7 +386,7 @@ appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
 static int
 appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
 {
-    info->type = ValuatorClass;
+    info->type = XIValuatorClass;
     info->length = sizeof(xXIValuatorInfo)/4;
     info->label = dce->valuators[axisnumber].name;
     info->min.integral = dce->valuators[axisnumber].min;
commit fe045820f1fb33991e8bff5c6e192097caa85727
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Mon Aug 10 15:34:00 2009 +1000

    input: move DeviceChangedEvent conversion into eventconvert.c
    
    The version in eventconvert.c was half broken and for some reason we ended
    up with a second version in exevents.c (which works). Move it over to where
    it belongs and call EventToXI2 instad of having a custom function for it.
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/Xi/exevents.c b/Xi/exevents.c
index 49eacb4..2212649 100644
--- a/Xi/exevents.c
+++ b/Xi/exevents.c
@@ -674,69 +674,6 @@ DeepCopyDeviceClasses(DeviceIntPtr from, DeviceIntPtr to, DeviceChangedEvent *dc
 }
 
 
-static int
-AppendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
-{
-    uint32_t *kc;
-    int i;
-
-    info->type = KeyClass;
-    info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
-    info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
-    info->sourceid = dce->deviceid;
-
-    kc = (uint32_t*)&info[1];
-    for (i = 0; i < info->num_keycodes; i++)
-        *kc++ = i + dce->keys.min_keycode;
-
-    return info->length * 4;
-}
-
-static int
-AppendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
-{
-    unsigned char *bits;
-    int mask_len;
-
-    mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
-
-    info->type = ButtonClass;
-    info->num_buttons = dce->buttons.num_buttons;
-    info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
-                   info->num_buttons + mask_len;
-    info->sourceid = dce->deviceid;
-
-    bits = (unsigned char*)&info[1];
-    memset(bits, 0, mask_len * 4);
-    /* FIXME: is_down? */
-
-    bits += mask_len * 4;
-    memcpy(bits, dce->buttons.names, dce->buttons.num_buttons * sizeof(Atom));
-
-    return info->length * 4;
-}
-
-static int
-AppendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
-{
-    info->type = ValuatorClass;
-    info->length = sizeof(xXIValuatorInfo)/4;
-    info->label = dce->valuators[axisnumber].name;
-    info->min.integral = dce->valuators[axisnumber].min;
-    info->min.frac = 0;
-    info->max.integral = dce->valuators[axisnumber].max;
-    info->max.frac = 0;
-    /* FIXME: value */
-    info->value.integral = 0;
-    info->value.frac = 0;
-    info->resolution = dce->valuators[axisnumber].resolution;
-    info->number = axisnumber;
-    info->mode = dce->valuators[axisnumber].mode; /* Server doesn't have per-axis mode yet */
-    info->sourceid = dce->deviceid;
-
-    return info->length * 4;
-}
-
 /**
  * Send an XI2 DeviceChangedEvent to all interested clients.
  */
@@ -744,69 +681,19 @@ void
 XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master, DeviceChangedEvent *dce)
 {
     xXIDeviceChangedEvent *dcce;
-    int len = sizeof(xXIDeviceChangedEvent);
-    int nkeys;
-    char *ptr;
-
-    if (dce->buttons.num_buttons)
-    {
-        len += sizeof(xXIButtonInfo);
-        len += dce->buttons.num_buttons * sizeof(Atom); /* button names */
-        len += pad_to_int32(bits_to_bytes(dce->buttons.num_buttons));
-    }
-    if (dce->num_valuators)
-        len += sizeof(xXIValuatorInfo) * dce->num_valuators;
-
-    nkeys = (dce->keys.max_keycode > 0) ?
-                dce->keys.max_keycode - dce->keys.min_keycode + 1 : 0;
-    if (nkeys > 0)
-    {
-        len += sizeof(xXIKeyInfo);
-        len += sizeof(CARD32) * nkeys; /* keycodes */
-    }
+    int rc;
 
-    dcce = xcalloc(1, len);
-    if (!dcce)
+    rc = EventToXI2((InternalEvent*)dce, (xEvent**)&dcce);
+    if (rc != Success)
     {
-        ErrorF("[Xi] BadAlloc in SendDeviceChangedEvent.\n");
+        ErrorF("[Xi] event conversion from DCE failed with code %d\n", rc);
         return;
     }
 
-    dcce->type         = GenericEvent;
-    dcce->extension    = IReqCode;
-    dcce->evtype       = XI_DeviceChanged;
-    dcce->time         = GetTimeInMillis();
-    dcce->deviceid     = master->id;
-    dcce->sourceid     = device->id;
-    dcce->reason       = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
-    dcce->num_classes  = 0;
-    dcce->length = bytes_to_int32(len - sizeof(xEvent));
-
-    ptr = (char*)&dcce[1];
-    if (dce->buttons.num_buttons)
-    {
-        dcce->num_classes++;
-        ptr += AppendButtonInfo(dce, (xXIButtonInfo*)ptr);
-    }
-
-    if (nkeys)
-    {
-        dcce->num_classes++;
-        ptr += AppendKeyInfo(dce, (xXIKeyInfo*)ptr);
-    }
-
-    if (dce->num_valuators)
-    {
-        int i;
-
-        dcce->num_classes += dce->num_valuators;
-        for (i = 0; i < dce->num_valuators; i++)
-            ptr += AppendValuatorInfo(dce, (xXIValuatorInfo*)ptr, i);
-    }
-
     /* we don't actually swap if there's a NullClient, swapping is done
      * later when event is delivered. */
     SendEventToAllWindows(master, XI_DeviceChangedMask, (xEvent*)dcce, 1);
+    xfree(dcce);
 }
 
 static void
diff --git a/dix/eventconvert.c b/dix/eventconvert.c
index cd292a9..554f6eb 100644
--- a/dix/eventconvert.c
+++ b/dix/eventconvert.c
@@ -340,38 +340,135 @@ getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
     return (num_valuators + 5) / 6;
 }
 
+
 static int
-eventToDeviceChanged(DeviceChangedEvent *ev, xEvent **xi)
+appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
 {
-    int len = sizeof(xEvent);
-    DeviceIntPtr slave;
-    int rc;
-    xXIDeviceChangedEvent *dce;
+    uint32_t *kc;
+    int i;
 
-    rc = dixLookupDevice(&slave, ev->new_slaveid,
-                         serverClient, DixReadAccess);
+    info->type = KeyClass;
+    info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
+    info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
+    info->sourceid = dce->deviceid;
 
-    if (rc != Success)
-        return rc;
+    kc = (uint32_t*)&info[1];
+    for (i = 0; i < info->num_keycodes; i++)
+        *kc++ = i + dce->keys.min_keycode;
 
-    len += SizeDeviceClasses(slave);
+    return info->length * 4;
+}
 
-    *xi = xcalloc(1, len);
-    if (!(*xi))
+static int
+appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
+{
+    unsigned char *bits;
+    int mask_len;
+
+    mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
+
+    info->type = ButtonClass;
+    info->num_buttons = dce->buttons.num_buttons;
+    info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
+                   info->num_buttons + mask_len;
+    info->sourceid = dce->deviceid;
+
+    bits = (unsigned char*)&info[1];
+    memset(bits, 0, mask_len * 4);
+    /* FIXME: is_down? */
+
+    bits += mask_len * 4;
+    memcpy(bits, dce->buttons.names, dce->buttons.num_buttons * sizeof(Atom));
+
+    return info->length * 4;
+}
+
+static int
+appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
+{
+    info->type = ValuatorClass;
+    info->length = sizeof(xXIValuatorInfo)/4;
+    info->label = dce->valuators[axisnumber].name;
+    info->min.integral = dce->valuators[axisnumber].min;
+    info->min.frac = 0;
+    info->max.integral = dce->valuators[axisnumber].max;
+    info->max.frac = 0;
+    /* FIXME: value */
+    info->value.integral = 0;
+    info->value.frac = 0;
+    info->resolution = dce->valuators[axisnumber].resolution;
+    info->number = axisnumber;
+    info->mode = dce->valuators[axisnumber].mode; /* Server doesn't have per-axis mode yet */
+    info->sourceid = dce->deviceid;
+
+    return info->length * 4;
+}
+
+static int
+eventToDeviceChanged(DeviceChangedEvent *dce, xEvent **xi)
+{
+    xXIDeviceChangedEvent *dcce;
+    int len = sizeof(xXIDeviceChangedEvent);
+    int nkeys;
+    char *ptr;
+
+    if (dce->buttons.num_buttons)
+    {
+        len += sizeof(xXIButtonInfo);
+        len += dce->buttons.num_buttons * sizeof(Atom); /* button names */
+        len += pad_to_int32(bits_to_bytes(dce->buttons.num_buttons));
+    }
+    if (dce->num_valuators)
+        len += sizeof(xXIValuatorInfo) * dce->num_valuators;
+
+    nkeys = (dce->keys.max_keycode > 0) ?
+                dce->keys.max_keycode - dce->keys.min_keycode + 1 : 0;
+    if (nkeys > 0)
+    {
+        len += sizeof(xXIKeyInfo);
+        len += sizeof(CARD32) * nkeys; /* keycodes */
+    }
+
+    dcce = xcalloc(1, len);
+    if (!dcce)
+    {
+        ErrorF("[Xi] BadAlloc in SendDeviceChangedEvent.\n");
         return BadAlloc;
+    }
+
+    dcce->type         = GenericEvent;
+    dcce->extension    = IReqCode;
+    dcce->evtype       = XI_DeviceChanged;
+    dcce->time         = dce->time;
+    dcce->deviceid     = dce->deviceid;
+    dcce->sourceid     = dce->deviceid;
+    dcce->reason       = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
+    dcce->num_classes  = 0;
+    dcce->length = bytes_to_int32(len - sizeof(xEvent));
+
+    ptr = (char*)&dcce[1];
+    if (dce->buttons.num_buttons)
+    {
+        dcce->num_classes++;
+        ptr += appendButtonInfo(dce, (xXIButtonInfo*)ptr);
+    }
+
+    if (nkeys)
+    {
+        dcce->num_classes++;
+        ptr += appendKeyInfo(dce, (xXIKeyInfo*)ptr);
+    }
+
+    if (dce->num_valuators)
+    {
+        int i;
+
+        dcce->num_classes += dce->num_valuators;
+        for (i = 0; i < dce->num_valuators; i++)
+            ptr += appendValuatorInfo(dce, (xXIValuatorInfo*)ptr, i);
+    }
 
-    dce = (xXIDeviceChangedEvent*)(*xi);
-    dce->type = GenericEvent;
-    dce->extension = IReqCode;
-    dce->evtype = XI_DeviceChanged;
-    dce->time = GetTimeInMillis();
-    dce->sourceid = slave->id;
-    dce->reason = XISlaveSwitch;
-    dce->length = (len - sizeof(xEvent))/4;
-
-    /* FIXME: this should come from the event, not from the device. See
-     * CreateClassesChangedEvent */
-    ListDeviceClasses(slave, (char*)&dce[1], &dce->num_classes);
+    *xi = (xEvent*)dcce;
 
     return Success;
 }
commit 33eb6f70816921abc5da62e434f40e78d672274e
Author: Peter Hutterer <peter.hutterer at who-t.net>
Date:   Fri Aug 14 13:49:58 2009 +1000

    include: Unexport most symbols from exevents.h.
    
    And shuffle them around so that the part used by drivers is up the top and
    commented.
    
    Also, woo, the sdksyms script doesn't like declarations with return type and
    function name on the same line...
    
    Signed-off-by: Peter Hutterer <peter.hutterer at who-t.net>

diff --git a/include/exevents.h b/include/exevents.h
index 8d4b80b..ff39b28 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -33,6 +33,97 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 #include <X11/extensions/XIproto.h>
 #include "inputstr.h"
 
+/***************************************************************
+ *              Interface available to drivers                 *
+ ***************************************************************/
+
+extern _X_EXPORT int InitProximityClassDeviceStruct(
+	DeviceIntPtr           /* dev */);
+
+extern _X_EXPORT void InitValuatorAxisStruct(
+	DeviceIntPtr           /* dev */,
+	int                    /* axnum */,
+	Atom                   /* label */,
+	int                    /* minval */,
+	int                    /* maxval */,
+	int                    /* resolution */,
+	int                    /* min_res */,
+	int                    /* max_res */);
+
+/* Input device properties */
+extern _X_EXPORT void XIDeleteAllDeviceProperties(
+        DeviceIntPtr            /* device */
+);
+
+extern _X_EXPORT int XIDeleteDeviceProperty(
+        DeviceIntPtr            /* device */,
+        Atom                    /* property */,
+        Bool                    /* fromClient */
+);
+
+extern _X_EXPORT int XIChangeDeviceProperty(
+        DeviceIntPtr            /* dev */,
+        Atom                    /* property */,
+        Atom                    /* type */,
+        int                     /* format*/,
+        int                     /* mode*/,
+        unsigned long           /* len*/,
+        pointer                 /* value*/,
+        Bool                    /* sendevent*/
+        );
+
+extern _X_EXPORT int XIGetDeviceProperty(
+        DeviceIntPtr            /* dev */,
+        Atom                    /* property */,
+        XIPropertyValuePtr*     /* value */
+);
+
+extern _X_EXPORT int XISetDevicePropertyDeletable(
+        DeviceIntPtr            /* dev */,
+        Atom                    /* property */,
+        Bool                    /* deletable */
+);
+
+extern _X_EXPORT long XIRegisterPropertyHandler(
+        DeviceIntPtr         dev,
+        int (*SetProperty) (DeviceIntPtr dev,
+                            Atom property,
+                            XIPropertyValuePtr prop,
+                            BOOL checkonly),
+        int (*GetProperty) (DeviceIntPtr dev,
+                            Atom property),
+        int (*DeleteProperty) (DeviceIntPtr dev,
+                               Atom property)
+);
+
+extern _X_EXPORT void XIUnregisterPropertyHandler(
+        DeviceIntPtr          dev,
+        long                  id
+);
+
+extern _X_EXPORT Atom XIGetKnownProperty(
+        char*                 name
+);
+
+extern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev);
+
+extern _X_EXPORT int XIPropToInt(
+        XIPropertyValuePtr val,
+        int *nelem_return,
+        int **buf_return
+);
+
+extern _X_EXPORT int XIPropToFloat(
+        XIPropertyValuePtr val,
+        int *nelem_return,
+        float **buf_return
+);
+
+/****************************************************************************
+ *                      End of driver interface                             *
+ ****************************************************************************/
+
+
 /**
  * Attached to the devPrivates of each client. Specifies the version number as
  * supported by the client.
@@ -55,43 +146,35 @@ typedef struct _GrabParameters {
 } GrabParameters;
 
 
-extern _X_EXPORT void RegisterOtherDevice (
+extern void
+RegisterOtherDevice (
 	DeviceIntPtr           /* device */);
 
-extern _X_EXPORT int
+extern int
 UpdateDeviceState (
 	DeviceIntPtr           /* device */,
 	DeviceEvent*           /*  xE    */);
 
-extern _X_EXPORT void ProcessOtherEvent (
+extern void
+ProcessOtherEvent (
 	InternalEvent*         /* ev */,
 	DeviceIntPtr           /* other */);
 
-extern _X_EXPORT int InitProximityClassDeviceStruct(
-	DeviceIntPtr           /* dev */);
-
-extern _X_EXPORT void InitValuatorAxisStruct(
-	DeviceIntPtr           /* dev */,
-	int                    /* axnum */,
-	Atom                   /* label */,
-	int                    /* minval */,
-	int                    /* maxval */,
-	int                    /* resolution */,
-	int                    /* min_res */,
-	int                    /* max_res */);
-
-extern void DeviceFocusEvent(
+extern void
+DeviceFocusEvent(
 	DeviceIntPtr           /* dev */,
 	int                    /* type */,
 	int                    /* mode */,
 	int                    /* detail */,
 	WindowPtr              /* pWin */);
 
-extern int CheckGrabValues(
+extern int
+CheckGrabValues(
         ClientPtr              /* client */,
         GrabParameters*        /* param */);
 
-extern int GrabButton(
+extern int
+GrabButton(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	DeviceIntPtr           /* modifier_device */,
@@ -100,7 +183,8 @@ extern int GrabButton(
         GrabType               /* grabtype */,
 	GrabMask*              /* eventMask */);
 
-extern int GrabKey(
+extern int
+GrabKey(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	DeviceIntPtr           /* modifier_device */,
@@ -109,34 +193,40 @@ extern int GrabKey(
         GrabType               /* grabtype */,
 	GrabMask*              /* eventMask */);
 
-extern int GrabWindow(
+extern int
+GrabWindow(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	int                    /* type */,
 	GrabParameters*        /* param */,
 	GrabMask*              /* eventMask */);
 
-extern int SelectForWindow(
+extern int
+SelectForWindow(
 	DeviceIntPtr           /* dev */,
 	WindowPtr              /* pWin */,
 	ClientPtr              /* client */,
 	Mask                   /* mask */,
 	Mask                   /* exclusivemasks */);
 
-extern _X_EXPORT int AddExtensionClient (
+extern int
+AddExtensionClient (
 	WindowPtr              /* pWin */,
 	ClientPtr              /* client */,
 	Mask                   /* mask */,
 	int                    /* mskidx */);
 
-extern _X_EXPORT void RecalculateDeviceDeliverableEvents(
+extern void
+RecalculateDeviceDeliverableEvents(
 	WindowPtr              /* pWin */);
 
-extern _X_EXPORT int InputClientGone(
+extern int
+InputClientGone(
 	WindowPtr              /* pWin */,
 	XID                    /* id */);
 
-extern _X_EXPORT int SendEvent (
+extern int
+SendEvent (
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* d */,
 	Window                 /* dest */,
@@ -145,13 +235,15 @@ extern _X_EXPORT int SendEvent (
 	Mask                   /* mask */,
 	int                    /* count */);
 
-extern _X_EXPORT int SetButtonMapping (
+extern int
+SetButtonMapping (
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	int                    /* nElts */,
 	BYTE *                 /* map */);
 
-extern _X_EXPORT int ChangeKeyMapping(
+extern int
+ChangeKeyMapping(
 	ClientPtr              /* client */,
 	DeviceIntPtr           /* dev */,
 	unsigned               /* len */,
@@ -161,15 +253,18 @@ extern _X_EXPORT int ChangeKeyMapping(
 	CARD8                  /* keySymsPerKeyCode */,
 	KeySym *               /* map */);
 
-extern _X_EXPORT void DeleteWindowFromAnyExtEvents(
+extern void
+DeleteWindowFromAnyExtEvents(
 	WindowPtr              /* pWin */,
 	Bool                   /* freeResources */);
 
-extern _X_EXPORT int MaybeSendDeviceMotionNotifyHint (
+extern int
+MaybeSendDeviceMotionNotifyHint (
 	deviceKeyButtonPointer * /* pEvents */,
 	Mask                   /* mask */);
 
-extern _X_EXPORT void CheckDeviceGrabAndHintWindow (
+extern void
+CheckDeviceGrabAndHintWindow (
 	WindowPtr              /* pWin */,
 	int                    /* type */,
 	deviceKeyButtonPointer * /* xE */,
@@ -177,17 +272,20 @@ extern _X_EXPORT void CheckDeviceGrabAndHintWindow (
 	ClientPtr              /* client */,
 	Mask                   /* deliveryMask */);
 
-extern _X_EXPORT void MaybeStopDeviceHint(
+extern void
+MaybeStopDeviceHint(
 	DeviceIntPtr           /* dev */,
 	ClientPtr              /* client */);
 
-extern _X_EXPORT int DeviceEventSuppressForWindow(
+extern int
+DeviceEventSuppressForWindow(
 	WindowPtr              /* pWin */,
 	ClientPtr              /* client */,
 	Mask                   /* mask */,
 	int                    /* maskndx */);
 
-extern _X_EXPORT void SendEventToAllWindows(
+extern void
+SendEventToAllWindows(
         DeviceIntPtr           /* dev */,
         Mask                   /* mask */,
         xEvent *               /* ev */,
@@ -197,85 +295,18 @@ extern _X_HIDDEN void XI2EventSwap(
         xGenericEvent  *              /* from */,
         xGenericEvent  *              /* to */);
 
-/* Input device properties */
-extern _X_EXPORT void XIDeleteAllDeviceProperties(
-        DeviceIntPtr            /* device */
-);
-
-extern _X_EXPORT int XIDeleteDeviceProperty(
-        DeviceIntPtr            /* device */,
-        Atom                    /* property */,
-        Bool                    /* fromClient */
-);
-
-extern _X_EXPORT int XIChangeDeviceProperty(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        Atom                    /* type */,
-        int                     /* format*/,
-        int                     /* mode*/,
-        unsigned long           /* len*/,
-        pointer                 /* value*/,
-        Bool                    /* sendevent*/
-        );
-
-extern _X_EXPORT int XIGetDeviceProperty(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        XIPropertyValuePtr*     /* value */
-);
-
-extern _X_EXPORT int XISetDevicePropertyDeletable(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        Bool                    /* deletable */
-);
-
-extern _X_EXPORT long XIRegisterPropertyHandler(
-        DeviceIntPtr         dev,
-        int (*SetProperty) (DeviceIntPtr dev,
-                            Atom property,
-                            XIPropertyValuePtr prop,
-                            BOOL checkonly),
-        int (*GetProperty) (DeviceIntPtr dev,
-                            Atom property),
-        int (*DeleteProperty) (DeviceIntPtr dev,
-                               Atom property)
-);
-
-extern _X_EXPORT void XIUnregisterPropertyHandler(
-        DeviceIntPtr          dev,
-        long                  id
-);
-
-extern _X_EXPORT Atom XIGetKnownProperty(
-        char*                 name
-);
-
-extern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev);
-
-extern _X_EXPORT int XIPropToInt(
-        XIPropertyValuePtr val,
-        int *nelem_return,
-        int **buf_return
-);
-
-extern _X_EXPORT int XIPropToFloat(
-        XIPropertyValuePtr val,
-        int *nelem_return,
-        float **buf_return
-);
-
 /* For an event such as MappingNotify which affects client interpretation
  * of input events sent by device dev, should we notify the client, or
  * would it merely be irrelevant and confusing? */
-extern _X_EXPORT int XIShouldNotify(ClientPtr client, DeviceIntPtr dev);
+extern int
+XIShouldNotify(ClientPtr client, DeviceIntPtr dev);
 
 extern void
 XISendDeviceChangedEvent(DeviceIntPtr device, DeviceIntPtr master,
                          DeviceChangedEvent *dce);
 
-extern void XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
+extern void
+XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
                            unsigned int len, unsigned char* mask);
 
 #endif /* EXEVENTS_H */


More information about the xorg-commit mailing list