From 6b868c81bb965db4fb2a9117dd8e3bc75f87b5d5 Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Feb 27 2009 00:42:40 +0000 Subject: * Fri Feb 27 2009 Peter Hutterer 1.6.0-2 - 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. --- diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 85040d7..7ff27df 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -19,7 +19,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.6.0 -Release: 1%{?dist} +Release: 2%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -91,6 +91,10 @@ Patch6015: xserver-1.5.99.902-vnc.patch # Make autoconfiguration chose nouveau driver for NVIDIA GPUs Patch6017: xserver-1.5.99.902-nouveau.patch +# from master, may end up in 1.6.1. +Patch6018: xserver-1.6.0-XIPropToInt.patch +Patch6019: xserver-1.6.0-XATOM_FLOAT.patch + %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri %define sdkdir %{_includedir}/xorg @@ -507,6 +511,11 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Fri Feb 27 2009 Peter Hutterer 1.6.0-2 +- 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. + * Wed Feb 25 2009 Adam Jackson 1.6.0-1 - xserver 1.6.0 diff --git a/xserver-1.6.0-XATOM_FLOAT.patch b/xserver-1.6.0-XATOM_FLOAT.patch new file mode 100644 index 0000000..996f195 --- /dev/null +++ b/xserver-1.6.0-XATOM_FLOAT.patch @@ -0,0 +1,123 @@ +From a48c81dcdf569a3f634ac23e08d2491354de6a36 Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +Date: Fri, 5 Dec 2008 16:24:57 +1000 +Subject: [PATCH] Xi: add XATOM_FLOAT to server-defined properties. + +This property is used to denote type float for input properties. Such +properties can be accessed easily through the XIPropToFloat() function. + +Code originally written by Simon Thum. + +Signed-off-by: Peter Hutterer +--- + Xi/xiproperty.c | 55 +++++++++++++++++++++++++++++++++++++++++- + include/exevents.h | 6 ++++ + include/xserver-properties.h | 4 +++ + 3 files changed, 64 insertions(+), 1 deletions(-) + +diff --git a/Xi/xiproperty.c b/Xi/xiproperty.c +index cd9805a..6da8424 100644 +--- a/Xi/xiproperty.c ++++ b/Xi/xiproperty.c +@@ -49,7 +49,8 @@ static struct dev_properties + Atom type; + char *name; + } dev_properties[] = { +- {0, XI_PROP_ENABLED} ++ {0, XI_PROP_ENABLED}, ++ {0, XATOM_FLOAT} + }; + + static long XIPropHandlerID = 1; +@@ -137,6 +138,58 @@ XIPropToInt(XIPropertyValuePtr val, int *nelem_return, int **buf_return) + return Success; + } + ++/** ++ * Convert the given property's value(s) into @nelem_return float 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 errors returned: ++ * Success ++ * BadMatch ... Wrong atom type, atom is not XA_FLOAT ++ * BadValue ... Wrong format, format is not 32 ++ * 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 ++XIPropToFloat(XIPropertyValuePtr val, int *nelem_return, float **buf_return) ++{ ++ int i; ++ float *buf; ++ ++ if (!val->type || val->type != XIGetKnownProperty(XATOM_FLOAT)) ++ return BadMatch; ++ ++ if (val->format != 32) ++ return BadValue; ++ if (!*buf_return && *nelem_return) ++ return BadLength; ++ ++ buf = *buf_return; ++ ++ if (!buf && !(*nelem_return)) ++ { ++ buf = xcalloc(val->size, sizeof(float)); ++ 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++) ++ buf[i] = ((float*)val->data)[i]; ++ ++ return Success; ++} + + /** + * Init those properties that are allocated by the server and most likely used +diff --git a/include/exevents.h b/include/exevents.h +index 485347b..2504baf 100644 +--- a/include/exevents.h ++++ b/include/exevents.h +@@ -257,4 +257,10 @@ extern _X_EXPORT int XIPropToInt( + int **buf_return + ); + ++extern _X_EXPORT int XIPropToFloat( ++ XIPropertyValuePtr val, ++ int *nelem_return, ++ float **buf_return ++); ++ + #endif /* EXEVENTS_H */ +diff --git a/include/xserver-properties.h b/include/xserver-properties.h +index 4d602b5..f8aeab6 100644 +--- a/include/xserver-properties.h ++++ b/include/xserver-properties.h +@@ -26,6 +26,10 @@ + #ifndef _XSERVER_PROPERTIES_H_ + #define _XSERVER_PROPERTIES_H_ + ++/* Type for a 4 byte float. Storage format IEEE 754 in client's default ++ * byte-ordering. */ ++#define XATOM_FLOAT "FLOAT" ++ + /* BOOL. 0 - device disabled, 1 - device enabled */ + #define XI_PROP_ENABLED "Device Enabled" + +-- +1.6.0.6 + diff --git a/xserver-1.6.0-XIPropToInt.patch b/xserver-1.6.0-XIPropToInt.patch new file mode 100644 index 0000000..c2c7672 --- /dev/null +++ b/xserver-1.6.0-XIPropToInt.patch @@ -0,0 +1,120 @@ +From 669f6810af9a89187d6149841925fe765f3988ff Mon Sep 17 00:00:00 2001 +From: Peter Hutterer +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 +--- + 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 ++#include + #include + #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 +