From dc3c1643f5fc5e2c4b1b718c0396b21e594b6073 Mon Sep 17 00:00:00 2001 From: "Enrico Weigelt, metux IT consult" Date: Thu, 15 May 2025 18:50:56 +0200 Subject: [PATCH] 1 --- Xi/xiproperty.c | 25 +++++++++++++++---------- include/inputstr.h | 13 ++++--------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c index 3eea4a2591..498894dc62 100644 --- a/Xi/xiproperty.c +++ b/Xi/xiproperty.c @@ -557,10 +557,10 @@ XICreateDeviceProperty(Atom property) prop->next = NULL; prop->propertyName = property; - prop->value.type = None; - prop->value.format = 0; - prop->value.size = 0; - prop->value.data = NULL; + prop->type = None; + prop->format = 0; + prop->size = 0; + prop->data = NULL; prop->deletable = TRUE; return prop; @@ -580,7 +580,7 @@ XIFetchDeviceProperty(DeviceIntPtr dev, Atom property) static void XIDestroyDeviceProperty(XIPropertyPtr prop) { - free(prop->value.data); + free(prop->data); free(prop); } @@ -662,8 +662,7 @@ XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type, XIPropertyPtr prop; int size_in_bytes; unsigned long total_len; - XIPropertyValuePtr prop_value; - XIPropertyValueRec new_value; + XIPropertyPtr prop_value; Bool add = FALSE; int rc; @@ -678,7 +677,7 @@ XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type, add = TRUE; mode = PropModeReplace; } - prop_value = &prop->value; + prop_value = prop; /* To append or prepend to a property the request format and type must match those of the already defined property. The @@ -689,7 +688,8 @@ XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type, return BadMatch; if ((prop_value->type != type) && (mode != PropModeReplace)) return BadMatch; - new_value = *prop_value; + + XIPropertyRec new_value = *prop_value; if (mode == PropModeReplace) total_len = len; else @@ -758,6 +758,11 @@ XIChangeDeviceProperty(DeviceIntPtr dev, Atom property, Atom type, } while (!checkonly); } free(prop_value->data); + prop_value.type = new_value.type; + prop_value.format = new_value.format; + prop_value.data = new_value.data; + prop_value.size = new_value.size; + *prop_value = new_value; } else if (len == 0) { @@ -805,7 +810,7 @@ XIGetDeviceProperty(DeviceIntPtr dev, Atom property, XIPropertyValuePtr *value) } } - *value = &prop->value; + *value = prop; return Success; } diff --git a/include/inputstr.h b/include/inputstr.h index e62e4731e5..2b577b380a 100644 --- a/include/inputstr.h +++ b/include/inputstr.h @@ -457,17 +457,12 @@ typedef struct _XIPropertyValue { short format; /* format of data for swapping - 8,16,32 */ long size; /* size of data in (format/8) bytes */ void *data; /* private to client */ -} XIPropertyValueRec; -typedef struct _XIProperty { - struct _XIProperty *next; + // not supposed to be touched by drivers + struct _XIPropertyValue *next; Atom propertyName; - BOOL deletable; /* clients can delete this prop? */ - XIPropertyValueRec value; -} XIPropertyRec; - -typedef XIPropertyRec *XIPropertyPtr; -typedef XIPropertyValueRec *XIPropertyValuePtr; + Bool deletable; /* clients can delete this prop? */ +} XIPropertyRec, *XIPropertyPtr, *XIPropertyValuePtr; typedef struct _XIPropertyHandler { struct _XIPropertyHandler *next;