[PATCH 1/3] Xi: remove configure/query device property calls.

Peter Hutterer peter.hutterer at who-t.net
Mon Sep 22 01:38:36 PDT 2008


From: Peter Hutterer <peter.hutterer at redhat.com>

This removes all the meta-information about device properties (pending,
fromClient, range, valid_values, immutable).
---
 Xi/extinit.c       |   58 +++++------
 Xi/xiproperty.c    |  282 ++++++++--------------------------------------------
 Xi/xiproperty.h    |    6 -
 dix/devices.c      |    7 +-
 include/exevents.h |   21 +----
 include/inputstr.h |   12 +--
 6 files changed, 75 insertions(+), 311 deletions(-)

diff --git a/Xi/extinit.c b/Xi/extinit.c
index 595e358..9d0ca78 100644
--- a/Xi/extinit.c
+++ b/Xi/extinit.c
@@ -211,22 +211,20 @@ static int (*ProcIVector[])(ClientPtr) = {
 	ProcXChangeDeviceControl,               /* 35 */
         /* XI 1.5 */
         ProcXListDeviceProperties,              /* 36 */
-        ProcXQueryDeviceProperty,               /* 37 */
-        ProcXConfigureDeviceProperty,           /* 38 */
-        ProcXChangeDeviceProperty,              /* 39 */
-        ProcXDeleteDeviceProperty,              /* 40 */
-        ProcXGetDeviceProperty,                 /* 41 */
+        ProcXChangeDeviceProperty,              /* 37 */
+        ProcXDeleteDeviceProperty,              /* 38 */
+        ProcXGetDeviceProperty,                 /* 39 */
         /* XI 2 */
-        ProcXQueryDevicePointer,                /* 42 */
-        ProcXWarpDevicePointer,                 /* 43 */
-        ProcXChangeDeviceCursor,                /* 44 */
-        ProcXChangeDeviceHierarchy,             /* 45 */
-        ProcXChangeWindowAccess,                /* 46 */
-        ProcXQueryWindowAccess,                 /* 47 */
-        ProcXSetClientPointer,                  /* 48 */
-        ProcXGetClientPointer,                  /* 49 */
-        ProcXiSelectEvent,                      /* 50 */
-        ProcXExtendedGrabDevice                 /* 51 */
+        ProcXQueryDevicePointer,                /* 40 */
+        ProcXWarpDevicePointer,                 /* 41 */
+        ProcXChangeDeviceCursor,                /* 42 */
+        ProcXChangeDeviceHierarchy,             /* 43 */
+        ProcXChangeWindowAccess,                /* 44 */
+        ProcXQueryWindowAccess,                 /* 45 */
+        ProcXSetClientPointer,                  /* 46 */
+        ProcXGetClientPointer,                  /* 47 */
+        ProcXiSelectEvent,                      /* 48 */
+        ProcXExtendedGrabDevice                 /* 49 */
 };
 
 /* For swapped clients */
