[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

libxi: Changes to 'upstream-unstable'



 configure.ac                  |    4 
 man/Makefile.am               |   14 ++-
 man/XGetDeviceProperty.man    |  191 ++++++++++++++++++++++++++++++++++++++++++
 man/XListDeviceProperties.man |   95 ++++++++++++++++++++
 man/XListInputDevices.man     |    1 
 src/Makefile.am               |    4 
 src/XChDProp.c                |  106 +++++++++++++++++++++++
 src/XDelDProp.c               |   64 ++++++++++++++
 src/XExtInt.c                 |   19 +++-
 src/XGetDProp.c               |  139 ++++++++++++++++++++++++++++++
 src/XListDProp.c              |   84 ++++++++++++++++++
 11 files changed, 716 insertions(+), 5 deletions(-)

New commits:
commit 2d586065649304b2864afddee6f6225a4a61a0c9
Author: Peter Hutterer <peter.hutterer@redhat.com>
Date:   Wed Dec 3 12:50:45 2008 +1000

    libXi 1.2.0
    
    Requires inputproto 1.5.0 or later.

diff --git a/configure.ac b/configure.ac
index b02c5e8..aded614 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to create configure.
 
 AC_PREREQ([2.57])
 
-AC_INIT(libXi, 1.1.99.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libXi)
+AC_INIT(libXi, 1.2.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libXi)
 AM_INIT_AUTOMAKE([dist-bzip2])
 AM_MAINTAINER_MODE
 
@@ -15,7 +15,7 @@ AC_PROG_CC
 AC_PROG_LIBTOOL
 
 # Checks for pkg-config packages
-PKG_CHECK_MODULES(XI, xproto x11 xextproto xext inputproto >= 1.4)
+PKG_CHECK_MODULES(XI, xproto x11 xextproto xext inputproto >= 1.5)
 AC_SUBST(XI_CFLAGS)
 AC_SUBST(XI_LIBS)
 

commit 305d356e43462834a2fdd2cf59d47b055c2416fd
Author: Peter Hutterer <peter.hutterer@redhat.com>
Date:   Mon Nov 17 11:50:06 2008 +1000

    Add support for XI 1.5 device properties.
    
    This is a manual merge from master onto libXi 1.1.4. The branches have
    diverged too much to make cherry-picking reasonable and readable.
    
    This patch includes the property support provided by the combination of the
    following patches:
    - 7d5bb99ffce3200f82420c5a5ebac3b445aac633
    - 0211e3e8277c590349903989f1676f6af4baa44b
    - bfd2e08f3530091fbcd8c078f684e9aab9057df0
    - bec02767629ed795582ba3f645299d7036093511
    - f9a5371d43b2c6023745f766d0e8ceff2acdff60
    - e179b124aac13387c6f730197b8852c1f69eb9e3
    
    Man pages are copied from the parsed docbook output from master.

diff --git a/man/Makefile.am b/man/Makefile.am
index 9efc88c..c8c7624 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -51,7 +51,9 @@ libman_PRE = \
 	XSetDeviceButtonMapping.man \
 	XSetDeviceFocus.man \
 	XSetDeviceMode.man \
-	XSetDeviceValuators.man
+	XSetDeviceValuators.man \
+	XListDeviceProperties.man \
+	XGetDeviceProperty.man
 
 BUILT_SOURCES = shadows.DONE
 
@@ -89,7 +91,8 @@ all_shadows =                                \
     $(XOpenDevice_shadows)                   \
     $(XSetDeviceButtonMapping_shadows)       \
     $(XSetDeviceFocus_shadows)               \
-    $(XSelectExtensionEvent_shadows)
+    $(XSelectExtensionEvent_shadows)         \
+    $(XGetDeviceProperty_shadows)
 
 
 XGetDeviceControl_shadows =                 \
@@ -134,6 +137,10 @@ XSetDeviceFocus_shadows =                   \
 XSelectExtensionEvent_shadows =             \
     XGetSelectedExtensionEvents
 
+XGetDeviceProperty_shadows =                \
+    XDeleteDeviceProperty \
+    XChangeDeviceProperty
+
 shadows.DONE:
 	-rm -f $(all_shadows:=.@LIB_MAN_SUFFIX@)
 	(for i in $(XGetDeviceControl_shadows:=.@LIB_MAN_SUFFIX@) ; do \
@@ -178,3 +185,6 @@ shadows.DONE:
 	(for i in $(XSelectExtensionEvent_shadows:=.@LIB_MAN_SUFFIX@) ; do \
 	 echo .so man$(LIB_MAN_DIR_SUFFIX)/XSelectExtensionEvent.$(LIB_MAN_SUFFIX) > $$i; \
 	 done)
+	(for i in $(XGetDeviceProperty_shadows:=.@LIB_MAN_SUFFIX@) ; do \
+	 echo .so man$(LIB_MAN_DIR_SUFFIX)/XGetDeviceProperty.$(LIB_MAN_SUFFIX) > $$i; \
+	 done)
diff --git a/man/XGetDeviceProperty.man b/man/XGetDeviceProperty.man
new file mode 100644
index 0000000..6944457
--- /dev/null
+++ b/man/XGetDeviceProperty.man
@@ -0,0 +1,191 @@
+.\"     Title: XGetDeviceProperty
+.\"    Author: Peter Hutterer
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: <pubdate>July 9, 2008</pubdate>
+.\"    Manual: XINPUT FUNCTIONS
+.\"    Source: __xorgversion__
+.\"
+.TH "XGETDEVICEPROPERTY" "__libmansuffix__" "<pubdate>July 9, 2008</pubdate>" "__xorgversion__" "XINPUT FUNCTIONS"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+XGetDeviceProperty, XChangeDeviceProperty, XDeleteDeviceProperty - Get, change or delete a device's property.
+.SH "SYNTAX"
+.sp
+.ft B
+.nf
+#include <X11/extensions/XInput\.h>
+.fi
+.ft
+.HP 23
+.BI "int XGetDeviceProperty(Display\ *" "display" ", XDevice\ *" "device" ", Atom\ " "property" ", long\ " "offset" ", long\ " "length" ", Bool\ " "delete" ", Bool\ " "pending" ", Atom\ " "req_type" ", Atom\ *" "actual_type_return" ", int\ *" "actual_format_return" ", unsigned\ long\ *" "nitems_return" ", unsigned\ long\ *" "bytes_after_return" ", unsigned\ char\ **" "prop_return" ");"
+.HP 27
+.BI "void XChangeDeviceProperty(Display\ *" "display" ", XDevice\ *" "device" ", Atom\ " "property" ", Atom\ " "type" ", int\ " "format" ", int\ " "mode" ", const\ char\ *" "data" ", int\ " "nelements" ");"
+.HP 27
+.BI "void XDeleteDeviceProperty(Display\ *" "display" ", XDevice\ *" "device" ", Atom\ " "property" ");"
+.SH "ARGUMENTS"
+.PP
+.PP
+\fIactual_type_return\fR
+.RS 4
+Returns an atom identifier that defines the actual type of the property\.
+.RE
+.PP
+\fIactual_format_return\fR
+.RS 4
+Returns the actual format of the property\.
+.RE
+.PP
+\fIbytes_after_return\fR
+.RS 4
+Returns the number of bytes remaining to be read in the property if a partial read was performed\.
+.RE
+.PP
+\fIdata\fR
+.RS 4
+Specifies the property data\.
+.RE
+.PP
+\fIdelete\fR
+.RS 4
+Specifies a Boolean value that determines wether the property is deleted\.
+.RE
+.PP
+\fIdisplay\fR
+.RS 4
+Specifies the connection to the X server\.
+.RE
+.PP
+\fIdevice\fR
+.RS 4
+The device to grab\.
+.RE
+.PP
+\fIformat\fR
+.RS 4
+Specifies whether the data should be viewed as a list of 8\-bit, 16\-bit, or 32\-bit quantities\. Possible values are 8, 16, and 32\. This information allows the X server to correctly perform byte\-swap operations as necessary\. If the format is 16\-bit or 32\-bit, you must explicitly cast the data pointer to an (unsigned char*) in the call to
+\fBXChangeDeviceProperty\fR\.
+.RE
+.PP
+\fIlength\fR
+.RS 4
+Specifies the length in 32\-bit multiplies of the data to be retrieved\.
+.RE
+.PP
+\fImode\fR
+.RS 4
+Specifies the mode of operation\. You can pass
+\fBPropModeReplace\fR,
+\fBPropModePrepend\fR, or
+\fBPropModeAppend\fR\.
+.RE
+.PP
+\fInelements\fR
+.RS 4
+Specifies the number of elements in data\.
+.RE
+.PP
+\fInitems_return\fR
+.RS 4
+Returns the actual number of 8\-bit, 16\-bit, or 32\-bit items stored in the prop_return array\.
+.RE
+.PP
+\fInum_values\fR
+.RS 4
+Specifies the number of elements in the values list\.
+.RE
+.PP
+\fIoffset\fR
+.RS 4
+Specifies the offset in the specified property (in 32\-bit quantities) where the data is to be retrieved\.
+.RE
+.PP
+\fIpending\fR
+.RS 4
+Specifies whether to retrieve the pending state of the property or the current state\.
+.RE
+.PP
+\fIproperty\fR
+.RS 4
+Specifies the property to modify or query\.
+.RE
+.PP
+\fIprop_return\fR
+.RS 4
+Returns the data in the specified format\. If the returned format is 8, the returned data is represented as a char array\. If the returned format is 16, the returned data is represented as an array of short int type and should be cast to that type to obtain the elements\. If the returned format is 32, the property data will be stored as an array of longs (which in a 64\-bit application will be 64\-bit values that are padded in the upper 4 bytes)\.
+.RE
+.PP
+\fIreq_type\fR
+.RS 4
+Specifies the atom identifier associated with the property type or
+\fBAnyPropertyType\fR\.
+.RE
+.SH "DESCRIPTION"
+.PP
+The
+\fBXGetDeviceProperty\fR
+function returns the actual type of the property; the actual format of the property; the number of 8\-bit, 16\-bit, or 32\-bit items transferred; the number of bytes remaining to be read in the property; and a pointer to the data actually returned\. For a detailed description of this function, see the man page to
+\fBXGetWindowProperty\fR\.
+.PP
+The
+\fBXChangeDeviceProperty\fR
+function alters the property for the specified device and causes the server to generate a
+\fBXPropertyNotifyEvent\fR
+event on that device\. For a detailed description of this function, see the man page to
+\fBXChangeProperty\fR\.
+.PP
+The
+\fBXDeleteDeviceProperty\fR
+function deletes the specified device property\. Note that a client cannot delete a property created by a driver or the server\. Attempting to do so will result in a
+BadAtom
+error\.
+.PP
+
+\fBXGetDeviceProperty\fR
+can generate a
+BadAtom,
+BadDevice
+error\.
+.PP
+
+\fBXChangeDeviceProperty\fR
+can generate a
+BadDevice, a
+BadMatch, a
+BadAtom, and a
+BadValue
+error\.
+.PP
+
+\fBXDeleteDeviceProperty\fR
+can generate a
+BadDevice, and a
+BadAtom
+error\.
+.SH "DIAGNOSIS"
+.PP
+.PP
+BadAtom
+.RS 4
+A value does not describe a valid named identifier or the client attempted to remove a driver\-allocated property\.
+.RE
+.PP
+BadDevice
+.RS 4
+An invalid device was specified\. The device does not exist\.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBXListDeviceProperties\fR,
+\fBXQueryDeviceProperty\fR,
+\fBXConfigureDeviceProperty\fR\.
+.SH "AUTHOR"
+.PP
+\fBPeter Hutterer\fR
+.sp -1n
+.IP "" 4
+Specification and implementation\.
+
diff --git a/man/XListDeviceProperties.man b/man/XListDeviceProperties.man
new file mode 100644
index 0000000..4f986fc
--- /dev/null
+++ b/man/XListDeviceProperties.man
@@ -0,0 +1,95 @@
+.\"     Title: XListDeviceProperties
+.\"    Author: Peter Hutterer
+.\" Generator: DocBook XSL Stylesheets v1.73.2 <http://docbook.sf.net/>
+.\"      Date: <pubdate>July 9, 2008</pubdate>
+.\"    Manual: XINPUT FUNCTIONS
+.\"    Source: __xorgversion__
+.\"
+.TH "XLISTDEVICEPROPERTIE" "__libmansuffix__" "<pubdate>July 9, 2008</pubdate>" "__xorgversion__" "XINPUT FUNCTIONS"
+.\" disable hyphenation
+.nh
+.\" disable justification (adjust text to left margin only)
+.ad l
+.SH "NAME"
+XListDeviceProperties - List a device's properties.
+.SH "SYNTAX"
+.sp
+.ft B
+.nf
+#include <X11/extensions/XInput\.h>
+.fi
+.ft
+.HP 28
+.BI "Atom* XListDeviceProperties(Display\ *" "display" ", XDevice\ *" "device" ", int\ *" "nprops_return" ");"
+.SH "ARGUMENTS"
+.PP
+.PP
+\fIdisplay\fR
+.RS 4
+Specifies the connection to the X server\.
+.RE
+.PP
+\fIdevice\fR
+.RS 4
+The device to grab\.
+.RE
+.PP
+\fInprops_return\fR
+.RS 4
+Specifies the number of Atoms returned\.
+.RE
+.PP
+\fInum_values\fR
+.RS 4
+Specifies the number of elements in the values list\.
+.RE
+.PP
+\fIproperty\fR
+.RS 4
+Specifies the property to modify or query\.
+.RE
+.SH "DESCRIPTION"
+.PP
+The
+\fBXListDeviceProperties\fR
+function returns a list of the properties associated with the input device specified in
+\fIdevice\fR\. Each device may have an arbitrary number of properties attached, some of which were created by the driver and/or server, others created by clients at runtime\.
+.PP
+The client is expected to free the list of properties using
+\fBXFree\fR\.
+.PP
+
+\fBXListDeviceProperties\fR
+can generate a
+BadDevice
+error\.
+.SH "DIAGNOSIS"
+.PP
+.PP
+BadAtom
+.RS 4
+A value does not describe a valid named identifier\.
+.RE
+.PP
+BadWindow
+.RS 4
+A value for a Window argument does not name a defined window\.
+.RE
+.PP
+BadDevice
+.RS 4
+An invalid device was specified\. The device does not exist\.
+.RE
+.SH "SEE ALSO"
+.PP
+
+\fBXChangeDeviceProperty\fR,
+\fBXGetDeviceProperty\fR,
+\fBXDeleteDeviceProperty\fR\.
+.SH "AUTHOR"
+.PP
+\fBPeter Hutterer\fR
+.sp -1n
+.IP "" 4
+Specification and implementation\.
+
diff --git a/src/Makefile.am b/src/Makefile.am
index a02428c..1e7de91 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -6,15 +6,18 @@ libXi_la_SOURCES = \
 		  XAllowDv.c \
 		  XChgDCtl.c \
 		  XChgFCtl.c \
+		  XChDProp.c \
 		  XChgKbd.c \
 		  XChgKMap.c \
 		  XChgPnt.c \
 		  XChgProp.c \
 		  XCloseDev.c \
+		  XDelDProp.c \
 		  XDevBell.c \
 		  XExtToWire.c \
 		  XGetBMap.c \
 		  XGetDCtl.c \
+		  XGetDProp.c \
 		  XGetFCtl.c \
 		  XGetKMap.c \
 		  XGetMMap.c \
@@ -27,6 +30,7 @@ libXi_la_SOURCES = \
 		  XGtFocus.c \
 		  XGtSelect.c \
 		  XListDev.c \
+		  XListDProp.c \
 		  XOpenDev.c \
 		  XQueryDv.c \
 		  XSelect.c \
diff --git a/src/XChDProp.c b/src/XChDProp.c
new file mode 100644
index 0000000..c863cdb
--- /dev/null
+++ b/src/XChDProp.c
@@ -0,0 +1,106 @@
+/************************************************************
+
+Copyright 2008 Peter Hutterer
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the author shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the author.
+
+*/
+
+/***********************************************************************
+ * XChangeDeviceProperties - change an input device's properties.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <X11/Xlibint.h>
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include <X11/extensions/XInput.h>
+#include <X11/extensions/extutil.h>
+#include "XIint.h"
+
+void
+XChangeDeviceProperty(Display* dpy, XDevice* dev,
+                      Atom property, Atom type,
+                      int format, int mode,
+                      _Xconst unsigned char *data, int nelements)
+{
+    xChangeDevicePropertyReq   *req;
+    int                         len;
+
+    XExtDisplayInfo *info = XInput_find_display(dpy);
+
+    LockDisplay(dpy);
+    if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1)
+	return;
+
+    GetReq(ChangeDeviceProperty, req);
+    req->reqType    = info->codes->major_opcode;
+    req->ReqType    = X_ChangeDeviceProperty;
+    req->deviceid   = dev->device_id;
+    req->property   = property;
+    req->type       = type;
+    req->mode       = mode;
+    if (nelements < 0) {
+	req->nUnits = 0;
+	req->format = 0; /* ask for garbage, get garbage */
+    } else {
+	req->nUnits = nelements;
+	req->format = format;
+    }
+
+    switch (req->format) {
+    case 8:
+	len = ((long)nelements + 3) >> 2;
+	if (dpy->bigreq_size || req->length + len <= (unsigned) 65535) {
+	    SetReqLen(req, len, len);
+	    Data (dpy, (char *)data, nelements);
+	} /* else force BadLength */
+	break;
+
+    case 16:
+	len = ((long)nelements + 1) >> 1;
+	if (dpy->bigreq_size || req->length + len <= (unsigned) 65535) {
+	    SetReqLen(req, len, len);
+	    len = (long)nelements << 1;
+	    Data16 (dpy, (short *) data, len);
+	} /* else force BadLength */
+	break;
+
+    case 32:
+	len = nelements;
+	if (dpy->bigreq_size || req->length + len <= (unsigned) 65535) {
+	    SetReqLen(req, len, len);
+	    len = (long)nelements << 2;
+	    Data32 (dpy, (long *) data, len);
+	} /* else force BadLength */
+	break;
+
+    default:
+	/* BadValue will be generated */ ;
+    }
+
+    UnlockDisplay(dpy);
+    SyncHandle();
+}
+
diff --git a/src/XDelDProp.c b/src/XDelDProp.c
new file mode 100644
index 0000000..d6594c4
--- /dev/null
+++ b/src/XDelDProp.c
@@ -0,0 +1,64 @@
+/************************************************************
+
+Copyright 2008 Peter Hutterer
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the author shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the author.
+
+*/
+
+/***********************************************************************
+ * XDeleteDeviceProperties - delete an input device's properties.
+ *
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <X11/Xlibint.h>
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include <X11/extensions/XInput.h>
+#include <X11/extensions/extutil.h>
+#include "XIint.h"
+
+void
+XDeleteDeviceProperty(Display* dpy, XDevice* dev, Atom property)
+{
+    xDeleteDevicePropertyReq   *req;
+
+    XExtDisplayInfo *info = XInput_find_display(dpy);
+
+    LockDisplay(dpy);
+    if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1)
+	return;
+
+    GetReq(DeleteDeviceProperty, req);
+    req->reqType    = info->codes->major_opcode;
+    req->ReqType    = X_DeleteDeviceProperty;
+    req->deviceid   = dev->device_id;
+    req->property   = property;
+
+    UnlockDisplay(dpy);
+    SyncHandle();
+    return;
+}
+
diff --git a/src/XExtInt.c b/src/XExtInt.c
index 10f728d..d448406 100644
--- a/src/XExtInt.c
+++ b/src/XExtInt.c
@@ -121,7 +121,9 @@ XEXT_GENERATE_FIND_DISPLAY(XInput_find_display, xinput_info,
     {XI_Present, XI_Add_XChangeDeviceControl_Major,
      XI_Add_XChangeDeviceControl_Minor},
     {XI_Present, XI_Add_DevicePresenceNotify_Major,
-     XI_Add_DevicePresenceNotify_Minor}
+     XI_Add_DevicePresenceNotify_Minor},
+    {XI_Present, XI_Add_DeviceProperties_Major,
+        XI_Add_DeviceProperties_Minor},
     };
 
 /***********************************************************************
@@ -697,6 +699,21 @@ XInputWireToEvent(dpy, re, event)
     }
 	break;
 
+    case XI_DevicePropertyNotify:
+
+        {
+            XDevicePropertyNotifyEvent* ev = (XDevicePropertyNotifyEvent*)re;
+            devicePropertyNotify *ev2 = (devicePropertyNotify*)event;
+
+            *ev = *(XDevicePropertyNotifyEvent*)save;
+            ev->time = ev2->time;
+            ev->deviceid = ev2->deviceid;
+            ev->atom = ev2->atom;
+            ev->state = ev2->state;
+            return ENQUEUE_EVENT;
+        }
+        break;
+
     default:
 	printf("XInputWireToEvent: UNKNOWN WIRE EVENT! type=%d\n", type);
 	break;
diff --git a/src/XGetDProp.c b/src/XGetDProp.c
new file mode 100644
index 0000000..5d44f91
--- /dev/null
+++ b/src/XGetDProp.c
@@ -0,0 +1,139 @@
+/************************************************************
+
+Copyright 2008 Peter Hutterer
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the author shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the author.
+
+*/
+
+/***********************************************************************
+ * XGetDeviceProperties - get an input device's properties.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <X11/Xlibint.h>
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include <X11/extensions/XInput.h>
+#include <X11/extensions/extutil.h>
+#include "XIint.h"
+
+int
+XGetDeviceProperty(Display* dpy, XDevice* dev,
+			 Atom property, long offset, long length, Bool delete,
+                         Atom req_type, Atom *actual_type, int *actual_format,
+                         unsigned long *nitems, unsigned long *bytes_after,
+                         unsigned char **prop)
+{
+    xGetDevicePropertyReq   *req;
+    xGetDevicePropertyReply rep;
+    long                    nbytes, rbytes;
+
+    XExtDisplayInfo *info = XInput_find_display(dpy);
+
+    LockDisplay(dpy);
+    if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1)
+	return 1;
+
+    GetReq(GetDeviceProperty, req);
+    req->reqType    = info->codes->major_opcode;
+    req->ReqType    = X_GetDeviceProperty;
+    req->deviceid   = dev->device_id;
+    req->property   = property;
+    req->type       = req_type;
+    req->longOffset = offset;
+    req->longLength = length;
+    req->delete     = delete;
+
+    if (!_XReply (dpy, (xReply *) &rep, 0, xFalse))
+    {
+	UnlockDisplay (dpy);
+	SyncHandle ();
+	return 1;
+    }
+
+    *prop = (unsigned char *) NULL;
+
+    if (rep.propertyType != None) {
+	/*
+	 * One extra byte is malloced than is needed to contain the property
+	 * data, but this last byte is null terminated and convenient for
+	 * returning string properties, so the client doesn't then have to
+	 * recopy the string to make it null terminated.
+	 */
+	switch (rep.format) {
+	case 8:
+	    nbytes = rep.nItems;
+	    rbytes = rep.nItems + 1;
+	    if (rbytes > 0 &&
+		(*prop = (unsigned char *) Xmalloc ((unsigned)rbytes)))
+		_XReadPad (dpy, (char *) *prop, nbytes);
+	    break;
+
+	case 16:
+	    nbytes = rep.nItems << 1;
+	    rbytes = rep.nItems * sizeof (short) + 1;
+	    if (rbytes > 0 &&
+		(*prop = (unsigned char *) Xmalloc ((unsigned)rbytes)))
+		_XRead16Pad (dpy, (short *) *prop, nbytes);
+	    break;
+
+	case 32:
+	    nbytes = rep.nItems << 2;
+	    rbytes = rep.nItems * sizeof (long) + 1;
+	    if (rbytes > 0 &&
+		(*prop = (unsigned char *) Xmalloc ((unsigned)rbytes)))
+		_XRead32 (dpy, (long *) *prop, nbytes);
+	    break;
+
+	default:
+	    /*
+	     * This part of the code should never be reached.  If it is,
+	     * the server sent back a property with an invalid format.
+	     */
+	    nbytes = rep.length << 2;
+	    _XEatData(dpy, (unsigned long) nbytes);
+	    UnlockDisplay(dpy);
+	    SyncHandle();
+	    return(BadImplementation);
+	}
+	if (! *prop) {
+	    _XEatData(dpy, (unsigned long) nbytes);
+	    UnlockDisplay(dpy);
+	    SyncHandle();
+	    return(BadAlloc);
+	}
+	(*prop)[rbytes - 1] = '\0';
+    }
+
+    *actual_type = rep.propertyType;
+    *actual_format = rep.format;
+    *nitems = rep.nItems;
+    *bytes_after = rep.bytesAfter;
+    UnlockDisplay (dpy);
+    SyncHandle ();
+
+    return Success;
+}
+
diff --git a/src/XListDProp.c b/src/XListDProp.c
new file mode 100644
index 0000000..aee2737
--- /dev/null
+++ b/src/XListDProp.c
@@ -0,0 +1,84 @@
+/************************************************************
+
+Copyright 2008 Peter Hutterer
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the author shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the author.
+
+*/
+
+/***********************************************************************
+ * XListDeviceProperties - List an input device's properties.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <X11/Xlibint.h>
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include <X11/extensions/XInput.h>
+#include <X11/extensions/extutil.h>
+#include "XIint.h"
+
+Atom*
+XListDeviceProperties(Display* dpy, XDevice* dev, int *nprops_return)
+{
+    xListDevicePropertiesReq    *req;
+    xListDevicePropertiesReply  rep;
+    XExtDisplayInfo             *info = XInput_find_display(dpy);
+    Atom                        *props = NULL;
+
+    LockDisplay(dpy);
+    if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1)
+	return (NoSuchExtension);
+
+    GetReq(ListDeviceProperties, req);
+    req->reqType = info->codes->major_opcode;
+    req->ReqType = X_ListDeviceProperties;
+    req->deviceid = dev->device_id;
+
+    if (!_XReply(dpy, (xReply*)&rep, 0, xFalse)) {
+        *nprops_return = 0;
+        goto cleanup;
+    }
+
+    *nprops_return = rep.nAtoms;
+
+    if (rep.nAtoms) {
+        props = (Atom*)Xmalloc(rep.nAtoms * sizeof(Atom));
+        if (!props)
+        {
+            _XEatData(dpy, rep.nAtoms << 2);
+            *nprops_return = 0;
+            goto cleanup;
+        }
+
+        _XRead32(dpy, props, rep.nAtoms << 2);
+    }
+
+cleanup:
+    UnlockDisplay(dpy);
+    SyncHandle();
+    return props;
+}
+

commit 45b73dc157f326785e1022f5476bfc1f9f514d6e
Author: Peter Hutterer <peter.hutterer@redhat.com>
Date:   Mon Nov 17 11:44:31 2008 +1000

    Add XI_JOYSTICK to list of defined types.
    (cherry picked from commit e5c529813b04327babc20e51ca56006210cb0c37)
    
    Conflicts:
    
    	man/XI.xml

diff --git a/man/XListInputDevices.man b/man/XListInputDevices.man
index 2483ea4..7f8a0f9 100644
--- a/man/XListInputDevices.man
+++ b/man/XListInputDevices.man
@@ -97,6 +97,7 @@ XI_DATAGLOVE
 XI_EYETRACKER
 XI_CURSORKEYS
 XI_FOOTMOUSE
+XI_JOYSTICK
 .DE
 .LP
 These names may be directly compared with the name field of the

commit 88e2bf75cc619bb1ddc51e5dc65ddb9d712f69f5
Author: Peter Hutterer <peter.hutterer@redhat.com>
Date:   Mon Nov 17 11:35:59 2008 +1000

    Bump to 1.1.99.2.
    
    1.1.99.1 was used by master for a while.

diff --git a/configure.ac b/configure.ac
index 02972ed..b02c5e8 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@ dnl Process this file with autoconf to create configure.
 
 AC_PREREQ([2.57])
 
-AC_INIT(libXi, 1.1.4, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libXi)
+AC_INIT(libXi, 1.1.99.2, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libXi)
 AM_INIT_AUTOMAKE([dist-bzip2])
 AM_MAINTAINER_MODE
 


Reply to: