[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