@@ -268,21 +266,19 @@ static int (*SProcIVector[])(ClientPtr) = {
 	SProcXGetDeviceControl,                  /* 34 */
 	SProcXChangeDeviceControl,               /* 35 */
         SProcXListDeviceProperties,              /* 36 */
-        SProcXQueryDeviceProperty,               /* 37 */
-        SProcXConfigureDeviceProperty,           /* 38 */
-        SProcXChangeDeviceProperty,              /* 39 */
-        SProcXDeleteDeviceProperty,              /* 40 */
-        SProcXGetDeviceProperty,                 /* 41 */
-        SProcXQueryDevicePointer,                /* 42 */
-        SProcXWarpDevicePointer,                 /* 43 */
-        SProcXChangeDeviceCursor,                /* 44 */
-        SProcXChangeDeviceHierarchy,             /* 45 */
-        SProcXChangeWindowAccess,                /* 46 */
-        SProcXQueryWindowAccess,                 /* 47 */
-        SProcXSetClientPointer,                  /* 48 */
-        SProcXGetClientPointer,                  /* 49 */
-        SProcXiSelectEvent,                      /* 50 */
-        SProcXExtendedGrabDevice                 /* 51 */
+        SProcXChangeDeviceProperty,              /* 37 */
+        SProcXDeleteDeviceProperty,              /* 38 */
+        SProcXGetDeviceProperty,                 /* 39 */
+        SProcXQueryDevicePointer,                /* 40 */
+        SProcXWarpDevicePointer,                 /* 41 */
+        SProcXChangeDeviceCursor,                /* 42 */
+        SProcXChangeDeviceHierarchy,             /* 43 */
+        SProcXChangeWindowAccess,                /* 44 */
+        SProcXQueryWindowAccess,                 /* 45 */
+        SProcXSetClientPointer,                  /* 46 */
+        SProcXGetClientPointer,                  /* 47 */
+        SProcXiSelectEvent,                      /* 48 */
+        SProcXExtendedGrabDevice                 /* 49 */
 };
 
 /*****************************************************************
@@ -480,8 +476,6 @@ SReplyIDispatch(ClientPtr client, int len, xGrabDeviceReply * rep)
 				 (xChangeDeviceControlReply *) rep);
     else if (rep->RepType == X_ListDeviceProperties)
         SRepXListDeviceProperties(client, len, (xListDevicePropertiesReply*)rep);
-    else if (rep->RepType == X_QueryDeviceProperty)
-        SRepXQueryDeviceProperty(client, len, (xQueryDevicePropertyReply*)rep);
     else if (rep->RepType == X_GetDeviceProperty)
 	SRepXGetDeviceProperty(client, len, (xGetDevicePropertyReply *) rep);
     else if (rep->RepType == X_QueryDevicePointer)
diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c
index df93de5..425cd75 100644
--- a/Xi/xiproperty.c
+++ b/Xi/xiproperty.c
@@ -138,15 +138,6 @@ XIUnRegisterPropertyHandler(DeviceIntPtr dev, long id)
     xfree(curr);
 }
 
-static void
-XIInitDevicePropertyValue (XIPropertyValuePtr property_value)
-{
-    property_value->type   = None;
-    property_value->format = 0;
-    property_value->size   = 0;
-    property_value->data   = NULL;
-}
-
 static XIPropertyPtr
 XICreateDeviceProperty (Atom property)
 {
@@ -156,29 +147,32 @@ XICreateDeviceProperty (Atom property)
     if (!prop)
         return NULL;
 
-    prop->next         = NULL;
-    prop->propertyName = property;
-    prop->is_pending   = FALSE;
-    prop->range        = FALSE;
-    prop->fromClient   = FALSE;
-    prop->immutable    = FALSE;
-    prop->num_valid    = 0;
-    prop->valid_values = NULL;
-
-    XIInitDevicePropertyValue (&prop->current);
-    XIInitDevicePropertyValue (&prop->pending);
+    prop->next          = NULL;
+    prop->propertyName  = property;
+    prop->value.type   = None;
+    prop->value.format = 0;
+    prop->value.size   = 0;
+    prop->value.data   = NULL;
+
     return prop;
 }
 
+static XIPropertyPtr
+XIFetchDeviceProperty(DeviceIntPtr dev, Atom property)
+{
+    XIPropertyPtr   prop;
+
+    for (prop = dev->properties.properties; prop; prop = prop->next)
+        if (prop->propertyName == property)
+            return prop;
+    return NULL;
+}
+
 static void
 XIDestroyDeviceProperty (XIPropertyPtr prop)
 {
-    if (prop->valid_values)
-        xfree (prop->valid_values);
-    if (prop->current.data)
-        xfree(prop->current.data);
-    if (prop->pending.data)
-        xfree(prop->pending.data);
+    if (prop->value.data)
+        xfree(prop->value.data);
     xfree(prop);
 }
 
@@ -229,9 +223,6 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
         if (prop->propertyName == property)
             break;
 
-    if (!prop->fromClient && fromClient)
-        return BadAtom;
-
     if (prop)
     {
         *prev = prop->next;
@@ -251,8 +242,7 @@ XIDeleteDeviceProperty (DeviceIntPtr device, Atom property, Bool fromClient)
 int
 XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
                         int format, int mode, unsigned long len,
-                        pointer value, Bool sendevent, Bool pending,
-                        Bool fromClient)
+                        pointer value, Bool sendevent)
 {
     XIPropertyPtr               prop;
     devicePropertyNotify        event;
@@ -266,20 +256,16 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
     size_in_bytes = format >> 3;
 
     /* first see if property already exists */
