6b868c81bb
- xserver-1.6.0-XIPropToInt.patch: add XIPropToInt helper function (requirement for XATOM_FLOAT patch) - xserver-1.6.0-XATOM_FLOAT.patch: add support for float properties.
121 lines
3.3 KiB
Diff
121 lines
3.3 KiB
Diff
From 669f6810af9a89187d6149841925fe765f3988ff Mon Sep 17 00:00:00 2001
|
|
From: Peter Hutterer <peter.hutterer@redhat.com>
|
|
Date: Wed, 19 Nov 2008 15:50:57 +1000
|
|
Subject: [PATCH] Xi: add XIPropToInt() auxiliary function.
|
|
|
|
Converts an XIPropertyValuePtr to an integer, provided that type and format is
|
|
right.
|
|
|
|
Code originally written by Simon Thum.
|
|
|
|
Signed-off-by: Peter Hutterer <peter.hutterer@redhat.com>
|
|
---
|
|
Xi/xiproperty.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
include/exevents.h | 6 ++++
|
|
2 files changed, 74 insertions(+), 0 deletions(-)
|
|
|
|
diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c
|
|
index e79a2ed..cd9805a 100644
|
|
--- a/Xi/xiproperty.c
|
|
+++ b/Xi/xiproperty.c
|
|
@@ -32,6 +32,7 @@
|
|
#include "dix.h"
|
|
#include "inputstr.h"
|
|
#include <X11/extensions/XI.h>
|
|
+#include <X11/Xatom.h>
|
|
#include <X11/extensions/XIproto.h>
|
|
#include "exglobals.h"
|
|
#include "exevents.h"
|
|
@@ -71,6 +72,73 @@ XIGetKnownProperty(char *name)
|
|
}
|
|
|
|
/**
|
|
+ * Convert the given property's value(s) into @nelem_return integer values and
|
|
+ * store them in @buf_return. If @nelem_return is larger than the number of
|
|
+ * values in the property, @nelem_return is set to the number of values in the
|
|
+ * property.
|
|
+ *
|
|
+ * If *@buf_return is NULL and @nelem_return is 0, memory is allocated
|
|
+ * automatically and must be freed by the caller.
|
|
+ *
|
|
+ * Possible return codes.
|
|
+ * Success ... No error.
|
|
+ * BadMatch ... Wrong atom type, atom is not XA_INTEGER
|
|
+ * BadAlloc ... NULL passed as buffer and allocation failed.
|
|
+ * BadLength ... @buff is NULL but @nelem_return is non-zero.
|
|
+ *
|
|
+ * @param val The property value
|
|
+ * @param nelem_return The maximum number of elements to return.
|
|
+ * @param buf_return Pointer to an array of at least @nelem_return values.
|
|
+ * @return Success or the error code if an error occured.
|
|
+ */
|
|
+_X_EXPORT int
|
|
+XIPropToInt(XIPropertyValuePtr val, int *nelem_return, int **buf_return)
|
|
+{
|
|
+ int i;
|
|
+ int *buf;
|
|
+
|
|
+ if (val->type != XA_INTEGER)
|
|
+ return BadMatch;
|
|
+ if (!*buf_return && *nelem_return)
|
|
+ return BadLength;
|
|
+
|
|
+ switch(val->format)
|
|
+ {
|
|
+ case 8:
|
|
+ case 16:
|
|
+ case 32:
|
|
+ break;
|
|
+ default:
|
|
+ return BadValue;
|
|
+ }
|
|
+
|
|
+ buf = *buf_return;
|
|
+
|
|
+ if (!buf && !(*nelem_return))
|
|
+ {
|
|
+ buf = xcalloc(val->size, sizeof(int));
|
|
+ if (!buf)
|
|
+ return BadAlloc;
|
|
+ *buf_return = buf;
|
|
+ *nelem_return = val->size;
|
|
+ } else if (val->size < *nelem_return)
|
|
+ *nelem_return = val->size;
|
|
+
|
|
+ for (i = 0; i < val->size && i < *nelem_return; i++)
|
|
+ {
|
|
+ switch(val->format)
|
|
+ {
|
|
+ case 8: buf[i] = ((CARD8*)val->data)[i]; break;
|
|
+ case 16: buf[i] = ((CARD16*)val->data)[i]; break;
|
|
+ case 32: buf[i] = ((CARD32*)val->data)[i]; break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return Success;
|
|
+}
|
|
+
|
|
+
|
|
+/**
|
|
* Init those properties that are allocated by the server and most likely used
|
|
* by the DIX or the DDX.
|
|
*/
|
|
diff --git a/include/exevents.h b/include/exevents.h
|
|
index 2a7ec97..485347b 100644
|
|
--- a/include/exevents.h
|
|
+++ b/include/exevents.h
|
|
@@ -251,4 +251,10 @@ extern _X_EXPORT Atom XIGetKnownProperty(
|
|
|
|
extern DeviceIntPtr XIGetDevice(xEvent *ev);
|
|
|
|
+extern _X_EXPORT int XIPropToInt(
|
|
+ XIPropertyValuePtr val,
|
|
+ int *nelem_return,
|
|
+ int **buf_return
|
|
+);
|
|
+
|
|
#endif /* EXEVENTS_H */
|
|
--
|
|
1.6.0.6
|
|
|