-    prop = XIQueryDeviceProperty (dev, property);
+    prop = XIFetchDeviceProperty (dev, property);
     if (!prop)   /* just add to list */
     {
         prop = XICreateDeviceProperty (property);
         if (!prop)
             return(BadAlloc);
-        prop->fromClient = fromClient;
         add = TRUE;
         mode = PropModeReplace;
     }
-    if (pending && prop->is_pending)
-        prop_value = &prop->pending;
-    else
-        prop_value = &prop->current;
+    prop_value = &prop->value;
 
     /* To append or prepend to a property the request format and type
      must match those of the already defined property.  The
@@ -334,12 +320,7 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
             memcpy ((char *) old_data, (char *) prop_value->data,
                     prop_value->size * size_in_bytes);
 
-        /* We must set pendingProperties TRUE before we commit to the driver,
-           we're in a single thread after all
-         */
-        if (pending && prop->is_pending)
-            dev->properties.pendingProperties = TRUE;
-        if (pending && dev->properties.handlers)
+        if (dev->properties.handlers)
         {
             XIPropertyHandlerPtr handler = dev->properties.handlers;
             while(handler)
@@ -357,9 +338,7 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
         if (prop_value->data)
             xfree (prop_value->data);
         *prop_value = new_value;
-    }
-
-    else if (len == 0)
+    } else if (len == 0)
     {
         /* do nothing */
     }
@@ -384,97 +363,29 @@ XIChangeDeviceProperty (DeviceIntPtr dev, Atom property, Atom type,
     return(Success);
 }
 
-XIPropertyPtr
-XIQueryDeviceProperty (DeviceIntPtr dev, Atom property)
-{
-    XIPropertyPtr   prop;
-
-    for (prop = dev->properties.properties; prop; prop = prop->next)
-        if (prop->propertyName == property)
-            return prop;
-    return NULL;
-}
-
-XIPropertyValuePtr
-XIGetDeviceProperty (DeviceIntPtr dev, Atom property, Bool pending)
+/**
+ *
+ */
+_X_EXPORT XIPropertyValuePtr
+XIGetDeviceProperty (DeviceIntPtr dev, Atom property)
 {
-    XIPropertyPtr   prop = XIQueryDeviceProperty (dev, property);
+    XIPropertyPtr   prop = XIFetchDeviceProperty (dev, property);
 
     if (!prop)
         return NULL;
-    if (pending && prop->is_pending)
-        return &prop->pending;
-    else {
-        /* If we can, try to update the property value first */
-        if (dev->properties.handlers)
-        {
-            XIPropertyHandlerPtr handler = dev->properties.handlers;
-            while(handler)
-            {
-                if (handler->GetProperty)
-                    handler->GetProperty(dev, prop->propertyName);
-                handler = handler->next;
-            }
-        }
-        return &prop->current;
-    }
-}
-
-int
-XIConfigureDeviceProperty (DeviceIntPtr dev, Atom property,
-                           Bool pending, Bool range, Bool immutable,
-                           int num_values, INT32 *values)
-{
-    XIPropertyPtr   prop = XIQueryDeviceProperty (dev, property);
-    Bool            add = FALSE;
-    INT32           *new_values;
 
-    if (!prop)
+    /* If we can, try to update the property value first */
+    if (dev->properties.handlers)
     {
-        prop = XICreateDeviceProperty (property);
-        if (!prop)
-            return(BadAlloc);
-        add = TRUE;
-    } else if (prop->immutable && !immutable)
-        return(BadAccess);
-
-    /*
-     * ranges must have even number of values
-     */
-    if (range && (num_values & 1))
-        return BadMatch;
-
-    new_values = xalloc (num_values * sizeof (INT32));
-    if (!new_values && num_values)
-        return BadAlloc;
-    if (num_values)
-        memcpy (new_values, values, num_values * sizeof (INT32));
-
-    /*
-     * Property moving from pending to non-pending
-     * loses any pending values
-     */
-    if (prop->is_pending && !pending)
-    {
-        if (prop->pending.data)
-            xfree (prop->pending.data);
-        XIInitDevicePropertyValue (&prop->pending);
-    }
-
-    prop->is_pending = pending;
-    prop->range = range;
-    prop->immutable = immutable;
-    prop->num_valid = num_values;
-    if (prop->valid_values)
-        xfree (prop->valid_values);
-    prop->valid_values = new_values;
-
-    if (add) {
-        prop->next = dev->properties.properties;
-        dev->properties.properties = prop;
+        XIPropertyHandlerPtr handler = dev->properties.handlers;
+        while(handler)
+        {
+            if (handler->GetProperty)
+                handler->GetProperty(dev, prop->propertyName);
+            handler = handler->next;
+        }
     }
-
-    return Success;
+    return &prop->value;
 }
 
 int
@@ -527,71 +438,6 @@ ProcXListDeviceProperties (ClientPtr client)
 }
 
 int
-ProcXQueryDeviceProperty (ClientPtr client)
-{
-    REQUEST(xQueryDevicePropertyReq);
-    xQueryDevicePropertyReply   rep;
-    DeviceIntPtr                dev;
-    XIPropertyPtr               prop;
-    int                         rc;
-
-    REQUEST_SIZE_MATCH(xQueryDevicePropertyReq);
-
-    rc = dixLookupDevice (&dev, stuff->deviceid, client, DixReadAccess);
-
-    if (rc != Success)
-        return rc;
-
-    prop = XIQueryDeviceProperty (dev, stuff->property);
-    if (!prop)
-        return BadName;
-
-    rep.repType = X_Reply;
-    rep.length = prop->num_valid;
-    rep.sequenceNumber = client->sequence;
-    rep.pending = prop->is_pending;
-    rep.range = prop->range;
-    rep.immutable = prop->immutable;
-    rep.fromClient = prop->fromClient;
-    if (client->swapped)
-    {
-        int n;
-        swaps (&rep.sequenceNumber, n);
-        swapl (&rep.length, n);
-    }
-    WriteReplyToClient (client, sizeof (xQueryDevicePropertyReply), &rep);
-    if (prop->num_valid)
-    {
-        client->pSwapReplyFunc = (ReplySwapPtr)Swap32Write;
-        WriteSwappedDataToClient(client, prop->num_valid * sizeof(INT32),
-                                 prop->valid_values);
-    }
-    return(client->noClientException);
-}
-
-int
-ProcXConfigureDeviceProperty (ClientPtr client)
-{
-    REQUEST(xConfigureDevicePropertyReq);
-    DeviceIntPtr        dev;
-    int                 num_valid;
-    int                 rc;
-
-    REQUEST_AT_LEAST_SIZE(xConfigureDevicePropertyReq);
-
-    rc = dixLookupDevice (&dev, stuff->deviceid, client, DixReadAccess);
-
-    if (rc != Success)
-        return rc;
-
-    num_valid = stuff->length - (sizeof (xConfigureDevicePropertyReq) >> 2);
-    return XIConfigureDeviceProperty (dev, stuff->property,
-                                      stuff->pending, stuff->range,
-                                      FALSE, num_valid,
-                                      (INT32 *) (stuff + 1));
-}
-
-int
 ProcXChangeDeviceProperty (ClientPtr client)
 {
     REQUEST(xChangeDevicePropertyReq);
@@ -641,8 +487,7 @@ ProcXChangeDeviceProperty (ClientPtr client)
 
     rc = XIChangeDeviceProperty(dev, stuff->property,
                                  stuff->type, (int)format,
-                                 (int)mode, len, (pointer)&stuff[1], TRUE,
-                                 TRUE, TRUE);
+                                 (int)mode, len, (pointer)&stuff[1], TRUE);
 
     return rc;
 }
@@ -666,7 +511,6 @@ ProcXDeleteDeviceProperty (ClientPtr client)
         return (BadAtom);
     }
 
-
     rc = XIDeleteDeviceProperty(dev, stuff->property, TRUE);
     return rc;
 }
@@ -726,10 +570,7 @@ ProcXGetDeviceProperty (ClientPtr client)
         return(client->noClientException);
     }
 
-    if (prop->immutable && stuff->delete)
-        return BadAccess;
-
-    prop_value = XIGetDeviceProperty(dev, stuff->property, stuff->pending);
+    prop_value = XIGetDeviceProperty(dev, stuff->property);
     if (!prop_value)
         return BadAtom;
 
@@ -822,32 +663,6 @@ SProcXListDeviceProperties (ClientPtr client)
 }
 
 int
-SProcXQueryDeviceProperty (ClientPtr client)
-{
-    char n;
-    REQUEST(xQueryDevicePropertyReq);
-
-    swaps(&stuff->length, n);
-    swapl(&stuff->property, n);
-
-    REQUEST_SIZE_MATCH(xQueryDevicePropertyReq);
-    return (ProcXQueryDeviceProperty(client));
-}
-
-int
-SProcXConfigureDeviceProperty (ClientPtr client)
-{
-    char n;
-    REQUEST(xConfigureDevicePropertyReq);
-
-    swaps(&stuff->length, n);
-    swapl(&stuff->property, n);
-
-    REQUEST_SIZE_MATCH(xConfigureDevicePropertyReq);
-    return (ProcXConfigureDeviceProperty(client));
-}
-
-int
 SProcXChangeDeviceProperty (ClientPtr client)
 {
     char n;
@@ -904,17 +719,6 @@ SRepXListDeviceProperties(ClientPtr client, int size,
 }
 
 void
-SRepXQueryDeviceProperty(ClientPtr client, int size,
-                         xQueryDevicePropertyReply *rep)
-{
-    char n;
-    swaps(&rep->sequenceNumber, n);
-    swapl(&rep->length, n);
-
-    WriteToClient(client, size, (char*)rep);
-}
-
-void
 SRepXGetDeviceProperty(ClientPtr client, int size,
                        xGetDevicePropertyReply *rep)
 {
diff --git a/Xi/xiproperty.h b/Xi/xiproperty.h
index 11af4bc..12026e9 100644
--- a/Xi/xiproperty.h
+++ b/Xi/xiproperty.h
@@ -27,16 +27,12 @@
 #define XIPROPERTY_C
 
 int ProcXListDeviceProperties     (ClientPtr client);
-int ProcXQueryDeviceProperty      (ClientPtr client);
-int ProcXConfigureDeviceProperty  (ClientPtr client);
 int ProcXChangeDeviceProperty     (ClientPtr client);
 int ProcXDeleteDeviceProperty     (ClientPtr client);
 int ProcXGetDeviceProperty        (ClientPtr client);
 
 /* request swapping */
 int SProcXListDeviceProperties    (ClientPtr client);
-int SProcXQueryDeviceProperty     (ClientPtr client);
-int SProcXConfigureDeviceProperty (ClientPtr client);
 int SProcXChangeDeviceProperty    (ClientPtr client);
 int SProcXDeleteDeviceProperty    (ClientPtr client);
 int SProcXGetDeviceProperty       (ClientPtr client);
@@ -44,8 +40,6 @@ int SProcXGetDeviceProperty       (ClientPtr client);
 /* reply swapping */
 void SRepXListDeviceProperties(ClientPtr client, int size,
                                xListDevicePropertiesReply *rep);
-void SRepXQueryDeviceProperty(ClientPtr client, int size,
-                              xQueryDevicePropertyReply *rep);
 void SRepXGetDeviceProperty(ClientPtr client, int size,
                             xGetDevicePropertyReply *rep);
 
diff --git a/dix/devices.c b/dix/devices.c
index 4f216bd..c0df6a2 100644
--- a/dix/devices.c
+++ b/dix/devices.c
@@ -205,7 +205,6 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
 
     /* device properties */
     dev->properties.properties = NULL;
-    dev->properties.pendingProperties = FALSE;
     dev->properties.handlers = NULL;
 
     /*  security creation/labeling check
@@ -224,7 +223,7 @@ AddInputDevice(ClientPtr client, DeviceProc deviceProc, Bool autoStart)
 
     XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_ENABLED),
                            XA_INTEGER, 8, PropModeReplace, 1, &dev->enabled,
-                           FALSE, FALSE, FALSE);
+                           FALSE);
     XIRegisterPropertyHandler(dev, DeviceSetProperty, NULL);
 
     return dev;
@@ -314,7 +313,7 @@ EnableDevice(DeviceIntPtr dev)
 
     XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_ENABLED),
                            XA_INTEGER, 8, PropModeReplace, 1, &dev->enabled,
-                           TRUE, FALSE, FALSE);
+                           TRUE);
 
     ev.type = DevicePresenceNotify;
     ev.time = currentTime.milliseconds;
@@ -390,7 +389,7 @@ DisableDevice(DeviceIntPtr dev)
 
     XIChangeDeviceProperty(dev, XIGetKnownProperty(XI_PROP_ENABLED),
                            XA_INTEGER, 8, PropModeReplace, 1, &dev->enabled,
-                           TRUE, FALSE, FALSE);
+                           TRUE);
 
     ev.type = DevicePresenceNotify;
     ev.time = currentTime.milliseconds;
diff --git a/include/exevents.h b/include/exevents.h
index b42a904..e137fef 100644
--- a/include/exevents.h
+++ b/include/exevents.h
@@ -213,31 +213,14 @@ extern int XIChangeDeviceProperty(
         int                     /* mode*/,
         unsigned long           /* len*/,
         pointer                 /* value*/,
-        Bool                    /* sendevent*/,
-        Bool                    /* pending*/,
-        Bool                    /* fromClient */
+        Bool                    /* sendevent*/
         );
 
-extern XIPropertyPtr XIQueryDeviceProperty(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */
-);
-
 extern XIPropertyValuePtr XIGetDeviceProperty(
         DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        Bool                    /* pending */
+        Atom                    /* property */
 );
 
-extern int XIConfigureDeviceProperty(
-        DeviceIntPtr            /* dev */,
-        Atom                    /* property */,
-        Bool                    /* pending */,
-        Bool                    /* range */,
-        Bool                    /* immutable */,
-        int                     /* num_values */,
-        INT32*                  /* values */
-);
 
 extern long XIRegisterPropertyHandler(
         DeviceIntPtr         dev,
diff --git a/include/inputstr.h b/include/inputstr.h
index 6bba47c..64b6985 100644
--- a/include/inputstr.h
+++ b/include/inputstr.h
@@ -353,18 +353,9 @@ typedef struct _XIProperty
 {
     struct _XIProperty   *next;
     Atom                  propertyName;
-    Bool                  is_pending;
-    Bool                  range;
-    Bool                  immutable;
-    Bool                  fromClient;       /* created by client or driver/server */
-    int                   num_valid;
-    INT32                 *valid_values;
-    XIPropertyValueRec    current,
-                          pending;
+    XIPropertyValueRec    value;
 } XIPropertyRec;
 
-
-
 typedef XIPropertyRec      *XIPropertyPtr;
 typedef XIPropertyValueRec *XIPropertyValuePtr;
 
@@ -484,7 +475,6 @@ typedef struct _DeviceIntRec {
     /* Input device property handling. */
     struct {
         XIPropertyPtr   properties;
-        Bool            pendingProperties;
         XIPropertyHandlerPtr handlers; /* NULL-terminated */
     } properties;
 } DeviceIntRec;
-- 
1.5.4.3




More information about the xorg mailing list