upload tizen2.0 source 2.0alpha master 2.0_alpha submit/master/20120920.151137
authorBoram Park <boram1288.park@samsung.com>
Tue, 21 Aug 2012 09:03:40 +0000 (18:03 +0900)
committerBoram Park <boram1288.park@samsung.com>
Tue, 21 Aug 2012 09:03:40 +0000 (18:03 +0900)
187 files changed:
COPYING [changed mode: 0755->0644]
ChangeLog [changed mode: 0755->0644]
INSTALL [new file with mode: 0644]
Makefile.am [changed mode: 0755->0644]
autogen.sh [deleted file]
configure.ac [changed mode: 0755->0644]
debian/README.source
debian/changelog [changed mode: 0755->0644]
debian/control [changed mode: 0755->0644]
debian/libxi-dev.install [changed mode: 0755->0644]
debian/patches/0001-Initialize-extension-with-the-right-number-of-events.patch
debian/rules [changed mode: 0755->0644]
doc/Makefile.am [deleted file]
doc/porting.xml [deleted file]
docbook.am [new file with mode: 0644]
include/X11/extensions/XInput2.h
man/Makefile.am [changed mode: 0755->0644]
man/XAllowDeviceEvents.man [changed mode: 0755->0644]
man/XAllowDeviceEvents.txt [changed mode: 0755->0644]
man/XChangeDeviceControl.man
man/XChangeDeviceDontPropagateList.man [changed mode: 0755->0644]
man/XChangeDeviceDontPropagateList.txt [changed mode: 0755->0644]
man/XChangeDeviceKeyMapping.man [changed mode: 0755->0644]
man/XChangeDeviceProperty.man [changed mode: 0755->0644]
man/XChangeFeedbackControl.man [changed mode: 0755->0644]
man/XChangeKeyboardDevice.man [changed mode: 0755->0644]
man/XChangeKeyboardDevice.txt [changed mode: 0755->0644]
man/XChangePointerDevice.man [changed mode: 0755->0644]
man/XChangePointerDevice.txt [changed mode: 0755->0644]
man/XCloseDevice.man [changed mode: 0755->0644]
man/XDeleteDeviceProperty.man [changed mode: 0755->0644]
man/XDeviceBell.man [changed mode: 0755->0644]
man/XDeviceBell.txt [changed mode: 0755->0644]
man/XDeviceTimeCoord.man [changed mode: 0755->0644]
man/XFreeDeviceList.man [changed mode: 0755->0644]
man/XGetDeviceButtonMapping.man [changed mode: 0755->0644]
man/XGetDeviceControl.man [changed mode: 0755->0644]
man/XGetDeviceControl.txt [changed mode: 0755->0644]
man/XGetDeviceDontPropagateList.man [changed mode: 0755->0644]
man/XGetDeviceFocus.man [changed mode: 0755->0644]
man/XGetDeviceKeyMapping.man [changed mode: 0755->0644]
man/XGetDeviceKeyMapping.txt [changed mode: 0755->0644]
man/XGetDeviceModifierMapping.man [changed mode: 0755->0644]
man/XGetDeviceModifierMapping.txt [changed mode: 0755->0644]
man/XGetDeviceMotionEvents.man [changed mode: 0755->0644]
man/XGetDeviceMotionEvents.txt [changed mode: 0755->0644]
man/XGetDeviceProperty.man [changed mode: 0755->0644]
man/XGetDeviceProperty.txt [changed mode: 0755->0644]
man/XGetExtensionVersion.man [changed mode: 0755->0644]
man/XGetExtensionVersion.txt [changed mode: 0755->0644]
man/XGetFeedbackControl.man [changed mode: 0755->0644]
man/XGetFeedbackControl.txt [changed mode: 0755->0644]
man/XGetSelectedExtensionEvents.man [changed mode: 0755->0644]
man/XGrabDevice.man [changed mode: 0755->0644]
man/XGrabDevice.txt [changed mode: 0755->0644]
man/XGrabDeviceButton.man [changed mode: 0755->0644]
man/XGrabDeviceButton.txt [changed mode: 0755->0644]
man/XGrabDeviceKey.man [changed mode: 0755->0644]
man/XGrabDeviceKey.txt [changed mode: 0755->0644]
man/XIChangeHierarchy.man [changed mode: 0755->0644]
man/XIChangeHierarchy.txt [changed mode: 0755->0644]
man/XIChangeProperty.man [changed mode: 0755->0644]
man/XIChangeProperty.txt [changed mode: 0755->0644]
man/XIDefineCursor.man [changed mode: 0755->0644]
man/XIDefineCursor.txt [changed mode: 0755->0644]
man/XIDeleteProperty.man [changed mode: 0755->0644]
man/XIFreeDeviceInfo.man [changed mode: 0755->0644]
man/XIGetClientPointer.man [changed mode: 0755->0644]
man/XIGetFocus.man [changed mode: 0755->0644]
man/XIGetProperty.man [changed mode: 0755->0644]
man/XIGetSelectedEvents.man [changed mode: 0755->0644]
man/XIGrabButton.man [changed mode: 0755->0644]
man/XIGrabButton.txt [changed mode: 0755->0644]
man/XIGrabDevice.man [changed mode: 0755->0644]
man/XIGrabDevice.txt [changed mode: 0755->0644]
man/XIGrabEnter.man [changed mode: 0755->0644]
man/XIGrabEnter.txt [changed mode: 0755->0644]
man/XIGrabFocusIn.man [changed mode: 0755->0644]
man/XIGrabKeycode.man [changed mode: 0755->0644]
man/XIListProperties.man [changed mode: 0755->0644]
man/XIListProperties.txt [changed mode: 0755->0644]
man/XIQueryDevice.man [changed mode: 0755->0644]
man/XIQueryDevice.txt [changed mode: 0755->0644]
man/XIQueryPointer.man [changed mode: 0755->0644]
man/XIQueryPointer.txt [changed mode: 0755->0644]
man/XIQueryVersion.man [changed mode: 0755->0644]
man/XIQueryVersion.txt [changed mode: 0755->0644]
man/XISelectEvents.man [changed mode: 0755->0644]
man/XISelectEvents.txt [changed mode: 0755->0644]
man/XISetClientPointer.man [changed mode: 0755->0644]
man/XISetClientPointer.txt [changed mode: 0755->0644]
man/XISetFocus.man [changed mode: 0755->0644]
man/XISetFocus.txt [changed mode: 0755->0644]
man/XIUndefineCursor.man [changed mode: 0755->0644]
man/XIUngrabButton.man [changed mode: 0755->0644]
man/XIUngrabDevice.man [changed mode: 0755->0644]
man/XIUngrabEnter.man [changed mode: 0755->0644]
man/XIUngrabFocusIn.man [changed mode: 0755->0644]
man/XIUngrabKeycode.man [changed mode: 0755->0644]
man/XIWarpPointer.man [changed mode: 0755->0644]
man/XIWarpPointer.txt [changed mode: 0755->0644]
man/XListDeviceProperties.man [changed mode: 0755->0644]
man/XListDeviceProperties.txt [changed mode: 0755->0644]
man/XListInputDevices.man [changed mode: 0755->0644]
man/XListInputDevices.txt [changed mode: 0755->0644]
man/XOpenDevice.man [changed mode: 0755->0644]
man/XOpenDevice.txt [changed mode: 0755->0644]
man/XQueryDeviceState.man [changed mode: 0755->0644]
man/XQueryDeviceState.txt [changed mode: 0755->0644]
man/XSelectExtensionEvent.man [changed mode: 0755->0644]
man/XSelectExtensionEvent.txt [changed mode: 0755->0644]
man/XSendExtensionEvent.man [changed mode: 0755->0644]
man/XSendExtensionEvent.txt [changed mode: 0755->0644]
man/XSetDeviceButtonMapping.man [changed mode: 0755->0644]
man/XSetDeviceButtonMapping.txt [changed mode: 0755->0644]
man/XSetDeviceFocus.man [changed mode: 0755->0644]
man/XSetDeviceFocus.txt [changed mode: 0755->0644]
man/XSetDeviceMode.man [changed mode: 0755->0644]
man/XSetDeviceMode.txt [changed mode: 0755->0644]
man/XSetDeviceModifierMapping.man [changed mode: 0755->0644]
man/XSetDeviceValuators.man [changed mode: 0755->0644]
man/XSetDeviceValuators.txt [changed mode: 0755->0644]
man/XUngrabDevice.man [changed mode: 0755->0644]
man/XUngrabDeviceButton.man [changed mode: 0755->0644]
man/XUngrabDeviceKey.man [changed mode: 0755->0644]
packaging/libXi.spec [new file with mode: 0644]
packaging/libxi.spec [deleted file]
specs/Makefile.am [changed mode: 0755->0644]
specs/encoding.xml [changed mode: 0755->0644]
specs/inputlib.xml [changed mode: 0755->0644]
specs/library.xml [changed mode: 0755->0644]
src/Makefile.am [changed mode: 0755->0644]
src/XAllowDv.c
src/XChgDCtl.c
src/XChgFCtl.c
src/XChgKMap.c
src/XChgKbd.c
src/XChgPnt.c
src/XChgProp.c
src/XCloseDev.c
src/XDevBell.c
src/XExtInt.c [changed mode: 0755->0644]
src/XExtToWire.c [changed mode: 0755->0644]
src/XFreeLst.c
src/XGMotion.c
src/XGetBMap.c
src/XGetCPtr.c
src/XGetDCtl.c [changed mode: 0755->0644]
src/XGetFCtl.c [changed mode: 0755->0644]
src/XGetKMap.c
src/XGetMMap.c
src/XGetProp.c
src/XGetVers.c [changed mode: 0755->0644]
src/XGrDvBut.c
src/XGrDvKey.c
src/XGrabDev.c
src/XGtFocus.c
src/XGtSelect.c
src/XIAllowEvents.c
src/XIDefineCursor.c
src/XIGetDevFocus.c
src/XIGrabDevice.c
src/XIHierarchy.c
src/XIPassiveGrab.c
src/XIProperties.c [changed mode: 0755->0644]
src/XIQueryDevice.c
src/XIQueryPointer.c
src/XIQueryVersion.c [changed mode: 0755->0644]
src/XISelEv.c [changed mode: 0755->0644]
src/XISetCPtr.c [moved from src/XSetCPtr.c with 95% similarity]
src/XISetDevFocus.c
src/XIWarpPointer.c
src/XIint.h [changed mode: 0755->0644]
src/XListDProp.c
src/XListDev.c [changed mode: 0755->0644]
src/XOpenDev.c
src/XQueryDv.c [changed mode: 0755->0644]
src/XSelect.c
src/XSetBMap.c [changed mode: 0755->0644]
src/XSetDVal.c
src/XSetMMap.c
src/XSetMode.c
src/XSndExEv.c
src/XStFocus.c
src/XUngrDev.c
src/XUngrDvB.c
src/XUngrDvK.c

diff --git a/COPYING b/COPYING
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index c3c12a2..dcca8e8
--- a/ChangeLog
+++ b/ChangeLog
+commit ae163b6202d844a46541928d00049b29cbdf930f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu May 3 16:01:35 2012 +1000
+
+    libXi 1.6.1
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit fd5e000308925f703ecd15c288127ab33a456425
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Apr 23 13:32:59 2012 +1000
+
+    man: update XIQueryVersion for current server behaviour
+    
+    XIQueryVersion(v1);
+    XIQueryVersion(v2);
+    
+    is now ok as long as v1 <= v2.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit f8f44f42eb543ecd944a84facba6c09bf48e7711
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Fri Apr 20 15:30:30 2012 -0700
+
+    Destroy extension record after last display is removed
+    
+    The extension record is currently leaked and never freed.
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 2ac185d2fd2b884f4f59a7f7f61f414d139859aa
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Mar 26 09:07:34 2012 +1000
+
+    Set the RawEvent sourceid (#34240)
+    
+    XI 2.2 and later include the sourceid in raw events.
+    
+    X.Org Bug 34240 <http://bugs.freedesktop.org/show_bug.cgi?id=34240>
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit dfc101e4c6cdac4ff9a51732b2754287fbdc8582
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Mar 26 09:05:24 2012 +1000
+
+    Move version comparison into a helper function.
+    
+    No functional changes, this simply introduces a version helper function that
+    returns -1, 0 or 1 depending on the version comparison result. To be used
+    internally only.
+    
+    Needed for fix to #34240
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit 8436c920953f288aea2d6d5f370f8eaaaef82d97
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Mar 15 11:51:41 2012 +1000
+
+    Fix wrong button label and mask copy on OS X
+    
+    Regression introduced in c1a5a70b51f12dedf354102217c7cd4247ed3a4b.
+    
+    If double-padding is applied, the length of the mask on the wire may be
+    smaller than libXi's mask_len. When copying, only the wire length must be
+    copied, with the remainder set to 0.
+    When advancing to the button labels, the wire length matters, not libXi's
+    internal length.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Tested-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 70b730b0548ca9e408f14f2576b972beb32a0ad0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Mar 8 16:03:50 2012 +1000
+
+    libXi 1.6.0
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 1b9f0394c3d4d3833f8560ae8170a4d5842419ab
+Author: Chase Douglas <chase.douglas@canonical.com>
+Date:   Wed Mar 7 14:52:54 2012 -0800
+
+    Fix XIScrollClass increment value on 32-bit machines
+    
+    This fixes scroll class increment values on 32-bit machines. Performing
+    1UL << 32 shifts the bit off the end of a 32-bit unsigned long value. By
+    expanding to 1ULL, we have the full 64-bits of an unsigned long long
+    including on 32-bit machines.
+    
+    Before this change, xinput list --long would output scroll increment
+    values of -nan.
+    
+    Signed-off-by: Chase Douglas <chase.douglas@canonical.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit c1a5a70b51f12dedf354102217c7cd4247ed3a4b
+Author: MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu>
+Date:   Tue Feb 21 20:54:40 2012 +0100
+
+    Fix bus error on MIPS N32 for bug #38331.
+    
+    XIValuatorClassInfo and XIScrollClassInfo might have an address
+    of 4 bytes modulo 8, while they contain doubles which need 8 byte
+    alignment.  This is fixed by adding extra padding after each structure
+    or array in sizeDeviceClassType and adding helper functions to
+    determine sizes and padding only in one place.
+    
+    Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=38331
+    Signed-off-by: MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 34964b05c16161de65709d60799b9ad97ce56296
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jan 27 15:35:44 2012 +1000
+
+    libXi 1.5.99.3
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit b355b7300235395717de06809ee6631ce55d3189
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jan 27 13:28:52 2012 +1000
+
+    Handle new XIAllowEvent request size
+    
+    inputproto 2.1.99.6 restored the previous request for ABI compatibility
+    reasons, and it introduced a new XI 2.2 specific define.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Keith Packard <keithp@keithp.com>
+
+commit 07ced7b48219e3bc0c98806f3d7106f86d1b2ca0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Jan 17 21:26:14 2012 +0100
+
+    Force class alignment to a multiple of sizeof(XID).
+    
+    Calculate length field to a multiples of sizeof(XID). XIDs are typedefs
+    to ulong and thus may be 8 bytes on some platforms. This can trigger a
+    SIGBUS if a class ends up not being 8-aligned (e.g. after XAxisInfo).
+    
+    Reported-by: Nicolai Stange <nicolai.stange@zmaw.de>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Signed-off-by: Matthieu Herrb <matthieu.herrb@laas.fr>
+
+commit 15feb92b30e13e7439a3434bea9f454645b97444
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Jan 5 13:55:41 2012 +1000
+
+    man: fix typo Mappiing â†’ Mapping
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 8576ae6b9ee974829e2fb8a834087652a6e9e1a2
+Author: Cyril Brulebois <kibi@debian.org>
+Date:   Thu Dec 22 15:50:47 2011 +0100
+
+    configure.ac: Fix a typo in comments.
+    
+    Signed-off-by: Cyril Brulebois <kibi@debian.org>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit ae0187c8708d2378373889827117911086581fdd
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Dec 22 09:42:43 2011 +1000
+
+    libXi 1.5.99.2
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 47f3d887a7731f4ab68a69ed31dbe7acf6d13270
+Merge: 82a6312 e73e2fe
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 21 15:40:37 2011 +1000
+
+    Merge branch 'multitouch'
+    
+    Conflicts:
+       configure.ac
+
+commit 82a631263ef4e6f46c1f33748089db8bf603b095
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Dec 21 15:33:17 2011 +1000
+
+    libXi 1.5.0
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit e73e2fe95dab3e0048b24d16327adbe54326ff3f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Sep 14 22:33:57 2011 -0700
+
+    Implement support for XI 2.2
+    
+    Adds support for the new TouchClass for multitouch-capable servers/devices.
+    
+    New events:
+      XITouchOwnershipEvent
+    
+    New event types handled:
+      XITouchBegin, XITouchUpdate, XITouchEnd
+      XIRawTouchBegin, XIRawTouchUpdate, XIRawTouchEnd
+    
+    New functions:
+      XIGrabTouchBegin ... passive grabs on touches
+      XIUngrabTouchBegin
+      XIAllowTouchEvents ... Allow/reject touch event sequences
+    
+    New XIQueryDevice classes:
+      XITouchClassInfo
+    
+    Requires libX11 1.5 for GetReqSized
+    
+    Co-authored by: Chase Douglas <chase.douglas@canonical.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 7888d14a499062a1c3b333f31f1330cecf1e97c1
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Oct 25 13:30:47 2011 +1000
+
+    Bump to 1.5.99.1
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit fa6505f0a86b296e8f12f0fb8f472ef17b501fdb
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Dec 19 09:36:34 2011 +1000
+
+    man: minor formatting fix in XIGrabButton
+
+commit 49408e39e4b084fe362e9ee197bfa0aa1c55384d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Nov 11 15:32:21 2011 +1000
+
+    Include config.h from source files
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit ba83a1e58592e41f207524f106ba26dd71fe4171
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Oct 26 08:55:35 2011 +1000
+
+    Stop unnecessary calls to size_classes
+    
+    Xmalloc is a macro evaluating its argument twice.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 6d6ae8fc8b9620bf864ac7dff8d818573eee3e4f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Oct 26 08:54:53 2011 +1000
+
+    Fix duplicate sizeof in copy_classes
+    
+    sizeof(bla * sizeof()) is'nt right.
+    
+    Plus add some () to the next_block call too to emphasise that *nclasses is
+    the multiplicator.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 323730f7fa70190d2ea00e62c6964fee524ca430
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Oct 27 10:27:49 2011 +1000
+
+    man: passive grabs return the number of failed modifier combinations
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 5189df57e18c79327848fb117a8ede59868c8fdb
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Oct 21 08:49:31 2011 +1000
+
+    man: XIGrabButton returns error codes, not status codes
+    
+    Reword slightly that the returned value is the error code for this
+    particular grab.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 05aaf65b3b6b7dc7268137ce4ee516f08eefb62f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Oct 21 08:07:45 2011 +1000
+
+    man: fix #include for XIGrabButton
+    
+    Reported-by: Matthias Clasen <mclasen@redhat.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit c25debae73be50b9a77454ed4d72ffeaab726846
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Oct 10 10:24:38 2011 +1000
+
+    Bump to 1.4.99.1
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 7ca05f3094958c04e8f78a786061124c58f8e1f3
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Sep 28 11:16:42 2011 +1000
+
+    Remove superfluous assignment of lib->classes in XIQueryDevices.
+    
+    A few lines south from here we malloc lib->classes, this assignment is a
+    leftover from 225071e2e67fb65a0258397212f9826c9b25e078.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+
+commit e97c3dd00369b47af067e30e910335b199a2f147
+Author: Matt Dew <marcoz@osource.org>
+Date:   Mon Oct 3 22:05:51 2011 -0600
+
+        1 - fix the capitalization of the ID attriutes to match either the
+            <title> or <funcdef> string it goes with.
+        2 - fix any <linkend>'s that were affected by 1.
+        3 - any <function> in the docs that has an actual funcdef,
+            will become an olink.
+    
+        Signed-off-by: Matt Dew <marcoz@osource.org>
+
+commit 5f9df47340e192d095127e3c7da180b0fb3dc286
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Sep 23 09:04:21 2011 +1000
+
+    Use a separate nclasses variable in XIQueryDevice
+    
+    No functional changes, just clarifying the code. If we skip over unknown
+    classes, lib->num_classes != wire->num_classe. Use a separate variable to
+    make that change more explicit and align the code closer with
+    wireToDeviceChangedEvent.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 2eb34db82dbd8429594c7ce1d361cabf3571edf1
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Fri Sep 16 21:00:19 2011 -0700
+
+    Make shadow man pages generated by asciidoc work with Solaris man
+    
+    Solaris man requires .so entries in man pages include the man section
+    directory, not just the man page filename, even when it's in the same
+    directory, so use sed to add it in.
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    
+    This may be a temporary fix only. See
+    http://lists.freedesktop.org/archives/xorg-devel/2011-September/025219.html
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit a43c0a5d2a6cf80df314c96e0b58804dd87868be
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Tue Sep 20 15:11:13 2011 -0400
+
+    specs: refactor and complete copyright legal text
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 552f60789263ad2a1d983cf5b479af63d90f7591
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Sun Sep 18 00:53:56 2011 -0700
+
+    Use AM_CPPFLAGS to use in tree headers before installed headers
+    
+    This addresses a build failure found by the tinderbox.
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 69f2580fd47cfe24105892e9ffb79cd046954b7d
+Merge: fc5d478 3ed1b46
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Sat Sep 17 06:41:30 2011 +1000
+
+    Merge branch 'smooth-scrolling'
+    
+    Conflicts:
+       src/XExtInt.c
+
+commit 3ed1b463205295a5ebba7d570a4cb8dfade51a38
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Aug 17 14:50:39 2011 +1000
+
+    Support XI 2.1 XIScrollClass
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 00382417331d0b38373796fd31757be9fd3e9971
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Jun 2 13:23:32 2011 +1000
+
+    Support XI 2.1 internally
+    
+    Add the required constants to pretend to support XI 2.1.
+    Having named constants for 2.1 seems a bit pointless, so let's just use the
+    numbers directly.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit fc5d47895c1361763aa7f088b6d8cb3859e3fda8
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Sat Sep 17 06:40:01 2011 +1000
+
+    Require inputproto 2.0.99.1 or later
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 4dcbad7e10289317edc22113c1f451d79df221e1
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jun 3 15:46:47 2011 +1000
+
+    man: update property and grab man pages for new constants
+    
+    Suggest the use of the new XIGrabModeAsync, etc. defines instead of the core
+    defines. Add a BUGS section to each man page explaining
+    backwards-compatibility.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 14f674296bc23b3cd50f6d302c3064250132c2c1
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 22 13:55:56 2011 +1000
+
+    man: fix typo in XIQueryDevice man page
+    
+    struct name is XIValuatorClassInfo.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 91f928a70246c26cbee00bf59a8e318e9317142e
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Aug 17 15:20:48 2011 +1000
+
+    Handle unknown device classes.
+    
+    If the server sends an unknown device class in response to an XIQueryDevice
+    call, no memory is allocated for these classes but we still write type
+    and sourceid as well as setting to->classes[i]. The latter causes multiple
+    classes to point to the same memory field.
+    
+    Move the common code of assigning these three into the respective class type
+    handlers so to automatically skip any unknown classes.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit f5b4ff2b4bbac5477af337ed63d019b1f1bc21c9
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Thu Sep 15 11:58:31 2011 -0400
+
+    inputlib: restore original title "X Input Device Extension Library"
+    
+    Somehow the title got changed during troff to docbook conversion.
+    Latest troff version:
+    ftp://www.x.org/pub/X11R7.0/doc/PDF/XiLib.pdf
+    
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 5174411eb67ff672abb3301268bd4fe06851ce3e
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Thu Sep 15 11:57:12 2011 -0400
+
+    inputlib: prefix 1.0 with the word Version
+    
+    To be consistent with all other docs
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit b695f07ac85e76c7502a743343aacb2c93318ac5
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Thu Sep 15 11:56:33 2011 -0400
+
+    inputlib: fix copyright statements
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit d8aea9731674ecb4e313051f866966113473e395
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Mon Sep 12 16:54:45 2011 -0400
+
+    docs: use the &fullrelvers; entity to set X11 release information
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit b4690e1d9d0a27e04c7204614c0e88edef210ba7
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Sun Sep 11 19:49:54 2011 -0400
+
+    docs: remove <productnumber> which is not used by default
+    
+    This element is not rendered by default on the title. A template
+    customization is required to display it.
+    X Window System does not have a product number.
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 83a3f9d1b06391d5c25602c0b6a3dba63e7abc81
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Thu Sep 8 20:00:00 2011 -0400
+
+    docbook.am: embed css styles inside the HTML HEAD element
+    
+    Rather than referring to the external xorg.css stylesheet, embed the content
+    of the file in the html output produced. This is accomplished by using
+    version 1.10 of xorg-xhtml.xsl.
+    
+    This makes the whole html docs tree much more relocatable.
+    In addition, it eliminates xorg.css as a runtime file which makes
+    xorg-sgml-doctools a build time only package.
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit bd4c9c82e889d737f3488c234659216a218d8eb2
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Wed Sep 7 10:31:04 2011 -0400
+
+    docbook.am: global maintenance update - entities, images and olinking
+    
+    Adding support in libX11 for html chunking caused a reorg of docbook.am
+    as well as the xorg-sgml-doctools masterdb for olinking.
+    The parameter img.src.path is added for pdf images.
+    A searchpath to the root builddir is added for local entities, if present.
+    
+    The docbook.am makefile hides all the details and is identical for
+    all 22 modules having DocBook documentation. It is included by a thin
+    Makefile.am which requires no docbook knowledge.
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 942dd55eb370e0acea3184de78619766a09f7670
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jun 3 15:46:47 2011 +1000
+
+    man: update property and grab man pages for new constants
+    
+    Suggest the use of the new XIGrabModeAsync, etc. defines instead of the core
+    defines. Add a BUGS section to each man page explaining
+    backwards-compatibility.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit eb5039859810a0fc4e4e594a4a1ccd99c5fecf85
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Aug 22 13:55:56 2011 +1000
+
+    man: fix typo in XIQueryDevice man page
+    
+    struct name is XIValuatorClassInfo.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 635c2c029b1e73311c3f650bcaf7eeb9e782134b
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Aug 17 15:20:48 2011 +1000
+
+    Handle unknown device classes.
+    
+    If the server sends an unknown device class in response to an XIQueryDevice
+    call, no memory is allocated for these classes but we still write type
+    and sourceid as well as setting to->classes[i]. The latter causes multiple
+    classes to point to the same memory field.
+    
+    Move the common code of assigning these three into the respective class type
+    handlers so to automatically skip any unknown classes.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit ca73cd3b7630e7eb7d26c61c4af10d35dbce5465
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Aug 12 14:24:26 2011 +1000
+
+    Don't use the protocol defines for 2.0 versioning.
+    
+    Otherwise we run into the old problem again: recompiling libXi against
+    newer inputproto headers will appear to change the version support,
+    potentially causing errors or other misbehaviours.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 5a299d1731d3db16ccdd3a66246c81ca522f1702
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Mon Aug 1 16:47:38 2011 -0700
+
+    Fix the FIXME output in man page .TH macros generated by asciidoc
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit e8531dd6a981c6cf19a1d256c29e886e34e8f51a
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Sep 7 15:21:31 2010 +1000
+
+    Add XI2 library-internal array offsets to XIint.h
+    
+    These defines are currently defined in XI.h and XI2.h. Their only use is as
+    offset into a library-internal array. Add them to XIint.h to have them where
+    they belong.
+    
+    These defines do not have any effect on the protocol. They are simply
+    offsets into an array for libXi-specific version checking. The defines are
+    added to this header for readability, given that we cannot remove them from
+    the protocol without potentially breaking clients (who should never use
+    these anyway, but...) means they will never get hit.
+    
+    Future defines for these offsets will only be added to libXi, not the
+    protocol.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 653b45b7cc275a560c1ea213216a908c125e443d
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jun 24 10:09:10 2011 +1000
+
+    man: Fix formatting in XGetFeedbackControl
+    
+    Indent structs to make them more readable, make "Structures" header an
+    actual header.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 809c9e936b9f5234de03148376d389fdcfa6d40a
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Sun Jun 12 18:39:46 2011 -0400
+
+    Install xml versions of specs even if HAVE_XMLTO is false
+    
+    DocBook/XML input source is also a usefull output format that can be viewed
+    with an XML viewer or editor and by some O/S help system.
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 94f585af88a6486148ad6514f1f74eb83ce547ef
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Sun Jun 5 16:27:37 2011 -0400
+
+    Install target dbs alongside generated documents
+    
+    This matches a change in xorg-sgml-docs whereby the masterdb will look for
+    the target dbs into the same location as the generated documents.
+    
+    The target dbs are now installed alongside the generated documents.
+    Previously they are installed in $prefix/sgml/X11/dbs alongside masterdb which
+    has the potential of installing outside the package prefix and cause
+    distcheck to fail when user does not have write permission in this package.
+    
+    Requires XORG_CHECK_SGML_DOCTOOLS(1.8) which was released 2011-06-11
+
+commit 2d2581479c64b8b44ab91e90ecb04acd5d106ea2
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Thu Jun 9 15:59:23 2011 -0400
+
+    make: use AM_V_at rather than AM_V_GEN to prefix the mv command
+    
+    This will prevent outputting a "GEN" prefix. Moving and removing files
+    is not "generating" anything.
+    
+    Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit f4bdafebaf123c584e1b5e4ff1bc48f7cf4c5b26
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Thu Jun 9 15:49:23 2011 -0400
+
+    make: remove unneeded AM_V_GEN silent rule directive.
+    
+    It happens to be in the middle of the script statement and cause this
+    incorrect output:
+    
+     rm XCloseDevice.man && make
+      GEN    XOpenDevice.3
+    /bin/bash: line 1: @echo: command not found
+    /bin/bash: line 2: @echo: command not found
+    [...]
+    
+    Reviewed-by: Dan Nicholson <dbn.lists@gmail.com>
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit f4930482c24a22c8cdf9da3c96516936ddd1f7b9
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Jun 7 14:12:08 2011 +1000
+
+    Bump to 1.4.99
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 938ef832b892fdefe0d5c2bb4510c91bbbccca9f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jun 3 15:10:27 2011 +1000
+
+    man: Fix typo in XIChangeProperty
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 597a6a51721d30c4354d1133bb6da6bd2e12446e
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Fri Jun 3 15:02:35 2011 +1000
+
+    man: Fix wrong event names in XIGrabButton.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 7736957fa2598800c14a88cae1dd7809b184d743
+Author: Matt Dew <marcoz@osource.org>
+Date:   Tue May 31 20:03:23 2011 -0600
+
+    Add id attributes to funcsynopsis to allow other docs to olink to them.
+    
+    Signed-off-by: Matt Dew <marcoz@osource.org>
+    Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 9faab2bc0bdd4d98a04e572a7a5201bfcd3bdc70
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Jun 2 16:21:59 2011 +1000
+
+    Use Data, not Data32 in XIPassiveGrabDevice
+    
+    Data32 takes and iterates over an array of longs, thus skipping every 4
+    bytes on LP64. Here we only have arrays of ints, use the normal Data macro
+    instead.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 67441d30df756eb715a262d3439865dedd4055e8
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Jun 2 14:17:44 2011 +1000
+
+    man: fix missing comma in XIGrabEnter man page
+
+commit 4a694b3f4f5c92d62526ea1c5461c59df86c13db
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu May 5 09:30:21 2011 +1000
+
+    Silence compiler warning due to differnent event conversion procs
+    
+    XExtInt.c:161:5: warning: initialization from incompatible pointer type
+    
+    XSndExEv.c: In function 'XSendExtensionEvent':
+    XSndExEv.c:84:8: warning: assignment from incompatible pointer type
+    
+    Xlib and libXi differ in the conversion functions. libXi takes an xEvent**
+    and a num_events parameter since it may split an event into multiple
+    xEvents.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit fd680f025b1db22b1069aed2f142f670181574e5
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu May 5 09:20:23 2011 +1000
+
+    Silence compiler warning in XListDProp.c
+    
+    XListDProp.c: In function 'XListDeviceProperties':
+    XListDProp.c:72:9: warning: pointer targets in passing argument 2 of
+    '_XRead32' differ in signedness
+    /usr/include/X11/Xlibint.h:652:13: note: expected 'long int *' but argument
+    is of type 'Atom *'
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit aa2432240ad02c54280f2d11c007969c3eb9b79f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu May 5 09:43:32 2011 +1000
+
+    man: fix typo, layout in XGetExtensionVersion.man
+    
+    Fix a typo and move from MPX to XI2. Add a linebreak to make the
+    depreciation separate from the function description. Changes in the second
+    paragraph are just realignment due to the linebreak.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit f148a6279f07f029fc6a5b0a6556ff6622e6686a
+Author: Alan Coopersmith <alan.coopersmith@oracle.com>
+Date:   Wed Feb 2 17:01:52 2011 -0800
+
+    Move Xinput server API documentation from libXi to xserver
+    
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+    Reviewed-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 4cc2b17a3d069b296837edbd6e81af5bbf9821b4
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue May 3 14:51:12 2011 +1000
+
+    Remove a few unused assignments.
+    
+    Found by static analyzer.
+    
+    Reported-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit cc6feecae23b321952921cf927bc965386844c8c
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue May 3 14:34:22 2011 +1000
+
+    XIChangeHierarchy: Return Success early if no actual changes are requested.
+    
+    Do the same for negative num_changes.
+    
+    Found by static analyzer.
+    
+    Reported-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit af65475b1f6b7209750220a74aaad9968d54aaf7
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue May 3 13:21:02 2011 +1000
+
+    Allocate enough memory for raw events + extra data.
+    
+    Necessary space was calculated, but not actually used to allocate memory. As
+    a result, valuator data would overwrite the allocated memory.
+    
+    ==4166== Invalid write of size 1
+    ==4166==    at 0x4C29F04: memcpy (mc_replace_strmem.c:497)
+    ==4166==    by 0x8F39180: ??? (in /usr/lib/libXi.so.6.1.0)
+    ==4166==    by 0x7433D48: _XCopyEventCookie (in /usr/lib/libX11.so.6.3.0)
+    ==4166==    by 0x7425166: XPeekEvent (in /usr/lib/libX11.so.6.3.0)
+    ==4166==    by 0x49C3E3: process_key (x11_be.c:1065)
+    ==4166==    by 0x49EA5C: event_key_release (x11_be.c:2201)
+    ==4166==    by 0x49DD6E: x11_be_process_events (x11_be.c:1892)
+    ==4166==    by 0x4A38F4: x11_be_main_loop (x11_be.c:4353)
+    ==4166==    by 0x4A39E1: x11_be_thread_main (x11_be.c:4385)
+    ==4166==    by 0x87549C9: start_thread (pthread_create.c:300)
+    ==4166==    by 0x8A516FC: clone (clone.S:112)
+    ==4166==  Address 0x168afe80 is 0 bytes after a block of size 96 alloc'd
+    ==4166==    at 0x4C284A8: malloc (vg_replace_malloc.c:236)
+    ==4166==    by 0x8F390BD: ??? (in /usr/lib/libXi.so.6.1.0)
+    ==4166==    by 0x7433D48: _XCopyEventCookie (in /usr/lib/libX11.so.6.3.0)
+    ==4166==    by 0x7425166: XPeekEvent (in /usr/lib/libX11.so.6.3.0)
+    ==4166==    by 0x49C3E3: process_key (x11_be.c:1065)
+    ==4166==    by 0x49EA5C: event_key_release (x11_be.c:2201)
+    ==4166==    by 0x49DD6E: x11_be_process_events (x11_be.c:1892)
+    ==4166==    by 0x4A38F4: x11_be_main_loop (x11_be.c:4353)
+    ==4166==    by 0x4A39E1: x11_be_thread_main (x11_be.c:4385)
+    ==4166==    by 0x87549C9: start_thread (pthread_create.c:300)
+    
+    Reported-by: Roger Cruz <roger.cruz@virtualcomputer.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 18177afd4fb3934d0a9083c599fb96701eec2ad9
+Author: Matthieu Herrb <matthieu.herrb@laas.fr>
+Date:   Fri Apr 1 22:49:09 2011 +0200
+
+    Fix XISelectEvents on 64 bits, strict alignement architectures.
+    
+    Use Data() to send the struct xXIEventMask on the wire instead of
+    Data32() which expects a pointer to a 64bits value on LP64
+    architectures.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 75dc4029316c321d8f09fae584024f36c5c85c7f
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Sun Feb 27 15:06:18 2011 -0500
+
+    Documentation: add Docbook external references support
+    
+    When writing technical documentation, it is often necessary to cross
+    reference to other information. When that other information is not in the
+    current document, additional support is needed, namely <olink>.
+    
+    A new feature with version 1.7 of xorg-sgml-doctools adds references to
+    other documents within or outside this package.
+    
+    This patch adds technical support for this feature but does not change
+    the content of the documentation as seen by the end user.
+    
+    Each book or article must generate a database containing the href
+    of sections that can be referred to from another document. This database
+    is installed in DATAROOTDIR/sgml/X11/dbs. There is a requirement that
+    the value of DATAROOTDIR for xorg-sgml-doctools and for the package
+    documentation is the same. This forms a virtual document tree.
+    
+    This database is consulted by other documents while they are being generated
+    in order to fulfill the missing information for linking.
+    Refer to the xorg-sgml-doctools for further technical information.
+    
+    Co-authored-by: Matt Dew <marcoz@osource.org>
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 32236a7779f721d252d633d06ade306f246421a3
+Author: Jeremy Huddleston <jeremyhu@apple.com>
+Date:   Fri Mar 18 16:30:13 2011 -0700
+
+    configure.ac: 1.4.2
+    
+    Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
+
+commit 2d638fc37b0dbf28e5c826f74f68ada83a8c3e2b
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Mar 15 10:55:10 2011 +1000
+
+    Force alignment with sizeof(Atom) for XIButtonClassInfo
+    
+    The memory layout of an XIButtonClassInfo is
+    [struct XIButtonClassInfo][mask][labels]
+    
+    With the mask being currently 4-byte aligned and labels a list of Atoms. On
+    LP64, Atoms are 8 byte, leading to unaligned access for some mask lengths.
+    Force the alignment to be sizeof(Atom).
+    
+    Reported-by: Christian Weisgerber <naddy@mips.inka.de>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Tested-by: Christian Weisgerber <naddy@mips.inka.de>
+    Reviewed-by: Adam Jackson <ajax@redhat.com>
+
+commit 477f922fb07eea629f16c55b0a022e836ede6d41
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Mar 8 14:44:10 2011 +1000
+
+    Don't discard extra data for passive grabs.
+    
+    Failed modifier data was discarded, causing assertions inside xcb.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit f0a352412920d9989323c7d33ca75c3646ee3f35
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Mar 8 14:01:35 2011 +1000
+
+    man: describe return value for XI2 passive grabbing calls.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 11b1e8ea7bc160cf9a42231742eedb0e7fefa222
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Sep 9 14:43:03 2010 +1000
+
+    Rename XSetCPtr.c to XISetCPtr.c.
+    
+    XISetClientPointer is an XI2.0 call and should be named accordingly.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 19ac7ef23e7ff07068a63d1553159e7cb3ad2576
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Sep 9 14:43:02 2010 +1000
+
+    Require XI 2 for all XI 2 calls.
+    
+    Each XI2 call should check _XiCheckExtInit for XI version 2.0 or higher.
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 536bd44c513ede7e61e112c82a80fb9197f261f7
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Feb 23 10:53:21 2011 +1000
+
+    Fix typo in comment.
+    
+    Reported-by: Julien Cristau <jcristau@debian.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 4ca8be9f3ffbafe9515e50d784f4ff83f6993be0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Feb 23 09:30:59 2011 +1000
+
+    Fix invalid read in XIGrabDevice.
+    
+    Miscalculation of length caused Data() to memcpy too many bytes.
+    
+    ==2865== Invalid read of size 1
+    ==2865==    at 0x4A07480: memcpy (mc_replace_strmem.c:602)
+    ==2865==    by 0x544271E: XIGrabDevice (XIGrabDevice.c:69)
+    ==2865==    by 0x400B0A: main (gnome642481.c:56)
+    ==2865==  Address 0x642f614 is 0 bytes after a block of size 20 alloc'd
+    ==2865==    at 0x4A04896: calloc (vg_replace_malloc.c:418)
+    ==2865==    by 0x54425D3: XIGrabDevice (XIGrabDevice.c:65)
+    ==2865==    by 0x400B0A: main (gnome642481.c:56)
+    
+    SetReqLen() expects 4-byte units.
+    Data() expects bytes.
+    
+    Gnome Bug 642481 <https://bugzilla.gnome.org/show_bug.cgi?id=642481>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 4db3db2b38d8eb9024170633d3bf7c5050272dd0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Mon Feb 14 08:48:07 2011 +1000
+
+    Mark sourceid in Raw events as bug and force to 0..
+    
+    The protocol does not provide a source ID for raw events, so this value is
+    always 0. It shouldn't really be there, but the past is so hard to change.
+    
+    Reported-by:  Mark Dokter <dokter@icg.tugraz.at>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit d79a9b174a79e89ca2507a61f2e12af25102313f
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Tue Feb 1 07:36:08 2011 +1000
+
+    man: note that callers of XIQueryPointer must free the button mask.
+    
+    buttons_return->mask is allocated by the library and must be freed by the
+    caller to avoid leaking.
+    
+    Reported-by: Matthias Clasen <mclasen@redhat.com>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 1b376f371c2f866cd1cdf047e50210a5c69772b9
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Wed Feb 2 11:43:43 2011 -0500
+
+    config: comment, minor upgrade, quote and layout configure.ac
+    
+    Group statements per section as per Autoconf standard layout
+    Quote statements where appropriate.
+    Autoconf recommends not using dnl instead of # for comments
+    
+    Use AC_CONFIG_FILES to replace the deprecated AC_OUTPUT with parameters.
+    Use AC_PROG_LIBTOOL to replace the deprecated AM_PROG_LIBTOOL
+    Remove redundant AC_SUBST(*_CFLAGS) and/or *_LIBS
+    Remove redundant AC_PROG_MAKE_SET included with AM_INIT_AUTOMAKE
+    Remove redundant AC_CANONICAL_HOST included in XORG_DEFAULT_OPTIONS
+    Add AC_CONFIG_SRCDIR([Makefile.am]) where missing
+    Update minimum version of util-macros to at least 1.8.
+    
+    One or more of the above actions were applied
+    No functional configuration changes
+    
+    This helps automated maintenance and release activities.
+    Details can be found in http://wiki.x.org/wiki/NewModuleGuidelines
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit faff510fed9733b2860e14490d5a40d70b840eae
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Fri Jan 28 19:41:37 2011 -0500
+
+    config: replace deprecated AM_CONFIG_HEADER with AC_CONFIG_HEADERS
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 3776075264024af7eca93f689305d46302e88536
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Fri Jan 28 12:07:46 2011 -0500
+
+    config: remove already included AC_PROG_SED statement
+    
+    Use AC_PROG_SED now supplied by XORG_DEFAULT_OPTIONS
+    Use the appropriate platform version of sed
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit 5283e87ca909304d3e1820ef877bf3587a9c8724
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Thu Jan 27 18:50:15 2011 -0500
+
+    config: remove AC_PROG_CC as it overrides AC_PROG_C_C99
+    
+    XORG_STRICT_OPTION from XORG_DEFAULT_OPTIONS calls
+    AC_PROG_C_C99. This sets gcc with -std=gnu99.
+    If AC_PROG_CC macro is called afterwards, it resets CC to gcc.
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
+commit be2a1b33c9394dcab52622bde53c83f1dd840ea0
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Wed Jan 26 07:42:53 2011 +1000
+
+    libXi 1.4.1
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit e0c95ce2348a9c9afaa4862368c7a5ae6913457c
+Author: Carlos Garnacho <carlosg@gnome.org>
+Date:   Mon Jan 24 12:35:04 2011 +0100
+
+    Fill in mods/group->effective in XIQueryPointer()
+    
+    the other XIModifierState/XIGroupState fields are being set correctly,
+    but the "effective" field was being left as undefined memory.
+    
+    Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit a5961a8459614fcaa801a47cda07d3ee8246b16f
+Author: Philipp Reh <sefi@s-e-f-i.de>
+Date:   Mon Jan 10 17:35:57 2011 +0100
+
+    Fix passive grabs.
+    
+    _XIPassiveGrabDevice, which is called by alle the passive grab functions,
+    wrongly returns an error when it shouldn't.
+    The attached patch adds the missing "not" to properly test the error
+    condition of _XReply.
+    
+    Signed-off-by: Philipp Reh <sefi@s-e-f-i.de>
+    Reviewed-by: Daniel Stone <daniel@fooishbar.org>
+    Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
+
+commit 408db9e86a92c897390129ef27a804d7cf6ba6fb
+Author: Paulo Zanoni <pzanoni@mandriva.com>
+Date:   Thu Dec 16 14:10:05 2010 -0200
+
+    Use docbookx.dtd version 4.3 for all docs
+    
+    Signed-off-by: Paulo Zanoni <pzanoni@mandriva.com>
+    Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
+
+commit 9419fe9f0b21232d342885a693fbf9222b5844e4
+Author: Daniel Stone <daniel@fooishbar.org>
+Date:   Mon Dec 13 19:49:58 2010 +0000
+
+    WireToEvent: Set display member of all events as well
+    
+    All events were getting random uninitialised garbage for display; fix
+    that.
+    
+    Signed-off-by: Daniel Stone <daniel@fooishbar.org>
+
+commit 549dd5f470148df74e65ce7bb1af316a2848a71d
+Author: Gaetan Nadon <memsize@videotron.ca>
+Date:   Tue Nov 9 13:04:55 2010 -0500
+
+    config: HTML file generation: use the installed copy of xorg.css
+    
+    Currenlty the xorg.css file is copied in each location
+    where a DocBook/XML file resides. This produces about
+    70 copies in the $(docdir) install tree.
+    
+    Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+
 commit ea7e12eaf84ada28f4933e85ecf51a47c9db0b93
 Author: Peter Hutterer <peter.hutterer@who-t.net>
 Date:   Tue Nov 2 14:26:34 2010 +1000
diff --git a/INSTALL b/INSTALL
new file mode 100644 (file)
index 0000000..8b82ade
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,291 @@
+Installation Instructions
+*************************
+
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
+2006, 2007, 2008 Free Software Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+   Briefly, the shell commands `./configure; make; make install' should
+configure, build, and install this package.  The following
+more-detailed instructions are generic; see the `README' file for
+instructions specific to this package.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You need `configure.ac' if
+you want to change it or regenerate `configure' using a newer version
+of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.
+
+     Running `configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  6. Often, you can also type `make uninstall' to remove the installed
+     files again.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   With a non-GNU `make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use `make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple `-arch' options to the
+compiler but only a single `-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the `lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, `make install' installs the package's commands under
+`/usr/local/bin', include files under `/usr/local/include', etc.  You
+can specify an installation prefix other than `/usr/local' by giving
+`configure' the option `--prefix=PREFIX'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option `--exec-prefix=PREFIX' to `configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=DIR' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Particular systems
+==================
+
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
+CC is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
+
+     ./configure CC="cc -Ae"
+
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
+
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
+a workaround.  If GNU CC is not installed, it is therefore recommended
+to try
+
+     ./configure CC="cc"
+
+and if that doesn't work, try
+
+     ./configure CC="cc -nodtk"
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option `--target=TYPE' to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+causes the specified `gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+Unfortunately, this technique does not work for `CONFIG_SHELL' due to
+an Autoconf bug.  Until the bug is fixed you can use this workaround:
+
+     CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of all of the options to `configure', and exit.
+
+`--help=short'
+`--help=recursive'
+     Print a summary of the options unique to this package's
+     `configure', and exit.  The `short' variant lists options used
+     only in the top level, while the `recursive' variant lists options
+     also present in any nested packages.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`--prefix=DIR'
+     Use DIR as the installation prefix.  *Note Installation Names::
+     for more details, including other options available for fine-tuning
+     the installation locations.
+
+`--no-create'
+`-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
old mode 100755 (executable)
new mode 100644 (file)
index d399af2..825861e
@@ -1,5 +1,4 @@
-SUBDIRS = src 
-#SUBDIRS = src man doc specs
+SUBDIRS = src man specs
 
 pkgconfigdir = $(libdir)/pkgconfig
 pkgconfig_DATA = xi.pc
diff --git a/autogen.sh b/autogen.sh
deleted file mode 100644 (file)
index 904cd67..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-#! /bin/sh
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-ORIGDIR=`pwd`
-cd $srcdir
-
-autoreconf -v --install || exit 1
-cd $ORIGDIR || exit $?
-
-$srcdir/configure --enable-maintainer-mode "$@"
old mode 100755 (executable)
new mode 100644 (file)
index 85c620e..2d3a46a
@@ -1,30 +1,34 @@
-dnl Process this file with autoconf to create configure.
 
+# Initialize Autoconf
 AC_PREREQ([2.60])
+AC_INIT([libXi], [1.6.1],
+       [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [libXi])
+AC_CONFIG_SRCDIR([Makefile.am])
+AC_CONFIG_HEADERS([src/config.h])
 
-AC_INIT(libXi, 1.4.0, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], libXi)
+# Initialize Automake
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
 
-# Require xorg-macros minimum of 1.10 for DocBook XML documentation
+# Initialize libtool
+AC_PROG_LIBTOOL
+
+# Require xorg-macros minimum of 1.12 for DocBook external references
 m4_ifndef([XORG_MACROS_VERSION],
-          [m4_fatal([must install xorg-macros 1.10 or later before running autoconf/autogen])])
-XORG_MACROS_VERSION(1.10)
+          [m4_fatal([must install xorg-macros 1.12 or later before running autoconf/autogen])])
+XORG_MACROS_VERSION(1.12)
 XORG_DEFAULT_OPTIONS
+XORG_ENABLE_DOCS
 XORG_ENABLE_SPECS
-XORG_WITH_XMLTO(0.0.20)
+XORG_WITH_XMLTO(0.0.22)
 XORG_WITH_FOP
-XORG_CHECK_SGML_DOCTOOLS(1.5)
+XORG_WITH_XSLTPROC
+XORG_CHECK_SGML_DOCTOOLS(1.8)
 XORG_WITH_ASCIIDOC(8.4.5)
-AM_CONFIG_HEADER(src/config.h)
-
-# Check for progs
-AC_PROG_CC
-AC_PROG_LIBTOOL
-AC_PROG_SED
+XORG_CHECK_MALLOC_ZERO
 
-# Checks for pkg-config packages
-PKG_CHECK_MODULES(XI, [xproto >= 7.0.13] [x11 >= 1.2.99.1] [xextproto >= 7.0.3] [xext >= 1.0.99.1] [inputproto >= 1.9.99.902])
+# Obtain compiler/linker options for dependencies
+PKG_CHECK_MODULES(XI, [xproto >= 7.0.13] [x11 >= 1.4.99.1] [xextproto >= 7.0.3] [xext >= 1.0.99.1] [inputproto >= 2.1.99.6])
 
 # Check for xmlto and asciidoc for man page conversion
 # (only needed by people building tarballs)
@@ -44,9 +48,9 @@ AM_CONDITIONAL([INSTALL_MANPAGES],
        [test -f "$srcdir/man/XAllowDeviceEvents.man" || \
          test $have_doctools = yes])
 
-XORG_CHECK_MALLOC_ZERO
-
-AC_OUTPUT([Makefile
-           src/Makefile
-           xi.pc])
-
+AC_CONFIG_FILES([Makefile
+               src/Makefile
+               man/Makefile
+               specs/Makefile
+               xi.pc])
+AC_OUTPUT
index 34ab4bf..5294ad9 100644 (file)
@@ -6,12 +6,12 @@ Quick Guide To Patching This Package For The Impatient
 2. Unpack the package as usual with "dpkg-source -x"
 3. Run the "patch" target in debian/rules
 4. Create a new patch with "quilt new" (see quilt(1))
-5. Edit all the files you want to include in the patch with "quilt edit" 
+5. Edit all the files you want to include in the patch with "quilt edit"
    (see quilt(1)).
 6. Write the patch with "quilt refresh" (see quilt(1))
 7. Run the "clean" target in debian/rules
 
-Alternatively, instead of using quilt directly, you can drop the patch in to 
+Alternatively, instead of using quilt directly, you can drop the patch in to
 debian/patches and add the name of the patch to debian/patches/series.
 
 ------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
index c8dd5b8..8ee92f3
@@ -1,6 +1,6 @@
 libxi (2:1.4.0-1slp2) unstable; urgency=low
 
-  * [X11R7.6] upgrade package 
+  * [X11R7.6] upgrade package
   * Git: 165.213.180.234:slp/pkgs/xorg/lib/libxi
   * Tag: libxi_1.4.0-1slp2
 
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 6261652..ed51ed6 100644 (file)
@@ -25,7 +25,7 @@ Index: libxi/src/XExtInt.c
 @@ -173,6 +173,64 @@
      "BadClass, invalid event class",  /* BadClass */
  };
+
 +/* Get the version supported by the server to know which number of
 +* events are support. Otherwise, a wrong number of events may smash
 +* the Xlib-internal event processing vector.
@@ -114,7 +114,7 @@ Index: libxi/src/XGetVers.c
 @@ -72,19 +72,15 @@
      return (ext);
  }
+
 -_X_HIDDEN XExtensionVersion *
 -_XiGetExtensionVersion(register Display * dpy, _Xconst char *name,
 -                       XExtDisplayInfo *info)
@@ -124,7 +124,7 @@ Index: libxi/src/XGetVers.c
      xGetExtensionVersionReq *req;
      xGetExtensionVersionReply rep;
      XExtensionVersion *ext;
+
 -    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
 -      return ((XExtensionVersion *) NoSuchExtension);
 -
@@ -136,15 +136,15 @@ Index: libxi/src/XGetVers.c
      req->length += (unsigned)(req->nbytes + 3) >> 2;
 @@ -93,6 +89,7 @@
      if (!_XReply(dpy, (xReply *) & rep, 0, xTrue)) {
-       return (XExtensionVersion *) NULL;
+       return (XExtensionVersion *) NULL;
      }
 +
      ext = (XExtensionVersion *) Xmalloc(sizeof(XExtensionVersion));
      if (ext) {
-       ext->present = rep.present;
+       ext->present = rep.present;
 @@ -101,5 +98,16 @@
-           ext->minor_version = rep.minor_version;
-       }
+           ext->minor_version = rep.minor_version;
+       }
      }
 -    return (ext);
 +
@@ -166,9 +166,9 @@ Index: libxi/src/XIint.h
 +++ libxi/src/XIint.h
 @@ -14,6 +14,7 @@
  extern int _XiCheckExtInit(Display *, int, XExtDisplayInfo *);
+
  extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *, XExtDisplayInfo *);
 +extern XExtensionVersion* _XiGetExtensionVersionRequest(Display *dpy, _Xconst char *name, int xi_opcode);
  extern Status _xiQueryVersion(Display *dpy, int*, int*, XExtDisplayInfo *);
+
  extern Status _XiEventToWire(
old mode 100755 (executable)
new mode 100644 (file)
index 25dc7d0..05d197e
@@ -37,7 +37,7 @@ else
 endif
 
 #configure: $(STAMP_DIR)/patch
-configure: 
+configure:
        autoreconf -vfi
 
 obj-$(DEB_BUILD_GNU_TYPE)/config.status: configure
@@ -46,7 +46,7 @@ obj-$(DEB_BUILD_GNU_TYPE)/config.status: configure
        ../configure --prefix=/usr --mandir=\$${prefix}/share/man \
                     --infodir=\$${prefix}/share/info $(confflags) \
                     CFLAGS="$(CFLAGS)" \
-                    LDFLAGS="$(LDFLAGS)" 
+                    LDFLAGS="$(LDFLAGS)"
 
 
 build: build-stamp
diff --git a/doc/Makefile.am b/doc/Makefile.am
deleted file mode 100755 (executable)
index 651b114..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#
-# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
-#
-
-if ENABLE_SPECS
-
-specdir = $(docdir)/$(subdir)
-doc_sources = porting.xml
-dist_spec_DATA = $(doc_sources)
-
-if HAVE_XMLTO
-spec_DATA = $(doc_sources:.xml=.html)
-
-if HAVE_FOP
-spec_DATA += $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf)
-endif
-
-if HAVE_XMLTO_TEXT
-spec_DATA += $(doc_sources:.xml=.txt)
-endif
-
-if HAVE_STYLESHEETS
-XMLTO_FLAGS = -m $(XSL_STYLESHEET)
-
-spec_DATA += xorg.css
-xorg.css: $(STYLESHEET_SRCDIR)/xorg.css
-       $(AM_V_GEN)cp -pf $(STYLESHEET_SRCDIR)/xorg.css $@
-endif
-
-CLEANFILES = $(spec_DATA)
-
-SUFFIXES = .xml .ps .pdf .txt .html
-
-%.txt: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $<
-
-%.html: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $<
-
-%.pdf: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $<
-
-%.ps: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $<
-
-endif HAVE_XMLTO
-endif ENABLE_SPECS
diff --git a/doc/porting.xml b/doc/porting.xml
deleted file mode 100755 (executable)
index 1b2f1d7..0000000
+++ /dev/null
@@ -1,1209 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
-                   "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd">
-
-
-<!-- lifted from troff+ms+XMan by doclifter -->
-<book id="porting">
-
-<bookinfo>
-   <title>X11 Input Extension Porting Document</title>
-   <releaseinfo>X Version 11, Release 6.7</releaseinfo>
-   <authorgroup>
-      <author>
-         <firstname>George</firstname><surname>Sachs</surname>
-         <affiliation><orgname>Hewlett-Packard</orgname></affiliation>
-      </author>
-   </authorgroup>
-   <corpname>X Consortium Standard</corpname>
-   <copyright><year>1989</year><holder>Hewlett-Packard Company</holder></copyright>
-   <copyright><year>1990</year><holder>Hewlett-Packard Company</holder></copyright>
-   <copyright><year>1991</year><holder>Hewlett-Packard Company</holder></copyright>
-
-   <copyright><year>1989</year><holder>X Consortium</holder></copyright>
-   <copyright><year>1990</year><holder>X Consortium</holder></copyright>
-   <copyright><year>1991</year><holder>X Consortium</holder></copyright>
-   <affiliation><orgname>X Consortium</orgname></affiliation>
-   <productnumber>X Version 11, Release 6.7</productnumber>
-
-<legalnotice>
-
-
-<para>
-Permission to use, copy, modify, and distribute this documentation for any purpose and without fee is
-hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
-Hewlett-Packard makes no representations about the suitability for any purpose of the information in this
-document. It is provided "as is" without express or implied warranty. This document is only a draft stan-
-dard of the X Consortium and is therefore subject to change.
-</para>
-
-<para>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &ldquo;Software&rdquo;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</para>
-
-<para>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &ldquo;Software&rdquo;), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:</para>
-
-<para>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</para>
-
-<para>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 X CONSORTIUM 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.</para>
-
-<para>Except as contained in this notice, the name of the X Consortium 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 X Consortium.</para>
-
-<para>X Window System is a trademark of The Open Group.</para>
-</legalnotice>
-
-</bookinfo>
-
-<chapter id="x11_input_extension_porting_document">
-<title>X11 Input Extension Porting Document</title>
-
-<para>
-This document is intended to aid the process of integrating the 
-X11 Input Extension into an X server.
-</para>
-<para>
-<!-- .LP -->
-Most of the functionality provided by the input extension is 
-device- and implementation-independent, and should require no changes.  
-The functionality is implemented by
-routines that typically reside in the server source tree directory 
-extensions/server/xinput.
-This extension includes functions to enable and disable input extension devices,
-select input, grab and focus those device, query and change key 
-and button mappings, and others.  The only input extension requirements 
-for the device-dependent part of X are that the input devices be 
-correctly initialized and input events from those devices be correctly
-generated.  Device-dependent X is responsible for reading input data from 
-the input device hardware and if necessary, reformatting it into X events.
-</para>
-<para>
-<!-- .LP -->
-The process of initializing input extension devices is similar to that used 
-for the core devices, and is described in the following sections.  When
-multiple input devices are attached to X server, the choice of which devices
-to initially use as the core X pointer and keyboard is left 
-implementation-dependent.  It is also up to each implementation to decide
-whether all input devices will be opened by the server during its 
-initialization and kept open for the life of the server.  The alternative is
-to open only the X keyboard and X pointer during server initialization, and
-open other input devices only when requested by a client to do so.  Either
-type of implementation is supported by the input extension.
-</para>
-<para>
-<!-- .LP -->
-Input extension events generated by the X server use the same 32-byte xEvent
-wire event as do core input events.  However, additional information must be
-sent for input extension devices, requiring that multiple xEvents be generated
-each time data is received from an input extension device.  These xEvents are
-combined into a single client XEvent by the input extension library.  A later
-section of this document describes the format and generation of input extension
-events.
-</para>
-<sect1 id="Initializing_Extension_Devices">
-<title>Initializing Extension Devices</title>
-<para>
-<!-- .LP -->
-Extension input devices are initialized in the same manner as the core 
-X input devices.  Device-Independent X provides functions that can be 
-called from DDX to initialize these devices.  Which functions are called
-and when will vary by implementation, and will depend on whether the 
-implementation opens all the input devices available to X when X is initialized,
-or waits until a client requests that a device be opened.
-In the simplest case, DDX will open all input devices as part of its
-initialization, when the InitInput routine is called.
-</para>
-<sect2 id="Summary_of_Calling_Sequence">
-<title>Summary of Calling Sequence</title>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-Device-Independent X       |  Device-Dependent X
---------------------       |  -------------------             
-                           |                                        
-InitInput --------------&gt;  |  - do device-specific initialization
-                           |                                        
-                           |  - call AddInputDevice  (deviceProc,AutoStart)
-AddInputDevice             |   
-  - creates DeviceIntRec   |
-  - records deviceProc     |
-  - adds new device to     | 
-    list of off_devices.   |
-sets dev-&gt;startup=AutoStart|           
-                           |  - call one of:                       
-                           |    - RegisterPointerDevice (X pointer)
-                           |      - processInputProc = ProcessPointerEvents
-                           |    - RegisterKeyboardDevice (X keyboard)
-                           |      - processInputProc = ProcessKeyboardEvents
-                           |    - RegisterOtherDevice  (extension device)
-                           |      - processInputProc = ProcessOtherEvents
-                           |                                        
-                           |                                        
-InitAndStartDevices -----&gt; |  - calls deviceProc with parameters
-                           |    (DEVICE_INIT, AutoStart)
-sets dev-&gt;inited = return  |
-  value from deviceProc    |    
-                           |                                        
-                           |  - in deviceProc, do one of:                       
-                           |    - call InitPointerDeviceStruct (X pointer)
-                           |    - call InitKeyboardDeviceStruct (X keybd)
-                           |    - init extension device by calling some of:
-                           |      - InitKeyClassDeviceStruct
-                           |      - InitButtonClassDeviceStruct
-                           |      - InitValuatorClassDeviceStruct
-                           |      - InitValuatorAxisStruct
-                           |      - InitFocusClassDeviceStruct
-                           |      - InitProximityClassDeviceStruct
-                           |      - InitKbdFeedbackClassDeviceStruct
-                           |      - InitPtrFeedbackClassDeviceStruct
-                           |      - InitLedFeedbackClassDeviceStruct
-                           |      - InitStringFeedbackClassDeviceStruct
-                           |      - InitIntegerFeedbackClassDeviceStruct
-                           |      - InitBellFeedbackClassDeviceStruct
-                           |    - init device name and type by:
-                           |      - calling MakeAtom with one of the 
-                           |        predefined names
-                           |      - calling AssignTypeAndName
-                           |                                        
-                           |                                        
-for each device added      |                                        
-    by AddInputDevice,     |                                        
-    InitAndStartDevices    |                                        
-    calls EnableDevice if  |  - EnableDevice calls deviceProc with 
-    dev-&gt;startup &amp;         |    (DEVICE_ON, AutoStart)
-    dev-&gt;inited            |  
-                           |                                        
-If deviceProc returns      |  - core devices are now enabled, extension
-    Success, EnableDevice  |    devices are now available to be accessed
-    move the device from   |    through the input extension protocol
-    inputInfo.off_devices  |    requests.                           
-    to inputInfo.devices   |                                        
-</literallayout>
-</para>
-</sect2>
-<sect2 id="Initialization_Called_From_InitInput">
-<title>Initialization Called From InitInput</title>
-<para>
-<!-- .LP -->
-InitInput is the first DDX input entry point called during X server startup.
-This routine is responsible for
-device- and implementation- specific initialization, and for calling
-AddInputDevice to create and initialize the DeviceIntRec structure for each
-input device.  AddInputDevice is passed the address of a procedure to be called
-by the DIX routine InitAndStartDevices when input devices are enabled.
-This procedure is expected to perform X initialization for the input device.
-</para>
-<para>
-<!-- .LP -->
-If the device is to be used as the X pointer, DDX should then call
-RegisterPointerDevice, passing the DeviceIntRec pointer,
-to initialize the device as the X pointer.
-</para>
-<para>
-<!-- .LP -->
-If the device is to be used as the X keyboard, DDX should instead call
-RegisterKeyboardDevice to initialize the device as the X keyboard.
-</para>
-<para>
-<!-- .LP -->
-If the device is to be used as an extension device, DDX should instead
-call RegisterOtherDevice, passing the DeviceIntPtr returned by
-AddInputDevice.
-</para>
-<para>
-<!-- .LP -->
-A sample InitInput implementation is shown below.
-</para>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-InitInput(argc,argv)
-    {
-    int i, numdevs, ReadInput();
-    DeviceIntPtr dev;
-    LocalDevice localdevs[LOCAL_MAX_DEVS];
-    DeviceProc kbdproc, ptrproc, extproc;
-
-    /**************************************************************
-     * Open the appropriate input devices, determine which are 
-     * available, and choose an X pointer and X keyboard device
-     * in some implementation-dependent manner.
-     ***************************************************************/
-
-    open_input_devices (&amp;numdevs, localdevs);
-
-    /**************************************************************
-     * Register a WakeupHandler to handle input when it is generated.
-     ***************************************************************/
-
-    RegisterBlockAndWakeupHandlers (NoopDDA, ReadInput, NULL);
-
-    /**************************************************************
-     * Register the input devices with DIX.
-     ***************************************************************/
-
-    for (i=0; i&lt;numdevs; i++)
-        {
-        if (localdevs[i].use == IsXKeyboard)
-            {
-            dev = AddInputDevice (kbdproc, TRUE);
-            RegisterKeyboardDevice (dev);
-            }
-        else if (localdevs[i].use == IsXPointer)
-            {
-            dev = AddInputDevice (ptrproc, TRUE);
-            RegisterPointerDevice (dev);
-            }
-        else 
-            {
-            dev = AddInputDevice (extproc, FALSE);
-            RegisterOtherDevice (dev);
-            }
-        if (dev == NULL)
-            FatalError ("Too many input devices.");
-        dev-&gt;devicePrivate = (pointer) &amp;localdevs[i];
-        }
-</literallayout>
-</para>
-</sect2>
-<sect2 id="Initialization_Called_From_InitAndStartDevices">
-<title>Initialization Called From InitAndStartDevices</title>
-<para>
-<!-- .LP -->
-After InitInput has returned,
-InitAndStartDevices is the DIX routine that is called to enable input devices. 
-It calls the device control routine that was passed to AddInputDevice,
-with a mode value of DEVICE_INIT.  The action taken by the device control
-routine depends on how the device is to be used.  If the device is to be
-the X pointer, the device control routine should call
-InitPointerDeviceStruct to initialize it.  If the device is to be the
-X keyboard, the device control routine should call
-InitKeyboardDeviceStruct.  Since input extension devices may support various
-combinations of keys, buttons, valuators, and feedbacks,
-each class of input that it supports must be initialized.
-Entry points are defined by DIX to initialize each of the supported classes of
-input, and are described in the following sections.
-</para>
-<para>
-<!-- .LP -->
-A sample device control routine called from InitAndStartDevices is 
-shown below.
-</para>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-Bool extproc (dev, mode)
-    DeviceIntPtr dev;
-    int mode;
-    {
-    LocalDevice *localdev = (LocalDevice *) dev-&gt;devicePrivate;
-
-    switch (mode)
-        {
-        case DEVICE_INIT:
-            if (strcmp(localdev-&gt;name, XI_TABLET) == 0)
-                {
-                /****************************************************
-                 * This device reports proximity, has buttons,
-                 * reports two axes of motion, and can be focused.
-                 * It also supports the same feedbacks as the X pointer
-                 * (acceleration and threshold can be set).
-                 ****************************************************/
-
-                InitButtonClassDeviceStruct (dev, button_count, button_map);
-                InitValuatorClassDeviceStruct (dev, localdev-&gt;n_axes,);
-                    motionproc, MOTION_BUF_SIZE, Absolute);
-                for (i=0; i&lt;localdev-&gt;n_axes; i++)
-                    InitValuatorAxisStruct (dev, i, min_val, max_val, 
-                        resolution);
-                InitFocusClassDeviceStruct (dev);
-                InitProximityClassDeviceStruct (dev);
-                InitPtrFeedbackClassDeviceStruct (dev, p_controlproc);
-                }
-            else if (strcmp(localdev-&gt;name, XI_BUTTONBOX) == 0)
-                {
-                /****************************************************
-                 * This device has keys and LEDs, and can be focused.
-                 ****************************************************/
-
-                InitKeyClassDeviceStruct (dev, syms, modmap);
-                InitFocusClassDeviceStruct (dev);
-                InitLedFeedbackClassDeviceStruct (dev, ledcontrol);
-                }
-            else if (strcmp(localdev-&gt;name, XI_KNOBBOX) == 0)
-                {
-                /****************************************************
-                 * This device reports motion.
-                 * It can be focused.
-                 ****************************************************/
-
-                InitValuatorClassDeviceStruct (dev, localdev-&gt;n_axes,);
-                    motionproc, MOTION_BUF_SIZE, Absolute);
-                for (i=0; i&lt;localdev-&gt;n_axes; i++)
-                    InitValuatorAxisStruct (dev, i, min_val, max_val, 
-                        resolution);
-                InitFocusClassDeviceStruct (dev);
-                }
-            localdev-&gt;atom = 
-                MakeAtom(localdev-&gt;name, strlen(localdev-&gt;name), FALSE);
-            AssignTypeAndName (dev, localdev-&gt;atom, localdev-&gt;name);
-            break;
-        case DEVICE_ON:
-            AddEnabledDevice (localdev-&gt;file_ds);
-            dev-&gt;on = TRUE;
-            break;
-        case DEVICE_OFF:
-            dev-&gt;on = FALSE;
-            RemoveEnabledDevice (localdev-&gt;file_ds);
-            break;
-        case DEVICE_CLOSE:
-            break;
-        }
-    }
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-The device control routine is called with a mode value of DEVICE_ON
-by the DIX routine EnableDevice, which is called from InitAndStartDevices.  
-When called with this mode, it should call AddEnabledDevice to cause the 
-server to begin checking for available input from this device.
-</para>
-<para>
-<!-- .LP -->
-&gt;From InitAndStartDevices, EnableDevice is called for all devices that have
-the "inited" and "startup" fields in the DeviceIntRec set to TRUE.  The
-"inited" field is set by InitAndStartDevices to the value returned by
-the deviceproc when called with a mode value of DEVICE_INIT.  The "startup"
-field is set by AddInputDevice to value of the second parameter (autoStart).
-</para>
-<para>
-<!-- .LP -->
-When the server is first initialized, it should only be checking for input
-from the core X keyboard and pointer.  One way to accomplish this is to
-call AddInputDevice for the core X keyboard and pointer with an
-autoStart value equal to TRUE, while calling AddInputDevice for 
-input extension devices with an autoStart value equal to FALSE.  If this is 
-done, EnableDevice will skip all input extension devices during server
-initialization.  In this case,
-the OpenInputDevice routine should set the "startup" field to TRUE
-when called for input extension devices.  This will cause ProcXOpenInputDevice
-to call EnableDevice for those devices when a client first does an
-XOpenDevice request.
-</para>
-</sect2>
-<sect2 id="DIX_Input_Class_Initialization_Routines">
-<title>DIX Input Class Initialization Routines</title>
-<para>
-<!-- .LP -->
-DIX routines are defined to initialize each of the defined input classes.
-The defined classes are:
-<!-- .RS -->
-<!-- .in +5n -->
-</para>
-<itemizedlist>
-  <listitem>
-    <para>
-KeyClass - the device has keys.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-ButtonClass - the device has buttons.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-ValuatorClass - the device reports motion data or positional data.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-Proximitylass - the device reports proximity information.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-FocusClass - the device can be focused.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-FeedbackClass - the device supports some kind of feedback
-<!-- .in -5n -->
-<!-- .RE -->
-    </para>
-  </listitem>
-</itemizedlist>
-<para>
-<!-- .LP -->
-DIX routines are provided to initialize the X pointer and keyboard, as in
-previous releases of X.  During X initialization, InitPointerDeviceStruct 
-is called to initialize the X pointer, and InitKeyboardDeviceStruct is
-called to initialize the X keyboard.  There is no
-corresponding routine for extension input devices, since they do not all
-support the same classes of input.  Instead, DDX is responsible for the 
-initialization of the input classes supported by extension devices.  
-A description of the routines provided by DIX to perform that initialization
-follows.
-</para>
-<sect3 id="InitKeyClassDeviceStruct">
-<title>InitKeyClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a KeyClassRec, and 
-should be called for extension devices that have keys.  It is passed a pointer
-to the device, and pointers to arrays of keysyms and modifiers reported by
-the device.  It returns FALSE if the KeyClassRec could not be allocated,
-or if the maps for the keysyms and and modifiers could not be allocated.
-Its parameters are:
-</para>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-Bool
-InitKeyClassDeviceStruct(dev, pKeySyms, pModifiers)
-    DeviceIntPtr dev;
-    KeySymsPtr pKeySyms;
-    CARD8 pModifiers[];
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-The DIX entry point InitKeyboardDeviceStruct calls this routine for the
-core X keyboard.  It must be called explicitly for extension devices
-that have keys.
-</para>
-</sect3>
-<sect3 id="InitButtonClassDeviceStruct">
-<title>InitButtonClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a ButtonClassRec, and 
-should be called for extension devices that have buttons.  It is passed a 
-pointer to the device, the number of buttons supported, and a map of the 
-reported button codes.  It returns FALSE if the ButtonClassRec could not be 
-allocated.  Its parameters are:
-</para>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-Bool
-InitButtonClassDeviceStruct(dev, numButtons, map)
-    register DeviceIntPtr dev;
-    int numButtons;
-    CARD8 *map;
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-The DIX entry point InitPointerDeviceStruct calls this routine for the
-core X pointer.  It must be called explicitly for extension devices that
-have buttons.
-</para>
-</sect3>
-<sect3 id="InitValuatorClassDeviceStruct">
-<title>InitValuatorClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a ValuatorClassRec, and 
-should be called for extension devices that have valuators.  It is passed the
-number of axes of motion reported by the device, the address of the motion
-history procedure for the device, the size of the motion history buffer,
-and the mode (Absolute or Relative) of the device.  It returns FALSE if 
-the ValuatorClassRec could not be allocated.  Its parameters are:
-</para>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-Bool
-InitValuatorClassDeviceStruct(dev, numAxes, motionProc, numMotionEvents, mode)
-    DeviceIntPtr dev;
-    int (*motionProc)();
-    int numAxes;
-    int numMotionEvents;
-    int mode;
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-The DIX entry point InitPointerDeviceStruct calls this routine for the
-core X pointer.  It must be called explicitly for extension devices that
-report motion.
-</para>
-</sect3>
-<sect3 id="InitValuatorAxisStruct">
-<title>InitValuatorAxisStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to initialize an XAxisInfoRec, and 
-should be called for core and extension devices that have valuators.  
-The space for the XAxisInfoRec is allocated by 
-the InitValuatorClassDeviceStruct function, but is not initialized.
-</para>
-<para>
-<!-- .LP -->
-InitValuatorAxisStruct should be called once for each axis of motion 
-reported by the device.  Each
-invocation should be passed the axis number (starting with 0), the
-minimum value for that axis, the maximum value for that axis, and the
-resolution of the device in counts per meter.  If the device reports
-relative motion, 0 should be reported as the minimum and maximum values.
-InitValuatorAxisStruct has the following parameters:
-<literallayout class="monospaced">
-InitValuatorAxisStruct(dev, axnum, minval, maxval, resolution)
-    DeviceIntPtr dev;
-    int axnum;
-    int minval;
-    int maxval;
-    int resolution;
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-This routine is not called by InitPointerDeviceStruct for the
-core X pointer.  It must be called explicitly for core and extension devices 
-that report motion.
-</para>
-</sect3>
-<sect3 id="InitFocusClassDeviceStruct">
-<title>InitFocusClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a FocusClassRec, and 
-should be called for extension devices that can be focused.  It is passed a
-pointer to the device, and returns FALSE if the allocation fails.
-It has the following parameter:
-<literallayout class="monospaced">
-Bool
-InitFocusClassDeviceStruct(dev)
-    DeviceIntPtr dev;
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-The DIX entry point InitKeyboardDeviceStruct calls this routine for the
-core X keyboard.  It must be called explicitly for extension devices
-that can be focused.  Whether or not a particular device can be focused
-is left implementation-dependent.
-</para>
-</sect3>
-<sect3 id="InitProximityClassDeviceStruct">
-<title>InitProximityClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a ProximityClassRec, and 
-should be called for extension absolute pointing devices that report proximity.
-It is passed a pointer to the device, and returns FALSE if the allocation fails.
-It has the following parameter:
-<literallayout class="monospaced">
-Bool
-InitProximityClassDeviceStruct(dev)
-    DeviceIntPtr dev;
-</literallayout>
-</para>
-</sect3>
-<sect3 id="Initializing_Feedbacks">
-<title>Initializing Feedbacks</title>
-<para>
-<!-- .LP -->
-</para>
-<sect4 id="InitKbdFeedbackClassDeviceStruct">
-<title>InitKbdFeedbackClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a KbdFeedbackClassRec, and 
-may be called for extension devices that support some or all of the 
-feedbacks that the core keyboard supports.  It is passed a
-pointer to the device, a pointer to the procedure that sounds the bell,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-<literallayout class="monospaced">
-Bool
-InitKbdFeedbackClassDeviceStruct(dev, bellProc, controlProc)
-    DeviceIntPtr dev;
-    void (*bellProc)();
-    void (*controlProc)();
-</literallayout>
-The DIX entry point InitKeyboardDeviceStruct calls this routine for the
-core X keyboard.  It must be called explicitly for extension devices
-that have the same feedbacks as a keyboard.  Some feedbacks, such as LEDs and
-bell, can be supported either with a KbdFeedbackClass or with BellFeedbackClass
-and LedFeedbackClass feedbacks.
-</para>
-</sect4>
-<sect4 id="InitPtrFeedbackClassDeviceStruct">
-<title>InitPtrFeedbackClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a PtrFeedbackClassRec, and 
-should be called for extension devices that allow the setting of acceleration
-and threshold.  It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-<literallayout class="monospaced">
-Bool
-InitPtrFeedbackClassDeviceStruct(dev, controlProc)
-    DeviceIntPtr dev;
-    void (*controlProc)();
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-The DIX entry point InitPointerDeviceStruct calls this routine for the
-core X pointer.  It must be called explicitly for extension devices
-that support the setting of acceleration and threshold.
-</para>
-</sect4>
-<sect4 id="InitLedFeedbackClassDeviceStruct">
-<title>InitLedFeedbackClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a LedFeedbackClassRec, and 
-should be called for extension devices that have LEDs.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-<literallayout class="monospaced">
-Bool
-InitLedFeedbackClassDeviceStruct(dev, controlProc)
-    DeviceIntPtr dev;
-    void (*controlProc)();
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-Up to 32 LEDs per feedback can be supported, and a device may have 
-multiple feedbacks of the same type.
-</para>
-</sect4>
-<sect4 id="InitBellFeedbackClassDeviceStruct">
-<title>InitBellFeedbackClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a BellFeedbackClassRec, 
-and should be called for extension devices that have a bell.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-<literallayout class="monospaced">
-Bool
-InitBellFeedbackClassDeviceStruct(dev, bellProc, controlProc)
-    DeviceIntPtr dev;
-    void (*bellProc)();
-    void (*controlProc)();
-</literallayout>
-</para>
-</sect4>
-<sect4 id="InitStringFeedbackClassDeviceStruct">
-<title>InitStringFeedbackClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize a StringFeedbackClassRec, 
-and should be called for extension devices that have a display upon which a 
-string can be displayed.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-<literallayout class="monospaced">
-Bool
-InitStringFeedbackClassDeviceStruct(dev, controlProc, max_symbols, 
-       num_symbols_supported, symbols)
-    DeviceIntPtr dev;
-    void (*controlProc)();
-    int max_symbols:
-    int num_symbols_supported;
-    KeySym *symbols;
-</literallayout>
-</para>
-</sect4>
-<sect4 id="InitIntegerFeedbackClassDeviceStruct">
-<title>InitIntegerFeedbackClassDeviceStruct</title>
-<para>
-<!-- .LP -->
-This function is provided to allocate and initialize an 
-IntegerFeedbackClassRec, 
-and should be called for extension devices that have a display upon which an
-integer can be displayed.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-<literallayout class="monospaced">
-Bool
-InitIntegerFeedbackClassDeviceStruct(dev, controlProc)
-    DeviceIntPtr dev;
-    void (*controlProc)();
-</literallayout>
-</para>
-</sect4>
-</sect3>
-</sect2>
-<sect2 id="Initializing_The_Device_Name_And_Type">
-<title>Initializing The Device Name And Type</title>
-<para>
-<!-- .LP -->
-The device name and type can be initialized by calling AssignTypeAndName
-with the following parameters:
-<literallayout class="monospaced">
-void
-AssignTypeAndName(dev, type, name)
-    DeviceIntPtr dev;
-    Atom type;
-    char *name;
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-This will allocate space for the device name and copy the name that was passed.
-The device type can be obtained by calling MakeAtom with one of the names
-defined for input devices.  MakeAtom has the following parameters:
-<literallayout class="monospaced">
-Atom
-MakeAtom(name, len, makeit)
-    char *name;
-    int len;
-    Bool makeit;
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-Since the atom was already made when the input extension was initialized, the
-value of makeit should be FALSE;
-</para>
-</sect2>
-</sect1>
-<sect1 id="Closing_Extension_Devices">
-<title>Closing Extension Devices</title>
-<para>
-<!-- .LP -->
-The DisableDevice entry point is provided by DIX to disable input devices.
-It calls the device control routine for the specified
-device with a mode value of DEVICE_OFF.  The device control routine should
-call RemoveEnabledDevice to stop the server from checking for input from
-that device.
-</para>
-<para>
-<!-- .LP -->
-DisableDevice is not called by any input extension routines.  It can be 
-called from the CloseInputDevice routine, which is called by
-ProcXCloseDevice when a client makes an XCloseDevice request.  If
-DisableDevice is called, it should only be called when the last client
-using the extension device has terminated or called XCloseDevice.
-</para>
-</sect1>
-<sect1 id="Implementation_Dependent_Routines">
-<title>Implementation-Dependent Routines</title>
-<para>
-<!-- .LP -->
-Several input extension protocol requests have 
-implementation-dependent  entry points.  Default routines
-are defined for these entry points and contained in the source
-file extensions/server/xinput/xstubs.c.  Some implementations may
-be able to use the default routines without change.
-The following sections describe each of these routines.
-</para>
-<sect2 id="AddOtherInputDevices">
-<title>AddOtherInputDevices</title>
-<para>
-<!-- .LP -->
-AddOtherInputDevice is called from ProcXListInputDevices as a result of 
-an XListInputDevices protocol request.  It may be needed by
-implementations that do not open extension input devices until requested
-to do so by some client.  These implementations may not initialize
-all devices when the X server starts up, because some of those devices
-may be in use.  Since the XListInputDevices
-function only lists those devices that have been initialized,
-AddOtherInputDevices is called to give DDX a chance to 
-initialize any previously unavailable input devices.
-</para>
-<para>
-<!-- .LP -->
-A sample AddOtherInputDevices routine might look like the following:
-<literallayout class="monospaced">
-void
-AddOtherInputDevices ()
-    {
-    DeviceIntPtr dev;
-    int i;
-
-    for (i=0; i&lt;MAX_DEVICES; i++) 
-        {
-        if (!local_dev[i].initialized &amp;&amp; available(local_dev[i]))
-            {
-            dev = (DeviceIntPtr) AddInputDevice (local_dev[i].deviceProc, TRUE);
-            dev-&gt;public.devicePrivate = local_dev[i];
-            RegisterOtherDevice (dev);
-            dev-&gt;inited = ((*dev-&gt;deviceProc)(dev, DEVICE_INIT) == Success);
-            }
-        }
-    }
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-The default AddOtherInputDevices routine in xstubs.c does nothing.
-If all input extension devices are initialized when the server 
-starts up, it can be left as a null routine.
-</para>
-</sect2>
-<sect2 id="OpenInputDevice">
-<title>OpenInputDevice</title>
-<para>
-<!-- .LP -->
-Some X server implementations open all input devices when the server
-is initialized and never close them.  Other implementations may open only
-the X pointer and keyboard devices during server initialization,
-and open other input devices only when some client makes an
-XOpenDevice request.  This entry point is for the latter type of 
-implementation.
-</para>
-<para>
-<!-- .LP -->
-If the physical device is not already open, it can be done in this routine.  
-In this case, the server must keep track of the fact that one or more clients 
-have the device open, and physically close it when the last client that has
-it open makes an XCloseDevice request.
-</para>
-<para>
-<!-- .LP -->
-The default implementation is to do nothing (assume all input devices
-are opened during X server initialization and kept open).
-</para>
-</sect2>
-<sect2 id="CloseInputDevice">
-<title>CloseInputDevice</title>
-<para>
-<!-- .LP -->
-Some implementations may close an input device when the last client
-using that device requests that it be closed, or terminates.
-CloseInputDevice is called from ProcXCloseDevice when a client
-makes an XCloseDevice protocol request.
-</para>
-<para>
-<!-- .LP -->
-The default implementation is to do nothing (assume all input devices
-are opened during X server initialization and kept open).
-</para>
-</sect2>
-<sect2 id="SetDeviceMode">
-<title>SetDeviceMode</title>
-<para>
-<!-- .LP -->
-Some implementations support input devices that can report 
-either absolute positional data or relative motion.  The XSetDeviceMode
-protocol request is provided to allow DDX to change the current mode of 
-such a device.
-</para>
-<para>
-<!-- .LP -->
-The default implementation is to always return a BadMatch error.  If the
-implementation does not support any input devices that are capable of 
-reporting both relative motion and absolute position information, the
-default implementation may be left unchanged.
-</para>
-</sect2>
-<sect2 id="SetDeviceValuators">
-<title>SetDeviceValuators</title>
-<para>
-<!-- .LP -->
-Some implementations support input devices that allow their valuators to be 
-set to an initial value.  The XSetDeviceValuators 
-protocol request is provided to allow DDX to set the valuators of
-such a device.
-</para>
-<para>
-<!-- .LP -->
-The default implementation is to always return a BadMatch error.  If the
-implementation does not support any input devices that are allow their
-valuators to be set, the default implementation may be left unchanged.
-</para>
-</sect2>
-<sect2 id="ChangePointerDevice">
-<title>ChangePointerDevice</title>
-<para>
-<!-- .LP -->
-The XChangePointerDevice protocol request is provided to change which device is
-used as the X pointer.  Some implementations may maintain information
-specific to the X pointer in the private data structure pointed to by
-the DeviceIntRec.  ChangePointerDevice is called to allow such 
-implementations to move that information to the new pointer device.
-The current location of the X cursor is an example of the type of 
-information that might be affected.
-</para>
-<para>
-<!-- .LP -->
-The DeviceIntRec structure that describes the X pointer device does not 
-contain a FocusRec.  If the device that has been made into the new X pointer 
-was previously a device that could be focused, ProcXChangePointerDevice will 
-free the FocusRec associated with that device.
-</para>
-<para>
-<!-- .LP -->
-If the server implementation desires to allow clients to focus the old pointer 
-device (which is now accessible through the input extension), it should call
-InitFocusClassDeviceStruct for the old pointer device.
-</para>
-<para>
-<!-- .LP -->
-The XChangePointerDevice protocol request also allows the client
-to choose which axes of the new pointer device are used to move 
-the X cursor in the X- and Y- directions.  If the axes are different
-than the default ones, the server implementation should record that fact.
-</para>
-<para>
-<!-- .LP -->
-If the server implementation supports input devices with valuators that 
-are not allowed to be used as the X pointer, they should be screened out
-by this routine and a  BadDevice error returned.
-</para>
-<para>
-<!-- .LP -->
-The default implementation is to do nothing. 
-</para>
-</sect2>
-<sect2 id="ChangeKeyboardDevice">
-<title>ChangeKeyboardDevice</title>
-<para>
-<!-- .LP -->
-The XChangeKeyboardDevice protocol request is provided to change which device is
-used as the X keyboard.  Some implementations may maintain information
-specific to the X keyboard in the private data structure pointed to by
-the DeviceIntRec.  ChangeKeyboardDevice is called to allow such 
-implementations to move that information to the new keyboard device.
-</para>
-<para>
-<!-- .LP -->
-The X keyboard device can be focused, and the DeviceIntRec that describes
-that device has a FocusRec.  If the device that has been made into the new X 
-keyboard did not previously have a FocusRec, 
-ProcXChangeKeyboardDevice will allocate one for it.
-</para>
-<para>
-<!-- .LP -->
-If the implementation does not want clients to be able to focus the old X 
-keyboard (which has now become available as an input extension device)
-it should call DeleteFocusClassDeviceStruct to free the FocusRec.
-</para>
-<para>
-<!-- .LP -->
-If the implementation supports input devices with keys that are not allowed
-to be used as the X keyboard, they should be checked for here, and a
-BadDevice error returned.
-</para>
-<para>
-<!-- .LP -->
-The default implementation is to do nothing. 
-</para>
-</sect2>
-</sect1>
-<sect1 id="Input_Extension_Events">
-<title>Input Extension Events</title>
-<para>
-<!-- .LP -->
-Events accessed through the input extension are analogous to the core input
-events, but have different event types.  They are of types 
-<function>DeviceKeyPress</function>, <function>DeviceKeyRelease</function>, <function>DeviceButtonPress</function>,
-<function>DeviceButtonRelease</function>, <function>DeviceDeviceMotionNotify</function>,
-<function>DeviceProximityIn</function>, <function>DeviceProximityOut</function>, and <function>DeviceValuator</function>.
-These event types are not constants.  Instead, they are external integers 
-defined by the input extension.  Their actual values will depend on which
-extensions are supported by a server, and the order in which they are
-initialized.
-</para>
-<para>
-<!-- .LP -->
-The data structures that define these
-events are defined in the file <function>extensions/include/XIproto.h</function>.  Other
-input extension constants needed by DDX are defined in the file
-<function>extensions/include/XI.h</function>.
-</para>
-<para>
-<!-- .LP -->
-Some events defined by the input extension contain more information than can
-be contained in the 32-byte xEvent data structure.  To send this information
-to clients, DDX must generate two or more 32-byte wire events.  The following
-sections describe the contents of these events. 
-</para>
-<sect2 id="Device_Key_Events">
-<title>Device Key Events</title>
-<para>
-<!-- .LP -->
-<function>DeviceKeyPresss</function> events contain all the information that is contained in
-a core <function>KeyPress</function> event, and also the following additional information:
-</para>
-<para>
-<!-- .LP -->
-<!-- .RS -->
-<!-- .in +5n -->
-</para>
-<itemizedlist>
-  <listitem>
-    <para>
-deviceid - the identifier of the device that generated the event.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-device_state - the state of any modifiers on the device that generated the event
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-num_valuators - the number of valuators reported in this event.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-first_valuator - the first valuator reported in this event.
-    </para>
-  </listitem>
-  <listitem>
-    <para>
-valuator0 through valuator5 - the values of the valuators.
-<!-- .in -5n -->
-<!-- .RE -->
-    </para>
-  </listitem>
-</itemizedlist>
-<para>
-<!-- .LP -->
-In order to pass this information to the input extension library, two 32-byte
-wire events must be generated by DDX.  The first has an event type of 
-<function>DeviceKeyPress</function>, and the second has an event type of \fPDeviceValuator\fP.
-</para>
-<para>
-<!-- .LP -->
-The following code fragment shows how the two wire events could be initialized:
-</para>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-    extern int DeviceKeyPress;
-    DeviceIntPtr dev;
-    xEvent xE[2];
-    CARD8 id, num_valuators;
-    INT16 x, y, pointerx, pointery;
-    Time timestamp;
-    deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *) xE;
-    deviceValuator *xv;
-
-    xev-&gt;type = DeviceKeyPress;                /* defined by input extension */
-    xev-&gt;detail = keycode;              /* key pressed on this device */
-    xev-&gt;time = timestamp;              /* same as for core events    */
-    xev-&gt;rootX = pointerx;              /* x location of core pointer */
-    xev-&gt;rootY = pointery;              /* y location of core pointer */
-
-    /******************************************************************/
-    /*                                                                */
-    /* The following field does not exist for core input events.      */
-    /* It contains the device id for the device that generated the    */
-    /* event, and also indicates whether more than one 32-byte wire   */
-    /* event is being sent.                                           */
-    /*                                                                */
-    /******************************************************************/
-
-    xev-&gt;deviceid = dev-&gt;id | MORE_EVENTS;        /* sending more than 1*/
-
-    /******************************************************************/
-    /* Fields in the second 32-byte wire event:                       */
-    /******************************************************************/
-
-    xv = (deviceValuator *) ++xev;
-    xv-&gt;type = DeviceValuator;          /* event type of second event */
-    xv-&gt;deviceid = dev-&gt;id;             /* id of this device          */
-    xv-&gt;num_valuators = 0;              /* no valuators being sent    */
-    xv-&gt;device_state  = 0;              /* will be filled in by DIX   */
-</literallayout>
-</para>
-</sect2>
-<sect2 id="Device_Button_Events">
-<title>Device Button Events</title>
-<para>
-<!-- .LP -->
-<function>DeviceButton</function> events contain all the information that is contained in
-a core button event, and also the same additional information that a 
-<function>DeviceKey</function> event contains.
-</para>
-</sect2>
-<sect2 id="Device_Motion_Events">
-<title>Device Motion Events</title>
-<para>
-<!-- .LP -->
-<function>DeviceMotion</function> events contain all the information that is contained in
-a core motion event, and also additional valuator information.  At least
-two wire events are required to contain this information.
-The following code fragment shows how the two wire events could be initialized:
-</para>
-<para>
-<!-- .LP -->
-<literallayout class="monospaced">
-    extern int DeviceMotionNotify;
-    DeviceIntPtr dev;
-    xEvent xE[2];
-    CARD8 id, num_valuators;
-    INT16 x, y, pointerx, pointery;
-    Time timestamp;
-    deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *) xE;
-    deviceValuator *xv;
-
-    xev-&gt;type = DeviceMotionNotify;     /* defined by input extension */
-    xev-&gt;detail = keycode;              /* key pressed on this device */
-    xev-&gt;time = timestamp;              /* same as for core events    */
-    xev-&gt;rootX = pointerx;              /* x location of core pointer */
-    xev-&gt;rootY = pointery;              /* y location of core pointer */
-
-    /******************************************************************/
-    /*                                                                */
-    /* The following field does not exist for core input events.      */
-    /* It contains the device id for the device that generated the    */
-    /* event, and also indicates whether more than one 32-byte wire   */
-    /* event is being sent.                                           */
-    /*                                                                */
-    /******************************************************************/
-
-    xev-&gt;deviceid = dev-&gt;id | MORE_EVENTS;        /* sending more than 1*/
-
-    /******************************************************************/
-    /* Fields in the second 32-byte wire event:                       */
-    /******************************************************************/
-
-    xv = (deviceValuator *) ++xev;
-    xv-&gt;type = DeviceValuator;          /* event type of second event */
-    xv-&gt;deviceid = dev-&gt;id;             /* id of this device          */
-    xv-&gt;num_valuators = 2;              /* 2 valuators being sent     */
-    xv-&gt;first_valuator = 0;             /* first valuator being sent  */
-    xv-&gt;device_state  = 0;              /* will be filled in by DIX   */
-    xv-&gt;valuator0 = x;                  /* first axis of this device  */
-    xv-&gt;valuator1 = y;                  /* second axis of this device */
-</literallayout>
-</para>
-<para>
-<!-- .LP -->
-Up to six axes can be reported in the deviceValuator event.  If the device
-is reporting more than 6 axes, additional pairs of DeviceMotionNotify and
-DeviceValuator events should be sent,  with the first_valuator field
-set correctly.
-</para>
-</sect2>
-<sect2 id="Device_Proximity_Events">
-<title>Device Proximity Events</title>
-<para>
-<!-- .LP -->
-Some input devices that report absolute positional information, such as 
-graphics tablets and touchscreens, may report proximity events.  
-<function>ProximityIn</function>
-events are generated when a pointing device like a stylus, or in the case
-of a touchscreen, the user's finger, comes into close proximity with the
-surface of the input device.  <function>ProximityOut</function> events are generated when
-the stylus or finger leaves the proximity of the input devices surface.
-</para>
-<para>
-<!-- .LP -->
-<function>Proximity</function> events contain almost the same information as button events.
-The event type is <function>ProximityIn</function> or <function>ProximityOut</function>, and there is no
-detail information.
-<!-- .bp -->
-<!-- .\" .TC -->
-
-</para>
-</sect2>
-</sect1>
-</chapter>
-</book>
diff --git a/docbook.am b/docbook.am
new file mode 100644 (file)
index 0000000..bba4d54
--- /dev/null
@@ -0,0 +1,105 @@
+#
+# Generate output formats for a single DocBook/XML with/without chapters
+#
+# Variables set by the calling Makefile:
+# shelfdir: the location where the docs/specs are installed. Typically $(docdir)
+# docbook:  the main DocBook/XML file, no chapters, appendix or image files
+# chapters: all files pulled in by an XInclude statement and images.
+#
+
+#
+# This makefile is intended for Users Documentation and Functional Specifications.
+# Do not use for Developer Documentation which is not installed and does not require olink.
+# Refer to http://www.x.org/releases/X11R7.6/doc/xorg-docs/ReleaseNotes.html#id2584393
+# for an explanation on documents classification.
+#
+
+# DocBook/XML generated output formats to be installed
+shelf_DATA =
+
+# DocBook/XML file with chapters, appendix and images it includes
+dist_shelf_DATA = $(docbook) $(chapters)
+
+if HAVE_XMLTO
+if HAVE_STYLESHEETS
+
+XMLTO_SEARCHPATH_FLAGS =                               \
+       --searchpath "$(XORG_SGML_PATH)/X11"            \
+       --searchpath "$(abs_top_builddir)"
+XMLTO_HTML_OLINK_FLAGS = \
+       --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.html.xml \
+       --stringparam current.docid="$(<:.xml=)"
+XMLTO_HTML_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl
+XMLTO_HTML_FLAGS =                                     \
+       $(XMLTO_SEARCHPATH_FLAGS)                       \
+       $(XMLTO_HTML_STYLESHEET_FLAGS)                  \
+       $(XMLTO_HTML_OLINK_FLAGS)
+
+shelf_DATA += $(docbook:.xml=.html)
+%.html: %.xml $(chapters)
+       $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) xhtml-nochunks $<
+
+if HAVE_XMLTO_TEXT
+
+shelf_DATA += $(docbook:.xml=.txt)
+%.txt: %.xml $(chapters)
+       $(AM_V_GEN)$(XMLTO) $(XMLTO_HTML_FLAGS) txt $<
+endif HAVE_XMLTO_TEXT
+
+if HAVE_FOP
+XMLTO_FO_IMAGEPATH_FLAGS = --stringparam img.src.path=$(abs_builddir)/
+XMLTO_PDF_OLINK_FLAGS = \
+       --stringparam target.database.document=$(XORG_SGML_PATH)/X11/dbs/masterdb.pdf.xml \
+       --stringparam current.docid="$(<:.xml=)"
+XMLTO_FO_STYLESHEET_FLAGS = -x $(STYLESHEET_SRCDIR)/xorg-fo.xsl
+
+XMLTO_FO_FLAGS =                                       \
+       $(XMLTO_SEARCHPATH_FLAGS)                       \
+       $(XMLTO_FO_STYLESHEET_FLAGS)                    \
+       $(XMLTO_FO_IMAGEPATH_FLAGS)                     \
+       $(XMLTO_PDF_OLINK_FLAGS)
+
+shelf_DATA += $(docbook:.xml=.pdf)
+%.pdf: %.xml $(chapters)
+       $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop pdf $<
+
+shelf_DATA += $(docbook:.xml=.ps)
+%.ps: %.xml $(chapters)
+       $(AM_V_GEN)$(XMLTO) $(XMLTO_FO_FLAGS) --with-fop ps $<
+endif HAVE_FOP
+
+# Generate documents cross-reference target databases
+if HAVE_XSLTPROC
+
+XSLT_SEARCHPATH_FLAGS =                                \
+       --path "$(XORG_SGML_PATH)/X11"                  \
+       --path "$(abs_top_builddir)"
+XSLT_OLINK_FLAGS =                                     \
+       --stringparam targets.filename "$@"             \
+       --stringparam collect.xref.targets "only"       \
+       --stringparam olink.base.uri "$(@:.db=)"
+
+XSLT_HTML_FLAGS =                                      \
+       $(XSLT_SEARCHPATH_FLAGS)                        \
+       $(XSLT_OLINK_FLAGS)                             \
+       --nonet --xinclude                              \
+       $(STYLESHEET_SRCDIR)/xorg-xhtml.xsl
+XSLT_PDF_FLAGS =                                       \
+       $(XSLT_SEARCHPATH_FLAGS)                        \
+       $(XSLT_OLINK_FLAGS)                             \
+       --nonet --xinclude                              \
+       $(STYLESHEET_SRCDIR)/xorg-fo.xsl
+
+shelf_DATA += $(docbook:.xml=.html.db)
+%.html.db: %.xml  $(chapters)
+       $(AM_V_GEN)$(XSLTPROC) $(XSLT_HTML_FLAGS) $<
+
+shelf_DATA += $(docbook:.xml=.pdf.db)
+%.pdf.db: %.xml $(chapters)
+       $(AM_V_GEN)$(XSLTPROC) $(XSLT_PDF_FLAGS) $<
+
+endif HAVE_XSLTPROC
+endif HAVE_STYLESHEETS
+endif HAVE_XMLTO
+
+CLEANFILES = $(shelf_DATA)
index e6c7b30..26de695 100644 (file)
@@ -133,6 +133,25 @@ typedef struct
     int         mode;
 } XIValuatorClassInfo;
 
+/* new in XI 2.1 */
+typedef struct
+{
+    int         type;
+    int         sourceid;
+    int         number;
+    int         scroll_type;
+    double      increment;
+    int         flags;
+} XIScrollClassInfo;
+
+typedef struct
+{
+    int         type;
+    int         sourceid;
+    int         mode;
+    int         num_touches;
+} XITouchClassInfo;
+
 typedef struct
 {
     int                 deviceid;
@@ -242,7 +261,7 @@ typedef struct {
     int           evtype;       /* XI_RawKeyPress, XI_RawKeyRelease, etc. */
     Time          time;
     int           deviceid;
-    int           sourceid;
+    int           sourceid;     /* Bug: Always 0. https://bugs.freedesktop.org//show_bug.cgi?id=34240 */
     int           detail;
     int           flags;
     XIValuatorState valuators;
@@ -292,6 +311,23 @@ typedef struct {
     int           what;
 } XIPropertyEvent;
 
+typedef struct {
+    int           type;         /* GenericEvent */
+    unsigned long serial;       /* # of last request processed by server */
+    Bool          send_event;   /* true if this came from a SendEvent request */
+    Display       *display;     /* Display the event was read from */
+    int           extension;    /* XI extension offset */
+    int           evtype;
+    Time          time;
+    int           deviceid;
+    int           sourceid;
+    unsigned int  touchid;
+    Window        root;
+    Window        event;
+    Window        child;
+    int           flags;
+} XITouchOwnershipEvent;
+
 _XFUNCPROTOBEGIN
 
 extern Bool     XIQueryPointer(
@@ -415,6 +451,14 @@ extern Status XIAllowEvents(
     Time                time
 );
 
+extern Status XIAllowTouchEvents(
+    Display*            display,
+    int                 deviceid,
+    unsigned int        touchid,
+    Window              grab_window,
+    int                 event_mode
+);
+
 extern int XIGrabButton(
     Display*            display,
     int                 deviceid,
@@ -466,6 +510,17 @@ extern int XIGrabFocusIn(
     int                 num_modifiers,
     XIGrabModifiers     *modifiers_inout
 );
+
+extern int XIGrabTouchBegin(
+    Display*            display,
+    int                 deviceid,
+    Window              grab_window,
+    int                 owner_events,
+    XIEventMask         *mask,
+    int                 num_modifiers,
+    XIGrabModifiers     *modifiers_inout
+);
+
 extern Status XIUngrabButton(
     Display*            display,
     int                 deviceid,
@@ -500,6 +555,13 @@ extern Status XIUngrabFocusIn(
     XIGrabModifiers     *modifiers
 );
 
+extern Status XIUngrabTouchBegin(
+    Display*            display,
+    int                 deviceid,
+    Window              grab_window,
+    int                 num_modifiers,
+    XIGrabModifiers     *modifiers
+);
 
 extern Atom *XIListProperties(
     Display*            display,
old mode 100755 (executable)
new mode 100644 (file)
index c8db111..28211a1
@@ -155,6 +155,13 @@ XIFreeDeviceInfo.man: XIQueryDevice.man
 # Unable to use __libmansuffix__ as underscores are lost in txt --> xml conversion
 MAN_SUBSTS += -e 's/libmansuffix/$(LIB_MAN_SUFFIX)/g'
 
+# asciidoc is generating [FIXME...] values in the .TH line we should fix.
+MAN_SUBSTS += -e 's/\[FIXME: source\]/$(XORG_MAN_PAGE)/'
+MAN_SUBSTS += -e 's/\[FIXME: manual\]/XINPUT FUNCTIONS/'
+
+# asciidoc generates shadow page references without the man section directory
+MAN_SUBSTS += -e 's/^\.so X/.so man$(LIB_MAN_SUFFIX)\/X/'
+
 SUFFIXES = .man .$(LIB_MAN_SUFFIX)
 .man.$(LIB_MAN_SUFFIX):
        $(AM_V_GEN)$(SED) $(MAN_SUBSTS) < $< > $@
@@ -166,13 +173,13 @@ SUFFIXES += .txt .xml
        $(AM_V_GEN)$(ASCIIDOC) -b docbook -d manpage -o $@ $<
 .xml.man:
        $(AM_V_GEN)$(XMLTO) man $<
-       $(AM_V_GEN)mv -f $(@:.man=.libmansuffix) $@
+       $(AM_V_at)mv -f $(@:.man=.libmansuffix) $@
 
 # Invoke asciidoc/xmlto main man page generation for shadow pages
 $(libman_shadows):
        @if test ! -f $(@:.man=.libmansuffix); then \
-         $(AM_V_GEN)rm -f $<; \
-         $(AM_V_GEN)$(MAKE) $(AM_MAKEFLAGS) $< || exit 1; \
+         rm -f $<; \
+         $(MAKE) $(AM_MAKEFLAGS) $< || exit 1; \
        fi
-       $(AM_V_GEN)mv -f $(@:.man=.libmansuffix) $@
+       $(AM_V_at)mv -f $(@:.man=.libmansuffix) $@
 endif
old mode 100755 (executable)
new mode 100644 (file)
index 37c5657..58a10de
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xallowdeviceevents
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/20/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XALLOWDEVICEEVENTS" "libmansuffix" "10/20/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XALLOWDEVICEEVENTS" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
index 2c385bc..9488063 100644 (file)
@@ -1 +1 @@
-.so manlibmansuffix/XGetDeviceControl.libmansuffix
+.so XGetDeviceControl.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index c041acd..d091b61
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xchangedevicedontpropagatelist
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XCHANGEDEVICEDONTPRO" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XCHANGEDEVICEDONTPRO" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -158,7 +167,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 4ff457c..d786871
@@ -1 +1 @@
-.so manlibmansuffix/XGetDeviceKeyMapping.libmansuffix
+.so XGetDeviceKeyMapping.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 20c3934..156dd2c
@@ -1 +1 @@
-.so manlibmansuffix/XGetDeviceProperty.libmansuffix
+.so XGetDeviceProperty.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 1ea22c5..dc41a60
@@ -1 +1 @@
-.so manlibmansuffix/XGetFeedbackControl.libmansuffix
+.so XGetFeedbackControl.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index ed7ea4f..5ea7008
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xchangekeyboarddevice
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XCHANGEKEYBOARDDEVIC" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XCHANGEKEYBOARDDEVIC" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index dd85915..f129f8c
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xchangepointerdevice
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XCHANGEPOINTERDEVICE" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XCHANGEPOINTERDEVICE" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index ff0ce17..79846cc
@@ -1 +1 @@
-.so manlibmansuffix/XOpenDevice.libmansuffix
+.so XOpenDevice.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 20c3934..156dd2c
@@ -1 +1 @@
-.so manlibmansuffix/XGetDeviceProperty.libmansuffix
+.so XGetDeviceProperty.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 0f907a6..54abc27
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xdevicebell
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XDEVICEBELL" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XDEVICEBELL" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index f9f3afd..7d0b7dc
@@ -1 +1 @@
-.so manlibmansuffix/XGetDeviceMotionEvents.libmansuffix
+.so XGetDeviceMotionEvents.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 9dd0be8..1a79ebf
@@ -1 +1 @@
-.so manlibmansuffix/XListInputDevices.libmansuffix
+.so XListInputDevices.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 44b0ff9..01e0844
@@ -1 +1 @@
-.so manlibmansuffix/XSetDeviceButtonMapping.libmansuffix
+.so XSetDeviceButtonMapping.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index a870f93..e54c894
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgetdevicecontrol
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGETDEVICECONTROL" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGETDEVICECONTROL" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -267,7 +276,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the XChangeDeviceControl request\&. Unless a
        specific range is specified for an argument, the full
-       range defined by the argument\'s type is accepted\&. Any
+       range defined by the argument\*(Aqs type is accepted\&. Any
        argument defined as a set of alternatives can generate
        this error\&.
 .fi
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 65257da..a691a8b
@@ -1 +1 @@
-.so manlibmansuffix/XChangeDeviceDontPropagateList.libmansuffix
+.so XChangeDeviceDontPropagateList.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 9ce679e..54b7e13
@@ -1 +1 @@
-.so manlibmansuffix/XSetDeviceFocus.libmansuffix
+.so XSetDeviceFocus.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index dad0e2b..0520ba8
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgetdevicekeymapping
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGETDEVICEKEYMAPPING" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGETDEVICEKEYMAPPING" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -321,7 +330,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 223fa37..1b4b4f6
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgetdevicemodifiermapping
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGETDEVICEMODIFIERMA" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGETDEVICEMODIFIERMA" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -229,7 +238,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 8dde172..7212f19
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgetdevicemotionevents
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGETDEVICEMOTIONEVEN" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGETDEVICEMOTIONEVEN" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index d018cd8..cebe2f8
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgetdeviceproperty
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 11/03/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGETDEVICEPROPERTY" "libmansuffix" "11/03/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGETDEVICEPROPERTY" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -19,7 +28,7 @@
 .\" * MAIN CONTENT STARTS HERE *
 .\" -----------------------------------------------------------------
 .SH "NAME"
-XGetDeviceProperty, XChangeDeviceProperty, XDeleteDeviceProperty \- Get, change or delete a device\'s property\&.
+XGetDeviceProperty, XChangeDeviceProperty, XDeleteDeviceProperty \- Get, change or delete a device\*(Aqs property\&.
 .SH "SYNOPSIS"
 .sp
 .nf
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index e1ac87a..a1a926f
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgetextensionversion
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGETEXTENSIONVERSION" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGETEXTENSIONVERSION" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -48,11 +57,20 @@ name
 .\}
 .nf
 The XGetExtensionVersion request is deprecated and should not
-be used\&. Clients issuing a XgetExtensionVersion request will
-not be able to use MPX features\&. The XGetExtensionVersion
-request queries the version of the input extension, and returns
-an XExtensionVersion structure\&. This structure contains a
-major_version and minor_version number which can be compared
+be used in XI2 applications\&. Clients issuing a XGetExtensionVersion
+request will not be able to use XI2 features\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The XGetExtensionVersion request queries the version of the input
+extension, and returns an XExtensionVersion structure\&. This structure
+contains a major_version and minor_version number which can be compared
 with constants defined in XI\&.h\&. Support for additional protocol
 requests added to the input extension after its initial release
 is indicated by a version number corresponding to the added
old mode 100755 (executable)
new mode 100644 (file)
index 3e24fc7..c7d45f4
@@ -25,11 +25,12 @@ DESCRIPTION
 -----------
 
    The XGetExtensionVersion request is deprecated and should not
-   be used. Clients issuing a XgetExtensionVersion request will
-   not be able to use MPX features. The XGetExtensionVersion
-   request queries the version of the input extension, and returns
-   an XExtensionVersion structure. This structure contains a
-   major_version and minor_version number which can be compared
+   be used in XI2 applications. Clients issuing a XGetExtensionVersion
+   request will not be able to use XI2 features.
+
+   The XGetExtensionVersion request queries the version of the input
+   extension, and returns an XExtensionVersion structure. This structure
+   contains a major_version and minor_version number which can be compared
    with constants defined in XI.h. Support for additional protocol
    requests added to the input extension after its initial release
    is indicated by a version number corresponding to the added
old mode 100755 (executable)
new mode 100644 (file)
index e037e6b..9ae6e4c
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgetfeedbackcontrol
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 12/16/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGETFEEDBACKCONTROL" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGETFEEDBACKCONTROL" "libmansuffix" "12/16/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -153,8 +162,7 @@ BadValue error\&.
 .if n \{\
 .RE
 .\}
-.sp
-Structures
+.SS "Structures"
 .sp
 .if n \{\
 .RS 4
@@ -175,11 +183,10 @@ feedback:
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-} XFeedbackState,
-XFeedbackControl;
+    XID class;
+    int length;
+    XID id;
+} XFeedbackState, XFeedbackControl;
 .fi
 .if n \{\
 .RE
@@ -201,16 +208,16 @@ returned for feedbacks equivalent to those on the X keyboard\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int click;
-int percent;
-int pitch;
-int duration;
-int led_mask;
-int global_auto_repeat;
-char auto_repeats[32];
+    XID class;
+    int length;
+    XID id;
+    int click;
+    int percent;
+    int pitch;
+    int duration;
+    int led_mask;
+    int global_auto_repeat;
+    char auto_repeats[32];
 } XKbdFeedbackState;
 .fi
 .if n \{\
@@ -234,12 +241,12 @@ pointer\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int accelNum;
-int accelDenom;
-int threshold;
+    XID class;
+    int length;
+    XID id;
+    int accelNum;
+    int accelDenom;
+    int threshold;
 } XPtrFeedbackState;
 .fi
 .if n \{\
@@ -262,12 +269,12 @@ returned for integer feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int resolution;
-int minVal;
-int maxVal;
+    XID class;
+    int length;
+    XID id;
+    int resolution;
+    int minVal;
+    int maxVal;
 } XIntegerFeedbackState;
 .fi
 .if n \{\
@@ -290,12 +297,12 @@ are returned for string feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int max_symbols;
-int num_syms_supported;
-KeySym *syms_supported;
+    XID class;
+    int length;
+    XID id;
+    int max_symbols;
+    int num_syms_supported;
+    KeySym *syms_supported;
 } XStringFeedbackState;
 .fi
 .if n \{\
@@ -318,12 +325,12 @@ are returned for bell feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int percent;
-int pitch;
-int duration;
+    XID class;
+    int length;
+    XID id;
+    int percent;
+    int pitch;
+    int duration;
 } XBellFeedbackState;
 .fi
 .if n \{\
@@ -345,10 +352,11 @@ returned for LED feedbacks\&.
 .RS 4
 .\}
 .nf
-typedef struct { XID class;
-int length;
-XID id;
-int led_values;
+typedef struct {
+    XID class;
+    int length;
+    XID id;
+    int led_values;
 } XLedFeedbackState;
 .fi
 .if n \{\
@@ -371,12 +379,12 @@ can be controlled for pointer feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int accelNum;
-int accelDenom;
-int threshold;
+    XID class;
+    int length;
+    XID id;
+    int accelNum;
+    int accelDenom;
+    int threshold;
 } XPtrFeedbackControl;
 .fi
 .if n \{\
@@ -399,17 +407,17 @@ can be controlled for keyboard feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int click;
-int percent;
-int pitch;
-int duration;
-int led_mask;
-int led_value;
-int key;
-int auto_repeat_mode;
+    XID class;
+    int length;
+    XID id;
+    int click;
+    int percent;
+    int pitch;
+    int duration;
+    int led_mask;
+    int led_value;
+    int key;
+    int auto_repeat_mode;
 } XKbdFeedbackControl;
 .fi
 .if n \{\
@@ -432,11 +440,11 @@ that can be controlled for string feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int num_keysyms;
-KeySym  *syms_to_display;
+    XID class;
+    int length;
+    XID id;
+    int num_keysyms;
+    KeySym  *syms_to_display;
 } XStringFeedbackControl;
 .fi
 .if n \{\
@@ -459,10 +467,10 @@ that can be controlled for integer feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID class;
-int length;
-XID id;
-int int_to_display;
+    XID class;
+    int length;
+    XID id;
+    int int_to_display;
 } XIntegerFeedbackControl;
 .fi
 .if n \{\
@@ -485,12 +493,12 @@ can be controlled for bell feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID     class;
-int     length;
-XID     id;
-int     percent;
-int     pitch;
-int     duration;
+    XID     class;
+    int     length;
+    XID     id;
+    int     percent;
+    int     pitch;
+    int     duration;
 } XBellFeedbackControl;
 .fi
 .if n \{\
@@ -513,11 +521,11 @@ can be controlled for LED feedbacks\&.
 .\}
 .nf
 typedef struct {
-XID     class;
-int     length;
-XID     id;
-int     led_mask;
-int     led_values;
+    XID     class;
+    int     length;
+    XID     id;
+    int     led_mask;
+    int     led_values;
 } XLedFeedbackControl;
 .fi
 .if n \{\
@@ -567,7 +575,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the XChangeFeedbackControl request\&. Unless a
        specific range is specified for an argument, the full
-       range defined by the argument\'s type is accepted\&. Any
+       range defined by the argument\*(Aqs type is accepted\&. Any
        argument defined as a set of alternatives can generate
        this error\&.
 .fi
old mode 100755 (executable)
new mode 100644 (file)
index 316f141..820ff96
@@ -81,6 +81,7 @@ DESCRIPTION
    BadValue error.
 
 Structures
+~~~~~~~~~~
 
    Each class of feedback is described by a structure specific to
    that class. These structures are defined in the file XInput.h.
@@ -88,17 +89,16 @@ Structures
    contain three fields that are at the beginning of each class of
    feedback:
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
-                } XFeedbackState,
-                XFeedbackControl;
+            } XFeedbackState, XFeedbackControl;
 
    The XKbdFeedbackState structure defines the attributes that are
    returned for feedbacks equivalent to those on the X keyboard.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
@@ -109,82 +109,83 @@ Structures
                 int led_mask;
                 int global_auto_repeat;
                 char auto_repeats[32];
-                } XKbdFeedbackState;
+            } XKbdFeedbackState;
 
    The XPtrFeedbackState structure defines the attributes that are
    returned for feedbacks equivalent to those on the the X
    pointer.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
                 int accelNum;
                 int accelDenom;
                 int threshold;
-                } XPtrFeedbackState;
+            } XPtrFeedbackState;
 
    The XIntegerFeedbackState structure defines attributes that are
    returned for integer feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
                 int resolution;
                 int minVal;
                 int maxVal;
-                } XIntegerFeedbackState;
+            } XIntegerFeedbackState;
 
    The XStringFeedbackState structure defines the attributes that
    are returned for string feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
                 int max_symbols;
                 int num_syms_supported;
                 KeySym *syms_supported;
-                } XStringFeedbackState;
+            } XStringFeedbackState;
 
    The XBellFeedbackState structure defines the attributes that
    are returned for bell feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
                 int percent;
                 int pitch;
                 int duration;
-                } XBellFeedbackState;
+            } XBellFeedbackState;
 
    The XLedFeedbackState structure defines the attributes that are
    returned for LED feedbacks.
 
-                typedef struct { XID class;
+            typedef struct {
+                XID class;
                 int length;
                 XID id;
                 int led_values;
-                } XLedFeedbackState;
+            } XLedFeedbackState;
 
    The XPrtFeedbackControl structure defines the attributes that
    can be controlled for pointer feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
                 int accelNum;
                 int accelDenom;
                 int threshold;
-                } XPtrFeedbackControl;
+            } XPtrFeedbackControl;
 
    The XKbdFeedbackControl structure defines the attributes that
    can be controlled for keyboard feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
@@ -196,51 +197,51 @@ Structures
                 int led_value;
                 int key;
                 int auto_repeat_mode;
-                } XKbdFeedbackControl;
+            } XKbdFeedbackControl;
 
    The XStringFeedbackControl structure defines the attributes
    that can be controlled for string feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
                 int num_keysyms;
                 KeySym  *syms_to_display;
-                } XStringFeedbackControl;
+            } XStringFeedbackControl;
 
    The XIntegerFeedbackControl structure defines the attributes
    that can be controlled for integer feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID class;
                 int length;
                 XID id;
                 int int_to_display;
-                } XIntegerFeedbackControl;
+            } XIntegerFeedbackControl;
 
    The XBellFeedbackControl structure defines the attributes that
    can be controlled for bell feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID     class;
                 int     length;
                 XID     id;
                 int     percent;
                 int     pitch;
                 int     duration;
-                } XBellFeedbackControl;
+            } XBellFeedbackControl;
 
    The XLedFeedbackControl structure defines the attributes that
    can be controlled for LED feedbacks.
 
-                typedef struct {
+            typedef struct {
                 XID     class;
                 int     length;
                 XID     id;
                 int     led_mask;
                 int     led_values;
-                } XLedFeedbackControl;
+            } XLedFeedbackControl;
 
 DIAGNOSTICS
 -----------
old mode 100755 (executable)
new mode 100644 (file)
index 4adbaa6..ea49cf1
@@ -1 +1 @@
-.so manlibmansuffix/XSelectExtensionEvent.libmansuffix
+.so XSelectExtensionEvent.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 135684d..cc36476
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgrabdevice
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGRABDEVICE" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGRABDEVICE" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -254,7 +263,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 30b7ffb..87501bc
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgrabdevicebutton
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGRABDEVICEBUTTON" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGRABDEVICEBUTTON" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -285,7 +294,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 113f8e8..4fefaaa
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xgrabdevicekey
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XGRABDEVICEKEY" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XGRABDEVICEKEY" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -308,7 +317,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 7722037..6b16e5e
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xichangehierarchy
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XICHANGEHIERARCHY" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XICHANGEHIERARCHY" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -55,7 +64,8 @@ changes
 XIChangeHierarchy modifies the device hierarchy by creating or
 removing master devices or changing the attachment of slave
 devices\&. If num_changes is non\-zero, changes is an array of
-XIAnyHierarchyChangeInfo structures\&.
+XIAnyHierarchyChangeInfo structures\&. If num_changes is equal or less than
+zero, XIChangeHierarchy does nothing\&.
 .fi
 .if n \{\
 .RE
old mode 100755 (executable)
new mode 100644 (file)
index ac667bc..205f40f
@@ -30,7 +30,8 @@ DESCRIPTION
    XIChangeHierarchy modifies the device hierarchy by creating or
    removing master devices or changing the attachment of slave
    devices. If num_changes is non-zero, changes is an array of
-   XIAnyHierarchyChangeInfo structures.
+   XIAnyHierarchyChangeInfo structures. If num_changes is equal or less than
+   zero, XIChangeHierarchy does nothing.
 
    XIChangeHierarchy processes changes in order, effective
    immediately. If an error occurs, processing is aborted and the
old mode 100755 (executable)
new mode 100644 (file)
index 907c593..25406b7
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xichangeproperty
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 12/21/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XICHANGEPROPERTY" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XICHANGEPROPERTY" "libmansuffix" "12/21/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -19,7 +28,7 @@
 .\" * MAIN CONTENT STARTS HERE *
 .\" -----------------------------------------------------------------
 .SH "NAME"
-XIChangeProperty, XIGetProperty, XIDeleteProperty \- change, retrieve or delete a device\'s property\&.
+XIChangeProperty, XIGetProperty, XIDeleteProperty \- change, retrieve or delete a device\*(Aqs property\&.
 .SH "SYNOPSIS"
 .sp
 .nf
@@ -115,7 +124,7 @@ offset
 .sp
 .nf
 mode
-       One of PropModeAppend, PropModePrepend or PropModeReplace\&.
+       One of XIPropModeAppend, XIPropModePrepend or XIPropModeReplace\&.
 .fi
 .sp
 .nf
@@ -180,7 +189,7 @@ If the specified property exists but its type does not match the specified type,
 .sp -1
 .IP \(bu 2.3
 .\}
-If the specified property exists and either you assign AnyPropertyType to the req_type argument or the specified type matches the actual property type, XIGetProperty returns the actual property type to actual_type_return and the actual property format (never zero) to actual_format_return\&. It also returns a value to bytes_after_return and nitems_return, by defining the following values:
+If the specified property exists and either you assign XIAnyPropertyType to the req_type argument or the specified type matches the actual property type, XIGetProperty returns the actual property type to actual_type_return and the actual property format (never zero) to actual_format_return\&. It also returns a value to bytes_after_return and nitems_return, by defining the following values:
 .sp
 .if n \{\
 .RS 4
@@ -219,7 +228,7 @@ The XIChangeProperty function alters the property for the specified device and c
 .sp -1
 .IP \(bu 2.3
 .\}
-If mode is PropModeReplace, XIChangeProperty discards the previous property value and stores the new data\&.
+If mode is XIPropModeReplace, XIChangeProperty discards the previous property value and stores the new data\&.
 .RE
 .sp
 .RS 4
@@ -230,7 +239,7 @@ If mode is PropModeReplace, XIChangeProperty discards the previous property valu
 .sp -1
 .IP \(bu 2.3
 .\}
-If mode is PropModePrepend or PropModeAppend, XChangeProperty inserts the specified data before the beginning of the existing data or onto the end of the existing data, respectively\&. The type and format must match the existing property value, or a BadMatch error results\&. If the property is undefined, it is treated as defined with the correct type and format with zero\-length data\&.
+If mode is XIPropModePrepend or XIPropModeAppend, XIChangeProperty inserts the specified data before the beginning of the existing data or onto the end of the existing data, respectively\&. The type and format must match the existing property value, or a BadMatch error results\&. If the property is undefined, it is treated as defined with the correct type and format with zero\-length data\&.
 .RE
 .sp
 If the specified format is 8, the property data must be a char array\&. If the specified format is 16, the property data must be a uint16_t array\&. If the specified format is 32, the property data must be a uint32_t array\&.
@@ -253,6 +262,20 @@ BadValue Some numeric value falls outside the range of values accepted by the re
 BadDevice An invalid device was specified\&. The device does not exist\&.
 .sp
 BadAtom An invalid property was specified\&. The property does not exist\&.
+.SH "BUGS"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The protocol headers for XI 2\&.0 did not provide
+XIAnyPropertyType, XIPropModeReplace, XIPropModePrepend or
+XIPropModeAppend\&. Use AnyPropertyType, PropModeReplace,
+PropModePrepend and PropModeAppend instead, respectively\&.
+.fi
+.if n \{\
+.RE
+.\}
 .SH "SEE ALSO"
 .sp
 XIListProperties(libmansuffix)
old mode 100755 (executable)
new mode 100644 (file)
index 76a0e8b..b35d90f
@@ -76,7 +76,7 @@ SYNOPSIS
           quantities) where the data is to be retrieved.
 
    mode
-          One of PropModeAppend, PropModePrepend or PropModeReplace.
+          One of XIPropModeAppend, XIPropModePrepend or XIPropModeReplace.
 
    num_items
           Number of items in data in the format specified.
@@ -121,7 +121,7 @@ XIGetProperty sets the return arguments as follows:
    nitems_return argument is empty.
 
    - If the specified property exists and either you assign 
-   AnyPropertyType to the req_type argument or the specified type 
+   XIAnyPropertyType to the req_type argument or the specified type
    matches the actual property type, XIGetProperty returns the 
    actual property type to actual_type_return and the actual property 
    format (never zero) to actual_format_return.  It also returns a value 
@@ -165,10 +165,10 @@ The XIChangeProperty function alters the property for the specified device
 and causes the X server to generate a XIPropertyNotify event for that
 device.  XIChangeProperty performs the following:
 
-- If mode is PropModeReplace, XIChangeProperty discards the previous
+- If mode is XIPropModeReplace, XIChangeProperty discards the previous
   property value and stores the new data.
 
-- If mode is PropModePrepend or PropModeAppend, XChangeProperty
+- If mode is XIPropModePrepend or XIPropModeAppend, XIChangeProperty
   inserts the specified data before the beginning of the existing
   data or onto the end of the existing data, respectively.  The type
   and format must match the existing property value, or a BadMatch
@@ -221,6 +221,14 @@ BadAtom
        An invalid property was specified. The property does not
        exist.
 
+BUGS
+----
+
+   The protocol headers for XI 2.0 did not provide
+   XIAnyPropertyType, XIPropModeReplace, XIPropModePrepend or
+   XIPropModeAppend. Use AnyPropertyType, PropModeReplace,
+   PropModePrepend and PropModeAppend instead, respectively.
+
 SEE ALSO
 --------
 
old mode 100755 (executable)
new mode 100644 (file)
index 9553156..9cfff6a
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xidefinecursor
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIDEFINECURSOR" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIDEFINECURSOR" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -64,7 +73,7 @@ win
 .RS 4
 .\}
 .nf
-If a cursor is set, it will be used when the device\'s pointer
+If a cursor is set, it will be used when the device\*(Aqs pointer
 is in the window\&. If the cursor is None, it is equivalent to
 XIUndefineCursor\&.
 .fi
@@ -99,9 +108,9 @@ XIDefineCursor can generate BadDevice, BadCursor and BadWindow\&.
 .nf
 The XIUndefineCursor function undoes the effect of a previous
 XIDefineCursor for this window\&. When the pointer is in the
-window, the window\'s default cursor will now be used\&. If no
-default cursor is defined, the parent\'s cursor for this device
-will be used (if defined) or the parent\'s default cursor will
+window, the window\*(Aqs default cursor will now be used\&. If no
+default cursor is defined, the parent\*(Aqs cursor for this device
+will be used (if defined) or the parent\*(Aqs default cursor will
 be used\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 42e9441..849e4f6
@@ -1 +1 @@
-.so manlibmansuffix/XIChangeProperty.libmansuffix
+.so XIChangeProperty.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 314c6de..5f4f992
@@ -1 +1 @@
-.so manlibmansuffix/XIQueryDevice.libmansuffix
+.so XIQueryDevice.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 6cd9325..9230bef
@@ -1 +1 @@
-.so manlibmansuffix/XISetClientPointer.libmansuffix
+.so XISetClientPointer.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index c119282..c5f54ca
@@ -1 +1 @@
-.so manlibmansuffix/XISetFocus.libmansuffix
+.so XISetFocus.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 42e9441..849e4f6
@@ -1 +1 @@
-.so manlibmansuffix/XIChangeProperty.libmansuffix
+.so XIChangeProperty.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index fbad756..60b61fd
@@ -1 +1 @@
-.so manlibmansuffix/XISelectEvents.libmansuffix
+.so XISelectEvents.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 799f3a9..adeda6d
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xigrabbutton
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 12/22/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIGRABBUTTON" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIGRABBUTTON" "libmansuffix" "12/22/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -23,7 +32,7 @@ XIGrabButton, XIUngrabButton, XIGrabKeycode, XIUngrabKeycode \- grab/ungrab butt
 .SH "SYNOPSIS"
 .sp
 .nf
-#include <X11/extensions/XInput\&.h>
+#include <X11/extensions/XInput2\&.h>
 .fi
 .sp
 .nf
@@ -51,24 +60,42 @@ int XIUngrabButton( Display *display,
 .sp
 .nf
 int XIGrabKeycode( Display *display,
-                  int deviceid,
-                  int keycode,
-                  Window grab_window,
-                  int grab_mode,
-                  int paired_device_mode,
-                  Bool owner_events,
-                  XIEventMask *mask,
-                  int num_modifiers,
-                  XIGrabModifiers *modifiers_inout);
+                   int deviceid,
+                   int keycode,
+                   Window grab_window,
+                   int grab_mode,
+                   int paired_device_mode,
+                   Bool owner_events,
+                   XIEventMask *mask,
+                   int num_modifiers,
+                   XIGrabModifiers *modifiers_inout);
 .fi
 .sp
 .nf
 int XIUngrabKeycode( Display *display,
-                    int deviceid,
-                    int keycode,
-                    Window grab_window,
-                    int num_modifiers,
-                    XIGrabModifiers *modifiers);
+                     int deviceid,
+                     int keycode,
+                     Window grab_window,
+                     int num_modifiers,
+                     XIGrabModifiers *modifiers);
+.fi
+.sp
+.nf
+int XIGrabTouchBegin( Display *display,
+                      int deviceid,
+                      Window grab_window,
+                      Bool owner_events,
+                      XIEventMask *mask,
+                      int num_modifiers,
+                      XIGrabModifiers *modifiers_inout);
+.fi
+.sp
+.nf
+int XIUngrabTouchBegin( Display *display,
+                        int deviceid,
+                        Window grab_window,
+                        int num_modifiers,
+                        XIGrabModifiers *modifiers);
 .fi
 .sp
 .nf
@@ -95,7 +122,7 @@ keycode
 .sp
 .nf
 num_modifiers
-       Number of elements in modifiers or modifiers_return
+       Number of elements in modifiers or modifiers_inout\&.
 .fi
 .sp
 .nf
@@ -110,7 +137,7 @@ modifiers
 modifiers_inout
        Specifies the set of latched and base modifiers or
        XIAnyModifier to grab\&. Returns the modifiers that could
-       not be grabbed and their status code\&.
+       not be grabbed and their error code\&.
 .fi
 .sp
 .nf
@@ -133,14 +160,14 @@ mask
 .nf
 grab_mode
        Specifies further processing of events from this device\&.
-       You can pass GrabModeSync or GrabModeAsync\&.
+       You can pass XIGrabModeSync or XIGrabModeAsync\&.
 .fi
 .sp
 .nf
 paired_device_mode
        Specifies further processing of events from the paired
-       master device\&. You can pass GrabModeSync or
-       GrabModeAsync\&. If deviceid specifies a floating slave
+       master device\&. You can pass XIGrabModeSync or
+       XIGrabModeAsync\&. If deviceid specifies a floating slave
        device, this parameter is ignored\&.
 .fi
 .SH "DESCRIPTION"
@@ -149,18 +176,18 @@ paired_device_mode
 .RS 4
 .\}
 .nf
-XIGrabButton and XIGrabKeycode establishes a passive grab\&. The
-modifier device for a button grab is the paired master device
+XIGrabButton, XIGrabKeycode and XIGrabTouchBegin establish a passive
+grab\&. The modifier device for a button grab is the paired master device
 if deviceid specifies a master pointer\&. Otherwise, the modifier
 device is the device specified with deviceid\&. In the future,
 the device is actively grabbed (as for XIGrabDevice, the
 last\-grab time is set to the time at which the button or keycode
-was pressed and the X_XIButtonPress or X_XIKeyPress event is
+was pressed and the XI_ButtonPress or XI_KeyPress event is
 reported if all of the following conditions are true:
   * The device is not grabbed, and the specified button or
-    keycode is logically pressed when the specified modifier
-    keys are logically down on the modifier device and no other
-    buttons or modifier keys are logically down\&.
+    keycode is logically pressed or a touch event occurs when the
+    specified modifier keys are logically down on the modifier device
+    and no other buttons or modifier keys are logically down\&.
   * Either the grab window is an ancestor of (or is) the focus
     window, OR the grab window is a descendent of the focus
     window and contains the device\&.
@@ -252,8 +279,11 @@ active grab\&.
 .RS 4
 .\}
 .nf
-XIGrabButton and XIGrabKeycode can generate BadClass, BadDevice,
-BadMatch, BadValue, and BadWindow errors\&.
+On success, XIGrabButton, XIGrabKeycode and XIGrabTouchBegin return 0;
+If one or more modifier combinations could not be grabbed,
+XIGrabButton, XIGrabKeycode and XIGrabTouchBegin return the number of
+failed combinations and modifiers_inout contains the failed combinations
+and their respective error codes\&.
 .fi
 .if n \{\
 .RE
@@ -263,10 +293,21 @@ BadMatch, BadValue, and BadWindow errors\&.
 .RS 4
 .\}
 .nf
-XIUngrabButton and XIUngrabKeycode releases the passive grab for
-a button/modifier or keycode/modifier combination on the
-specified window if it was grabbed by this client\&. A modifier
-of XIAnyModifier is equivalent to issuing the ungrab request
+XIGrabButton, XIGrabKeycode and XIGrabTouchBegin can generate BadClass,
+BadDevice, BadMatch, BadValue, and BadWindow errors\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+XIUngrabButton, XIUngrabKeycode and XIUngrabTouchBegin release the
+passive grab for a button/modifier, keycode/modifier or touch/modifier
+combination on the specified window if it was grabbed by this client\&. A
+modifier of XIAnyModifier is equivalent to issuing the ungrab request
 for all possible modifier combinations, including the
 combination of no modifiers\&. A button of XIAnyButton is
 equivalent to issuing the request for all possible buttons\&.
@@ -281,8 +322,24 @@ grab\&.
 .RS 4
 .\}
 .nf
-XIUngrabButton and XIUngrabKeycode can generate BadDevice,
-BadMatch, BadValue and BadWindow errors\&.
+XIUngrabButton, XIUngrabKeycode and XIUngrabTouchBegin can generate
+BadDevice, BadMatch, BadValue and BadWindow errors\&.
+.fi
+.if n \{\
+.RE
+.\}
+.SH "RETURN VALUE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+XIGrabButton, XIGrabKeycode and XIGrabTouchBegin return the number of
+modifier combination that could not establish a passive grab\&. The
+modifiers are returned in modifiers_inout, along with the respective
+error for this modifier combination\&. If XIGrabButton, XIGrabKeycode
+or XIGrabTouchBegin return zero, passive grabs with all requested
+modifier combinations were established successfully\&.
 .fi
 .if n \{\
 .RE
@@ -307,7 +364,8 @@ BadDevice
 BadMatch
        This error may occur if XIGrabButton specified a device
        that has no buttons, or XIGrabKeycode specified a device
-       that has no keys\&.
+       that has no keys, or XIGrabTouchBegin specified a device
+       that is not touch\-capable\&.
 .fi
 .if n \{\
 .RE
@@ -321,7 +379,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
@@ -339,6 +397,19 @@ BadWindow
 .if n \{\
 .RE
 .\}
+.SH "BUGS"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The protocol headers for XI 2\&.0 did not provide
+XIGrabModeAsync or XIGrabModeSync\&. Use GrabModeSync and
+GrabModeAsync instead, respectively\&.
+.fi
+.if n \{\
+.RE
+.\}
 .SH "SEE ALSO"
 .sp
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
index 70a3505..a046ac7
@@ -10,7 +10,7 @@ NAME
 SYNOPSIS
 --------
 
-   #include <X11/extensions/XInput.h>
+   #include <X11/extensions/XInput2.h>
 
    int XIGrabButton( Display *display,
                      int deviceid,
@@ -32,22 +32,36 @@ SYNOPSIS
                        XIGrabModifiers *modifiers);
 
    int XIGrabKeycode( Display *display,
-                     int deviceid,
-                     int keycode,
-                     Window grab_window,
-                     int grab_mode,
-                     int paired_device_mode,
-                     Bool owner_events,
-                     XIEventMask *mask,
-                     int num_modifiers,
-                     XIGrabModifiers *modifiers_inout);
+                      int deviceid,
+                      int keycode,
+                      Window grab_window,
+                      int grab_mode,
+                      int paired_device_mode,
+                      Bool owner_events,
+                      XIEventMask *mask,
+                      int num_modifiers,
+                      XIGrabModifiers *modifiers_inout);
    
    int XIUngrabKeycode( Display *display,
-                       int deviceid,
-                       int keycode,
-                       Window grab_window,
-                       int num_modifiers,
-                       XIGrabModifiers *modifiers);
+                        int deviceid,
+                        int keycode,
+                        Window grab_window,
+                        int num_modifiers,
+                        XIGrabModifiers *modifiers);
+
+   int XIGrabTouchBegin( Display *display,
+                         int deviceid,
+                         Window grab_window,
+                         Bool owner_events,
+                         XIEventMask *mask,
+                         int num_modifiers,
+                         XIGrabModifiers *modifiers_inout);
+
+   int XIUngrabTouchBegin( Display *display,
+                           int deviceid,
+                           Window grab_window,
+                           int num_modifiers,
+                           XIGrabModifiers *modifiers);
 
    display
           Specifies the connection to the X server.
@@ -64,7 +78,7 @@ SYNOPSIS
           or XIAnyKeycode.
 
    num_modifiers
-          Number of elements in modifiers or modifiers_return
+          Number of elements in modifiers or modifiers_inout.
 
    modifiers
           Specifies the set of latched and base modifiers or
@@ -75,7 +89,7 @@ SYNOPSIS
    modifiers_inout
           Specifies the set of latched and base modifiers or
           XIAnyModifier to grab. Returns the modifiers that could
-          not be grabbed and their status code.
+          not be grabbed and their error code.
 
    grab_window
           Specifies the grab window.
@@ -90,29 +104,29 @@ SYNOPSIS
 
    grab_mode
           Specifies further processing of events from this device.
-          You can pass GrabModeSync or GrabModeAsync.
+          You can pass XIGrabModeSync or XIGrabModeAsync.
 
    paired_device_mode
           Specifies further processing of events from the paired
-          master device. You can pass GrabModeSync or
-          GrabModeAsync. If deviceid specifies a floating slave
+          master device. You can pass XIGrabModeSync or
+          XIGrabModeAsync. If deviceid specifies a floating slave
           device, this parameter is ignored.
 
 DESCRIPTION
 -----------
 
-   XIGrabButton and XIGrabKeycode establishes a passive grab. The
-   modifier device for a button grab is the paired master device
+   XIGrabButton, XIGrabKeycode and XIGrabTouchBegin establish a passive
+   grab. The modifier device for a button grab is the paired master device
    if deviceid specifies a master pointer. Otherwise, the modifier
    device is the device specified with deviceid. In the future,
    the device is actively grabbed (as for XIGrabDevice, the
    last-grab time is set to the time at which the button or keycode
-   was pressed and the X_XIButtonPress or X_XIKeyPress event is
+   was pressed and the XI_ButtonPress or XI_KeyPress event is
    reported if all of the following conditions are true:
      * The device is not grabbed, and the specified button or
-       keycode is logically pressed when the specified modifier
-       keys are logically down on the modifier device and no other
-       buttons or modifier keys are logically down.
+       keycode is logically pressed or a touch event occurs when the
+       specified modifier keys are logically down on the modifier device
+       and no other buttons or modifier keys are logically down.
      * Either the grab window is an ancestor of (or is) the focus
        window, OR the grab window is a descendent of the focus
        window and contains the device.
@@ -156,21 +170,36 @@ DESCRIPTION
    combination. XIGrabButton and XIGrabKeycode have no effect on an
    active grab.
 
-   XIGrabButton and XIGrabKeycode can generate BadClass, BadDevice,
-   BadMatch, BadValue, and BadWindow errors.
+   On success, XIGrabButton, XIGrabKeycode and XIGrabTouchBegin return 0;
+   If one or more modifier combinations could not be grabbed,
+   XIGrabButton, XIGrabKeycode and XIGrabTouchBegin return the number of
+   failed combinations and modifiers_inout contains the failed combinations
+   and their respective error codes.
+
+   XIGrabButton, XIGrabKeycode and XIGrabTouchBegin can generate BadClass,
+   BadDevice, BadMatch, BadValue, and BadWindow errors.
 
-   XIUngrabButton and XIUngrabKeycode releases the passive grab for
-   a button/modifier or keycode/modifier combination on the
-   specified window if it was grabbed by this client. A modifier
-   of XIAnyModifier is equivalent to issuing the ungrab request
+   XIUngrabButton, XIUngrabKeycode and XIUngrabTouchBegin release the
+   passive grab for a button/modifier, keycode/modifier or touch/modifier
+   combination on the specified window if it was grabbed by this client. A
+   modifier of XIAnyModifier is equivalent to issuing the ungrab request
    for all possible modifier combinations, including the
    combination of no modifiers. A button of XIAnyButton is
    equivalent to issuing the request for all possible buttons.
    XIUngrabButton and XIUngrabKeycode have no effect on an active
    grab.
 
-   XIUngrabButton and XIUngrabKeycode can generate BadDevice,
-   BadMatch, BadValue and BadWindow errors.
+   XIUngrabButton, XIUngrabKeycode and XIUngrabTouchBegin can generate
+   BadDevice, BadMatch, BadValue and BadWindow errors.
+
+RETURN VALUE
+------------
+   XIGrabButton, XIGrabKeycode and XIGrabTouchBegin return the number of
+   modifier combination that could not establish a passive grab. The
+   modifiers are returned in modifiers_inout, along with the respective
+   error for this modifier combination. If XIGrabButton, XIGrabKeycode
+   or XIGrabTouchBegin return zero, passive grabs with all requested
+   modifier combinations were established successfully.
 
 DIAGNOSTICS
 -----------
@@ -181,7 +210,8 @@ DIAGNOSTICS
    BadMatch
           This error may occur if XIGrabButton specified a device
           that has no buttons, or XIGrabKeycode specified a device
-          that has no keys.
+          that has no keys, or XIGrabTouchBegin specified a device
+          that is not touch-capable.
 
    BadValue
           Some numeric value falls outside the range of values
@@ -194,6 +224,13 @@ DIAGNOSTICS
           A value for a Window argument does not name a defined
           Window.
 
+BUGS
+----
+
+   The protocol headers for XI 2.0 did not provide
+   XIGrabModeAsync or XIGrabModeSync. Use GrabModeSync and
+   GrabModeAsync instead, respectively.
+
 SEE ALSO
 --------
 
old mode 100755 (executable)
new mode 100644 (file)
index 591fce0..48c4300
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xigrabdevice
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 12/21/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIGRABDEVICE" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIGRABDEVICE" "libmansuffix" "12/21/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -135,10 +144,10 @@ mask\&.
 .RS 4
 .\}
 .nf
-If the grab_mode argument is GrabModeAsync, device event
+If the grab_mode argument is XIGrabModeAsync, device event
 processing continues as usual\&. If the device is currently
 frozen by this client, then processing of device events is
-resumed\&. If the grab_mode argument is GrabModeSync, the state
+resumed\&. If the grab_mode argument is XIGrabModeSync, the state
 of the device (as seen by client applications) appears to
 freeze, and the X server generates no further device events
 until the grabbing client issues a releasing XIAllowEvents call
@@ -154,9 +163,9 @@ the server for later processing\&.
 .RS 4
 .\}
 .nf
-If paired_device_mode is GrabModeAsync, processing of events
+If paired_device_mode is XIGrabModeAsync, processing of events
 from the paired master device is unaffected by activation of
-the grab\&. If paired_device_mode is GrabModeSync, the state of
+the grab\&. If paired_device_mode is XIGrabModeSync, the state of
 the paired master device (as seen by client applications)
 appears to freeze, and the X server generates no further events
 from this device until the grabbing client issues a releasing
@@ -283,6 +292,19 @@ BadWindow
 .if n \{\
 .RE
 .\}
+.SH "BUGS"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The protocol headers for XI 2\&.0 did not provide
+XIGrabModeAsync or XIGrabModeSync\&. Use GrabModeSync and
+GrabModeAsync instead, respectively\&.
+.fi
+.if n \{\
+.RE
+.\}
 .SH "SEE ALSO"
 .sp
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
index bd749b7..ce33a19
@@ -74,10 +74,10 @@ DESCRIPTION
    grab_window, and is only reported if specified in the event
    mask.
 
-   If the grab_mode argument is GrabModeAsync, device event
+   If the grab_mode argument is XIGrabModeAsync, device event
    processing continues as usual. If the device is currently
    frozen by this client, then processing of device events is
-   resumed. If the grab_mode argument is GrabModeSync, the state
+   resumed. If the grab_mode argument is XIGrabModeSync, the state
    of the device (as seen by client applications) appears to
    freeze, and the X server generates no further device events
    until the grabbing client issues a releasing XIAllowEvents call
@@ -85,9 +85,9 @@ DESCRIPTION
    not lost while the device is frozen; they are simply queued in
    the server for later processing.
 
-   If paired_device_mode is GrabModeAsync, processing of events
+   If paired_device_mode is XIGrabModeAsync, processing of events
    from the paired master device is unaffected by activation of
-   the grab. If paired_device_mode is GrabModeSync, the state of
+   the grab. If paired_device_mode is XIGrabModeSync, the state of
    the paired master device (as seen by client applications)
    appears to freeze, and the X server generates no further events
    from this device until the grabbing client issues a releasing
@@ -141,6 +141,13 @@ DIAGNOSTICS
           A value for a Window argument does not name a defined
           Window.
 
+BUGS
+----
+
+   The protocol headers for XI 2.0 did not provide
+   XIGrabModeAsync or XIGrabModeSync. Use GrabModeSync and
+   GrabModeAsync instead, respectively.
+
 SEE ALSO
 --------
    XIAllowEvents(libmansuffix)
old mode 100755 (executable)
new mode 100644 (file)
index 4f68d86..536db6d
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xigrabenter
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 12/21/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIGRABENTER" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIGRABENTER" "libmansuffix" "12/21/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -29,7 +38,7 @@ XIGrabEnter, XIUngrabEnter, XIGrabFocusIn, XIUngrabFocusIn \- grab/ungrab enter
 .nf
 int XIGrabEnter( Display *display,
                  int deviceid,
-                 Window grab_window
+                 Window grab_window,
                  Cursor cursor,
                  int grab_mode,
                  int paired_device_mode,
@@ -76,7 +85,7 @@ device
 .sp
 .nf
 num_modifiers
-       Number of elements in modifiers or modifiers_return
+       Number of elements in modifiers or modifiers_inout\&.
 .fi
 .sp
 .nf
@@ -114,14 +123,14 @@ mask
 .nf
 grab_mode
        Specifies further processing of events from this device\&.
-       You can pass GrabModeSync or GrabModeAsync\&.
+       You can pass XIGrabModeSync or XIGrabModeAsync\&.
 .fi
 .sp
 .nf
 paired_device_mode
        Specifies further processing of events from the paired
-       master device\&. You can pass GrabModeSync or
-       GrabModeAsync\&. If deviceid specifies a floating slave
+       master device\&. You can pass XIGrabModeSync or
+       XIGrabModeAsync\&. If deviceid specifies a floating slave
        device, this parameter is ignored\&.
 .fi
 .SH "DESCRIPTION"
@@ -231,6 +240,20 @@ XIGrabFocusin have no effect on an active grab\&.
 .RS 4
 .\}
 .nf
+On success, XIGrabEnter and XIGrabFocusIn return 0;
+If one or more modifier combinations could not be grabbed,
+XIGrabEnter and XIGrabFocusIn return the number of failed
+combinations and modifiers_inout contains the failed combinations
+and their respective status codes\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
 XIGrabEnter and XIGrabFocusIn can generate BadDevice,
 BadMatch, BadValue, and BadWindow errors\&.
 .fi
@@ -263,6 +286,21 @@ BadMatch, BadValue and BadWindow errors\&.
 .if n \{\
 .RE
 .\}
+.SH "RETURN VALUE"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+XIGrabEnter and XIGrabFocusIn return the number of modifier combination
+that could not establish a passive grab\&. The modifiers are returned in
+modifiers_inout, along with the respective error for this modifier
+combination\&. If XIGrabEnter or XIGrabFocusIn return zero, passive grabs
+with all requested modifier combinations were established successfully\&.
+.fi
+.if n \{\
+.RE
+.\}
 .SH "DIAGNOSTICS"
 .sp
 .if n \{\
@@ -297,7 +335,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
@@ -315,6 +353,19 @@ BadWindow
 .if n \{\
 .RE
 .\}
+.SH "BUGS"
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The protocol headers for XI 2\&.0 did not provide
+XIGrabModeAsync or XIGrabModeSync\&. Use GrabModeSync and
+GrabModeAsync instead, respectively\&.
+.fi
+.if n \{\
+.RE
+.\}
 .SH "SEE ALSO"
 .sp
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
index 005a72b..5203f05
@@ -14,7 +14,7 @@ SYNOPSIS
 
    int XIGrabEnter( Display *display,
                     int deviceid,
-                    Window grab_window
+                    Window grab_window,
                     Cursor cursor,
                     int grab_mode,
                     int paired_device_mode,
@@ -51,7 +51,7 @@ SYNOPSIS
           Specifies the device that is to be grabbed or released
 
    num_modifiers
-          Number of elements in modifiers or modifiers_return
+          Number of elements in modifiers or modifiers_inout.
 
    modifiers
           Specifies the set of latched and base modifiers or
@@ -77,12 +77,12 @@ SYNOPSIS
 
    grab_mode
           Specifies further processing of events from this device.
-          You can pass GrabModeSync or GrabModeAsync.
+          You can pass XIGrabModeSync or XIGrabModeAsync.
 
    paired_device_mode
           Specifies further processing of events from the paired
-          master device. You can pass GrabModeSync or
-          GrabModeAsync. If deviceid specifies a floating slave
+          master device. You can pass XIGrabModeSync or
+          XIGrabModeAsync. If deviceid specifies a floating slave
           device, this parameter is ignored.
 
 DESCRIPTION
@@ -133,6 +133,12 @@ DESCRIPTION
    is a conflicting grab for any combination. XIGrabEnter and
    XIGrabFocusin have no effect on an active grab.
 
+   On success, XIGrabEnter and XIGrabFocusIn return 0;
+   If one or more modifier combinations could not be grabbed,
+   XIGrabEnter and XIGrabFocusIn return the number of failed
+   combinations and modifiers_inout contains the failed combinations
+   and their respective status codes.
+
    XIGrabEnter and XIGrabFocusIn can generate BadDevice,
    BadMatch, BadValue, and BadWindow errors.
 
@@ -146,6 +152,14 @@ DESCRIPTION
    XIUngrabEnter and XIUngrabFocusIn can generate BadDevice,
    BadMatch, BadValue and BadWindow errors.
 
+RETURN VALUE
+------------
+   XIGrabEnter and XIGrabFocusIn return the number of modifier combination
+   that could not establish a passive grab. The modifiers are returned in
+   modifiers_inout, along with the respective error for this modifier
+   combination. If XIGrabEnter or XIGrabFocusIn return zero, passive grabs
+   with all requested modifier combinations were established successfully.
+
 DIAGNOSTICS
 -----------
 
@@ -168,6 +182,13 @@ DIAGNOSTICS
           A value for a Window argument does not name a defined
           Window.
 
+BUGS
+----
+
+   The protocol headers for XI 2.0 did not provide
+   XIGrabModeAsync or XIGrabModeSync. Use GrabModeSync and
+   GrabModeAsync instead, respectively.
+
 SEE ALSO
 --------
 
old mode 100755 (executable)
new mode 100644 (file)
index ebd8b17..0af5699
@@ -1 +1 @@
-.so manlibmansuffix/XIGrabEnter.libmansuffix
+.so XIGrabEnter.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index beed4f1..d6764b5
@@ -1 +1 @@
-.so manlibmansuffix/XIGrabButton.libmansuffix
+.so XIGrabButton.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 411b6dc..a3992ab
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xilistproperties
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XILISTPROPERTIES" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XILISTPROPERTIES" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -19,7 +28,7 @@
 .\" * MAIN CONTENT STARTS HERE *
 .\" -----------------------------------------------------------------
 .SH "NAME"
-XIListProperties \- List a device\'s properties\&.
+XIListProperties \- List a device\*(Aqs properties\&.
 .SH "SYNOPSIS"
 .sp
 .nf
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 179b357..2bd1463
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xiquerydevice
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/20/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 12/22/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIQUERYDEVICE" "libmansuffix" "10/20/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIQUERYDEVICE" "libmansuffix" "12/22/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -208,7 +217,8 @@ typedef struct
 .nf
 The type field specifies the type of the input class\&.
 Currently, the following types are defined:
-    XIKeyClass, XIButtonClass, XIValuatorClass
+    XIKeyClass, XIButtonClass, XIValuatorClass, XIScrollClass,
+    XITouchClass
 .fi
 .if n \{\
 .RE
@@ -232,7 +242,7 @@ required to ignore unknown input classes\&.
 The sourceid is the deviceid this class originated from\&. For
 master devices, the sourceid is typically the id of the slave
 device currently sending events\&. For slave devices, the
-sourceid is typically the device\'s id\&.
+sourceid is typically the device\*(Aqs id\&.
 .fi
 .if n \{\
 .RE
@@ -243,7 +253,7 @@ sourceid is typically the device\'s id\&.
 .\}
 .nf
 A device may have zero or one XIButtonClass, denoting the
-device\'s capability to send button events\&.
+device\*(Aqs capability to send button events\&.
 .fi
 .if n \{\
 .RE
@@ -323,7 +333,7 @@ logically down\&.
 .RS 4
 .\}
 .nf
-A device may have zero or one XIKeyClass, denoting the device\'s
+A device may have zero or one XIKeyClass, denoting the device\*(Aqs
 capability to send key events\&.
 .fi
 .if n \{\
@@ -374,7 +384,7 @@ send\&.
 .\}
 .nf
 A device may have zero or more XIValuatorClass, denoting the
-device\'s capability to send coordinates\&.
+device\*(Aqs capability to send coordinates\&.
 .fi
 .if n \{\
 .RE
@@ -395,7 +405,7 @@ typedef struct
     double      value;
     int         resolution;
     int         mode;
-} XIValuatorInfo;
+} XIValuatorClassInfo;
 .fi
 .if n \{\
 .RE
@@ -462,6 +472,174 @@ mode is XIModeRelative, this device sends relative coordinates\&.
 .RS 4
 .\}
 .nf
+typedef struct
+{
+    int         type;
+    int         sourceid;
+    int         number;
+    int         scroll_type;
+    double      increment;
+    int         flags;
+} XIScrollClassInfo;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+This class describes scrolling capability on a valuator\&. For
+each XIScrollClassInfo, an XIValuatorClassInfo with the same
+number is present on the device\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The number field specifies the valuator number on the physical
+device that this scroll information applies to\&. See the
+respective XIValuatorClassInfo for detailed information on this
+valuator\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The scroll_type field specifies the type of scrolling, either
+XIScrollTypeVertical or XIScrollTypeHorizontal\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The increment specifies the value change considered one unit of
+scrolling down\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The flags field specifies flags that apply to this scrolling
+information:
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+If XIScrollFlagNoEmulation is set, the server will not
+emulate legacy button events for valuator changes on this
+valuator\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+If XIScrollFlagPreferred is set, this axis is the
+preferred axis for this scroll type and will be used for
+the emulation of XI_Motion events when the driver submits
+legacy scroll button events\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+typedef struct
+{
+    int         type;
+    int         sourceid;
+    int         mode;
+    int         num_touches;
+} XITouchClassInfo;
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+A device may have zero or one XITouchClassInfo, denoting
+multi\-touch capability on the device\&. A device with a XITouchClassInfo
+may send TouchBegin, TouchUpdate, TouchEnd and TouchOwnership events\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The mode field is either XIDirectTouch for direct\-input touch devices
+such as touchscreens or XIDependentTouch for indirect input devices such
+as touchpads\&. For XIDirectTouch devices, touch events are sent to window
+at the position the touch occured\&. For XIDependentTouch devices, touch
+events are sent to the window at the position of the device\*(Aqs sprite\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+The num_touches field defines the maximum number of simultaneous touches
+the device supports\&. A num_touches of 0 means the maximum number of
+simultaneous touches is undefined or unspecified\&. This field should be
+used as a guide only, devices will lie about their capabilities\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+A device with an XITouchClassInfo may still send pointer events\&. The
+valuators must be defined with the respective XIValuatorClass
+classes\&. A valuator may send both pointer and touch\-events\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
 XIQueryDevice can generate a BadDevice error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
index 2b1f76f..e5e8251
@@ -100,7 +100,8 @@ DESCRIPTION
 
    The type field specifies the type of the input class.
    Currently, the following types are defined:
-       XIKeyClass, XIButtonClass, XIValuatorClass
+       XIKeyClass, XIButtonClass, XIValuatorClass, XIScrollClass,
+       XITouchClass
 
    In the future, additional types may be added. Clients are
    required to ignore unknown input classes.
@@ -175,7 +176,7 @@ DESCRIPTION
                    double      value;
                    int         resolution;
                    int         mode;
-               } XIValuatorInfo;
+               } XIValuatorClassInfo;
 
    The number field specifies the number of the axis on the
    physical device.
@@ -194,6 +195,70 @@ DESCRIPTION
    XIModeAbsolute this axis sends absolute coordinates. If the
    mode is XIModeRelative, this device sends relative coordinates.
 
+               typedef struct
+               {
+                   int         type;
+                   int         sourceid;
+                   int         number;
+                   int         scroll_type;
+                   double      increment;
+                   int         flags;
+               } XIScrollClassInfo;
+
+   This class describes scrolling capability on a valuator. For
+   each XIScrollClassInfo, an XIValuatorClassInfo with the same
+   number is present on the device.
+
+   The number field specifies the valuator number on the physical
+   device that this scroll information applies to. See the
+   respective XIValuatorClassInfo for detailed information on this
+   valuator.
+
+   The scroll_type field specifies the type of scrolling, either
+   XIScrollTypeVertical or XIScrollTypeHorizontal.
+
+   The increment specifies the value change considered one unit of
+   scrolling down.
+
+   The flags field specifies flags that apply to this scrolling
+   information:
+
+   If XIScrollFlagNoEmulation is set, the server will not
+   emulate legacy button events for valuator changes on this
+   valuator.
+
+   If XIScrollFlagPreferred is set, this axis is the
+   preferred axis for this scroll type and will be used for
+   the emulation of XI_Motion events when the driver submits
+   legacy scroll button events.
+
+               typedef struct
+               {
+                   int         type;
+                   int         sourceid;
+                   int         mode;
+                   int         num_touches;
+               } XITouchClassInfo;
+
+   A device may have zero or one XITouchClassInfo, denoting
+   multi-touch capability on the device. A device with a XITouchClassInfo
+   may send TouchBegin, TouchUpdate, TouchEnd and TouchOwnership events.
+
+   The mode field is either XIDirectTouch for direct-input touch devices
+   such as touchscreens or XIDependentTouch for indirect input devices such
+   as touchpads. For XIDirectTouch devices, touch events are sent to window
+   at the position the touch occured. For XIDependentTouch devices, touch
+   events are sent to the window at the position of the device's sprite.
+
+   The num_touches field defines the maximum number of simultaneous touches
+   the device supports. A num_touches of 0 means the maximum number of
+   simultaneous touches is undefined or unspecified. This field should be
+   used as a guide only, devices will lie about their capabilities.
+
+   A device with an XITouchClassInfo may still send pointer events. The
+   valuators must be defined with the respective XIValuatorClass
+   classes. A valuator may send both pointer and touch-events.
+
    XIQueryDevice can generate a BadDevice error.
 
    XIFreeDeviceInfo frees the information returned by
old mode 100755 (executable)
new mode 100644 (file)
index 278f21e..859cdb5
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xiquerypointer
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIQUERYPOINTER" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIQUERYPOINTER" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -80,7 +89,7 @@ root_return
 .nf
 root_x_return, root_y_return
        Return the pointer coordinates relative to the root
-       window\'s origin\&.
+       window\*(Aqs origin\&.
 .fi
 .sp
 .nf
@@ -100,8 +109,8 @@ win_x_return, win_y_return
 .\}
 .nf
 The XIQueryPointer function returns the root window the
-device\'s pointer is logically on and the pointer coordinates
-relative to the root window\'s origin\&. If XIQueryPointer returns
+device\*(Aqs pointer is logically on and the pointer coordinates
+relative to the root window\*(Aqs origin\&. If XIQueryPointer returns
 False, the pointer is not on the same screen as the specified
 window, and XIQueryPointer returns None to child_return and
 zero to win_x_return and win_y_return\&. If XIQueryPointer
@@ -131,6 +140,17 @@ group_return\&.
 .RS 4
 .\}
 .nf
+The mask field in buttons_return is dynamically allocated and
+must be freed by the caller\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
 XIQueryPointer is identical to XQueryPointer but specifies the
 device explicitly\&.
 .fi
old mode 100755 (executable)
new mode 100644 (file)
index 445f8b5..73fc11e
@@ -76,6 +76,9 @@ DESCRIPTION
    selected to obtain the data for modifiers_return and
    group_return.
 
+   The mask field in buttons_return is dynamically allocated and
+   must be freed by the caller.
+
    XIQueryPointer is identical to XQueryPointer but specifies the
    device explicitly.
 
old mode 100755 (executable)
new mode 100644 (file)
index fa79605..3187a83
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xiqueryversion
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 04/23/2012
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIQUERYVERSION" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIQUERYVERSION" "libmansuffix" "04/23/2012" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -39,14 +48,14 @@ display
 .sp
 .nf
 major_version_inout
-       Specifies the client\'s supported XI2 version, and
-       returns the server\'s supported version\&.
+       Specifies the client\*(Aqs supported XI2 version, and
+       returns the server\*(Aqs supported version\&.
 .fi
 .sp
 .nf
 minor_version_inout
-       Specifies the client\'s supported XI2 version, and
-       returns the server\'s supported version\&.
+       Specifies the client\*(Aqs supported XI2 version, and
+       returns the server\*(Aqs supported version\&.
 .fi
 .SH "DESCRIPTION"
 .sp
@@ -54,8 +63,8 @@ minor_version_inout
 .RS 4
 .\}
 .nf
-XIQueryVersion announces the client\'s supported XI2 version to
-the server and returns server\'s supported X Input version\&. Clients
+XIQueryVersion announces the client\*(Aqs supported XI2 version to
+the server and returns server\*(Aqs supported X Input version\&. Clients
 are required to use XIQueryVersion instead of XGetExtensionVersion
 if they use XI2 calls\&. The server may treat a client differently
 depending on the supported version announced by the client\&.
@@ -73,7 +82,20 @@ error occurs\&.
 If the server does not support XI2, XIQueryVersion returns BadRequest
 to the client\&. Otherwise, XIQueryVersion returns Success\&. In both
 cases major_version_inout and minor_version_inout are set to the
-server\'s supported version\&.
+server\*(Aqs supported version\&.
+.fi
+.if n \{\
+.RE
+.\}
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+Consecutive calls to XIQueryVersion by the same client always return the
+first returned major\&.minor version\&. If the client requests a version
+lower than the first returned major\&.minor version in a subsequent call, a
+BadValue error occurs\&.
 .fi
 .if n \{\
 .RE
old mode 100755 (executable)
new mode 100644 (file)
index 53118ed..839c18c
@@ -42,8 +42,12 @@ DESCRIPTION
    cases major_version_inout and minor_version_inout are set to the 
    server's supported version.
 
-   XIQueryVersion can generate a BadValue error.
+   Consecutive calls to XIQueryVersion by the same client always return the
+   first returned major.minor version. If the client requests a version
+   lower than the first returned major.minor version in a subsequent call, a
+   BadValue error occurs.
 
+   XIQueryVersion can generate a BadValue error.
 
 EXAMPLES
 --------
old mode 100755 (executable)
new mode 100644 (file)
index 2296707..1dfa699
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xiselectevents
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XISELECTEVENTS" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XISELECTEVENTS" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -107,7 +116,7 @@ for this device\&. If deviceid is XIAllDevices or
 XIAllMasterDevices, the event mask is selected for all devices
 or all master devices, respectively\&. The effective event mask
 is the bit\-wise OR of the XIAllDevices, XIAllMasterDevices and
-the respective device\'s event mask\&.
+the respective device\*(Aqs event mask\&.
 .fi
 .if n \{\
 .RE
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index f9cd102..2428276
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xisetclientpointer
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XISETCLIENTPOINTER" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XISETCLIENTPOINTER" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -75,7 +84,7 @@ will return the coordinates of the ClientPointer\&.
 .nf
 XISetClientPointer request sets the ClientPointer device for
 the client that owns the given window\&. If win is None, the
-requesting client\'s ClientPointer is set to the device
+requesting client\*(Aqs ClientPointer is set to the device
 specified with deviceid\&. Only master pointer devices can be set
 as ClientPointer\&.
 .fi
@@ -98,9 +107,9 @@ error\&.
 .RS 4
 .\}
 .nf
-The XIGetClientPointer request returns the ClientPointer\'s
+The XIGetClientPointer request returns the ClientPointer\*(Aqs
 device ID for the client that owns the given window\&. If win is
-None, the requesting client\'s ClientPointer is returned\&.
+None, the requesting client\*(Aqs ClientPointer is returned\&.
 .fi
 .if n \{\
 .RE
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index afc9f7f..6d76e21
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xisetfocus
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XISETFOCUS" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XISETFOCUS" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -19,7 +28,7 @@
 .\" * MAIN CONTENT STARTS HERE *
 .\" -----------------------------------------------------------------
 .SH "NAME"
-XISetFocus, XIGetFocus \- set or get the device\'s focus\&.
+XISetFocus, XIGetFocus \- set or get the device\*(Aqs focus\&.
 .SH "SYNOPSIS"
 .sp
 .nf
@@ -88,7 +97,7 @@ focus events\&.
 .nf
 If the focus window is None all keyboard events by this device
 are discarded until a new focus window is set\&. Otherwise, if
-focus is a window, it becomes the device\'s focus window\&. If a
+focus is a window, it becomes the device\*(Aqs focus window\&. If a
 generated device event would normally be reported to this
 window or one of its inferiors, the event is reported as usual\&.
 Otherwise, the event is reported relative to the focus window\&.
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index fbbbdeb..8afc645
@@ -1 +1 @@
-.so manlibmansuffix/XIDefineCursor.libmansuffix
+.so XIDefineCursor.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index beed4f1..d6764b5
@@ -1 +1 @@
-.so manlibmansuffix/XIGrabButton.libmansuffix
+.so XIGrabButton.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 784a862..8b96d09
@@ -1 +1 @@
-.so manlibmansuffix/XIGrabDevice.libmansuffix
+.so XIGrabDevice.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index ebd8b17..0af5699
@@ -1 +1 @@
-.so manlibmansuffix/XIGrabEnter.libmansuffix
+.so XIGrabEnter.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index ebd8b17..0af5699
@@ -1 +1 @@
-.so manlibmansuffix/XIGrabEnter.libmansuffix
+.so XIGrabEnter.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index beed4f1..d6764b5
@@ -1 +1 @@
-.so manlibmansuffix/XIGrabButton.libmansuffix
+.so XIGrabButton.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 73a2d49..a234a47
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xiwarppointer
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XIWARPPOINTER" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XIWARPPOINTER" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -19,7 +28,7 @@
 .\" * MAIN CONTENT STARTS HERE *
 .\" -----------------------------------------------------------------
 .SH "NAME"
-XIWarpPointer \- move a device\'s pointer\&.
+XIWarpPointer \- move a device\*(Aqs pointer\&.
 .SH "SYNOPSIS"
 .sp
 .nf
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 24c93c7..49785d4
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xlistdeviceproperties
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XLISTDEVICEPROPERTIE" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XLISTDEVICEPROPERTIE" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -19,7 +28,7 @@
 .\" * MAIN CONTENT STARTS HERE *
 .\" -----------------------------------------------------------------
 .SH "NAME"
-XListDeviceProperties \- List a device\'s properties\&.
+XListDeviceProperties \- List a device\*(Aqs properties\&.
 .SH "SYNOPSIS"
 .sp
 .nf
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 44e145f..94df402
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xlistinputdevices
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XLISTINPUTDEVICES" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XLISTINPUTDEVICES" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 8aa8e65..413f2fd
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xopendevice
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XOPENDEVICE" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XOPENDEVICE" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index f55f0ce..976fc29
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xquerydevicestate
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XQUERYDEVICESTATE" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XQUERYDEVICESTATE" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 07eecb6..e79566a
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xselectextensionevent
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 10/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 01/18/2012
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XSELECTEXTENSIONEVEN" "libmansuffix" "10/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XSELECTEXTENSIONEVEN" "libmansuffix" "01/18/2012" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -145,7 +154,7 @@ clients use in making XSelectExtensionEvent requests\&. Currently
 defined macros include DeviceKeyPress, DeviceKeyRelease,
 DeviceButtonPress, DeviceButtonRelese, DeviceMotionNotify,
 DeviceFocusIn, DeviceFocusOut, ProximityIn, ProximityOut,
-DeviceStateNotify, DeviceMappiingNotify, ChangeDeviceNotify,
+DeviceStateNotify, DeviceMappingNotify, ChangeDeviceNotify,
 DevicePointerMotionHint, DeviceButton1Motion,
 DeviceButton2Motion, DeviceButton3Motion, DeviceButton4Motion,
 DeviceButton5Motion, DeviceButtonMotion, DeviceOwnerGrabButton,
old mode 100755 (executable)
new mode 100644 (file)
index cbcfffe..95e0ac7
@@ -86,7 +86,7 @@ DESCRIPTION
    defined macros include DeviceKeyPress, DeviceKeyRelease,
    DeviceButtonPress, DeviceButtonRelese, DeviceMotionNotify,
    DeviceFocusIn, DeviceFocusOut, ProximityIn, ProximityOut,
-   DeviceStateNotify, DeviceMappiingNotify, ChangeDeviceNotify,
+   DeviceStateNotify, DeviceMappingNotify, ChangeDeviceNotify,
    DevicePointerMotionHint, DeviceButton1Motion,
    DeviceButton2Motion, DeviceButton3Motion, DeviceButton4Motion,
    DeviceButton5Motion, DeviceButtonMotion, DeviceOwnerGrabButton,
old mode 100755 (executable)
new mode 100644 (file)
index a23b539..4d298a5
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xsendextensionevent
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XSENDEXTENSIONEVENT" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XSENDEXTENSIONEVENT" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -177,7 +186,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 1489459..223b6d7
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xsetdevicebuttonmapping
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XSETDEVICEBUTTONMAPP" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XSETDEVICEBUTTONMAPP" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -163,7 +172,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 95f0a00..850802b
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xsetdevicefocus
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XSETDEVICEFOCUS" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XSETDEVICEFOCUS" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
@@ -119,7 +128,7 @@ Depending on the focus argument, the following occurs:
   * If focus is None , all device events are discarded until a
     new focus window is set, and the revert_to argument is
     ignored\&.
-  * If focus is a window, it becomes the device\'s focus window\&.
+  * If focus is a window, it becomes the device\*(Aqs focus window\&.
     If a generated device event would normally be reported to
     this window or one of its inferiors, the event is reported
     as usual\&. Otherwise, the event is reported relative to the
@@ -212,7 +221,7 @@ current focus state\&.
 .\}
 .nf
 Not all input extension devices can be focused\&. Attempting to
-query the focus state of a device that can\'t be focused results
+query the focus state of a device that can\*(Aqt be focused results
 in a BadMatch error\&. A device that can be focused returns
 information for input Class Focus when an XOpenDevice request
 is made\&.
@@ -254,7 +263,7 @@ BadValue
        Some numeric value falls outside the range of values
        accepted by the request\&. Unless a specific range is
        specified for an argument, the full range defined by the
-       argument\'s type is accepted\&. Any argument defined as a
+       argument\*(Aqs type is accepted\&. Any argument defined as a
        set of alternatives can generate this error\&.
 .fi
 .if n \{\
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 07f6106..0679271
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xsetdevicemode
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XSETDEVICEMODE" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XSETDEVICEMODE" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 1f3aa2d..3362ea9
@@ -1 +1 @@
-.so manlibmansuffix/XGetDeviceModifierMapping.libmansuffix
+.so XGetDeviceModifierMapping.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index ceddda4..d24326e
@@ -1,13 +1,22 @@
 '\" t
 .\"     Title: xsetdevicevaluators
 .\"    Author: [FIXME: author] [see http://docbook.sf.net/el/author]
-.\" Generator: DocBook XSL Stylesheets v1.75.2 <http://docbook.sf.net/>
-.\"      Date: 09/07/2010
+.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
+.\"      Date: 09/23/2011
 .\"    Manual: [FIXME: manual]
 .\"    Source: [FIXME: source]
 .\"  Language: English
 .\"
-.TH "XSETDEVICEVALUATORS" "libmansuffix" "09/07/2010" "[FIXME: source]" "[FIXME: manual]"
+.TH "XSETDEVICEVALUATORS" "libmansuffix" "09/23/2011" "[FIXME: source]" "[FIXME: manual]"
+.\" -----------------------------------------------------------------
+.\" * Define some portability stuff
+.\" -----------------------------------------------------------------
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.\" http://bugs.debian.org/507673
+.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
+.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+.ie \n(.g .ds Aq \(aq
+.el       .ds Aq '
 .\" -----------------------------------------------------------------
 .\" * set default formatting
 .\" -----------------------------------------------------------------
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index f7925d1..92a0ec7
@@ -1 +1 @@
-.so manlibmansuffix/XGrabDevice.libmansuffix
+.so XGrabDevice.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index aed816d..1131aaf
@@ -1 +1 @@
-.so manlibmansuffix/XGrabDeviceButton.libmansuffix
+.so XGrabDeviceButton.libmansuffix
old mode 100755 (executable)
new mode 100644 (file)
index 19849bb..e57f8ef
@@ -1 +1 @@
-.so manlibmansuffix/XGrabDeviceKey.libmansuffix
+.so XGrabDeviceKey.libmansuffix
diff --git a/packaging/libXi.spec b/packaging/libXi.spec
new file mode 100644 (file)
index 0000000..1c3b5bb
--- /dev/null
@@ -0,0 +1,90 @@
+%global tarball libXi
+#global gitdate 20111222
+#global gitversion ae0187c87
+
+Summary: X.Org X11 libXi runtime library
+Name: libXi
+Version: 1.6.1
+Release: 1
+License: MIT
+Group: System Environment/Libraries
+URL: http://www.x.org
+
+Source0:    %{name}-%{version}.tar.gz
+
+
+BuildRequires: autoconf automake libtool
+BuildRequires: xorg-x11-xutils-dev
+BuildRequires:  pkgconfig(xorg-macros)
+BuildRequires:  pkgconfig(xproto)
+BuildRequires: pkgconfig(inputproto) >= 2.1.99.6
+BuildRequires: libX11-devel >= 1.4.99.1
+BuildRequires: libXext-devel
+
+Requires: libX11 >= 1.4.99.1
+
+%description
+X.Org X11 libXi runtime library
+
+%package devel
+Summary: X.Org X11 libXi development package
+Group: Development/Libraries
+Provides: libxi-devel 
+Requires: %{name} = %{version}-%{release}
+# required by xi.pc
+Requires: pkgconfig(xorg-macros)
+Requires: pkgconfig(xproto)
+Requires: pkgconfig(inputproto) >= 2.1.99.6
+Requires: pkgconfig
+
+%description devel
+X.Org X11 libXi development package
+
+%prep
+%setup -q
+
+# Disable static library creation by default.
+%define with_static 0
+
+%build
+autoreconf -v --install || exit 1
+%reconfigure --disable-specs \
+              --disable-static \
+              CFLAGS="${CFLAGS} " \
+              LDFLAGS="${LDFLAGS} -Wl,--hash-style=both -Wl,--as-needed"
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf $RPM_BUILD_ROOT
+
+make install DESTDIR=$RPM_BUILD_ROOT
+
+# We intentionally don't ship *.la files
+rm -f $RPM_BUILD_ROOT%{_libdir}/*.la
+
+%remove_docs
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%post -p /sbin/ldconfig
+%postun -p /sbin/ldconfig
+
+%files
+%defattr(-,root,root,-)
+%doc COPYING
+%{_libdir}/libXi.so.6
+%{_libdir}/libXi.so.6.1.0
+
+%files devel
+%defattr(-,root,root,-)
+%if %{with_static}
+%{_libdir}/libXi.a
+%endif
+%{_includedir}/X11/extensions/XInput.h
+%{_includedir}/X11/extensions/XInput2.h
+%{_libdir}/libXi.so
+%{_libdir}/pkgconfig/xi.pc
+#%dir %{_mandir}/man3x
+#%{_mandir}/man3/*.3*
\ No newline at end of file
diff --git a/packaging/libxi.spec b/packaging/libxi.spec
deleted file mode 100644 (file)
index f83da69..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-
-Name:       libxi
-Summary:    X.Org X11 libXi runtime library
-Version:    1.4.0
-Release:    2.6
-Group:      System/Libraries
-License:    MIT
-URL:        http://www.x.org/
-Source0:    http://xorg.freedesktop.org/releases/individual/lib/%{name}-%{version}.tar.gz
-Requires(post):  /sbin/ldconfig
-Requires(postun):  /sbin/ldconfig
-BuildRequires:  pkgconfig(xorg-macros)
-BuildRequires:  pkgconfig(xproto)
-BuildRequires:  pkgconfig(x11)
-BuildRequires:  pkgconfig(xextproto)
-BuildRequires:  pkgconfig(xext)
-BuildRequires:  pkgconfig(inputproto)
-
-
-%description
-Description: %{summary}
-
-
-%package devel
-Summary:    Development components for the libXi library
-Group:      Development/Libraries
-Requires:   %{name} = %{version}-%{release}
-
-%description devel
-Description: %{summary}
-
-
-%prep
-%setup -q -n %{name}-%{version}
-
-
-%build
-export LDFLAGS+=" -Wl,--hash-style=both -Wl,--as-needed"
-export CFLAGS+=" -D_F_ENABLE_XI2_SENDEVENT_"
-%reconfigure 
-
-# Call make instruction with smp support
-make %{?jobs:-j%jobs}
-
-%install
-rm -rf %{buildroot}
-%make_install
-
-
-%clean
-rm -rf %{buildroot}
-
-
-
-%post -p /sbin/ldconfig
-
-%postun -p /sbin/ldconfig
-
-
-
-%files
-%defattr(-,root,root,-)
-%{_libdir}/libXi.so.6
-%{_libdir}/libXi.so.6.1.0
-%doc COPYING
-
-
-%files devel
-%defattr(-,root,root,-)
-%{_includedir}/X11/extensions/XInput.h
-%{_includedir}/X11/extensions/XInput2.h
-%{_libdir}/libXi.so
-%{_libdir}/pkgconfig/xi.pc
-
old mode 100755 (executable)
new mode 100644 (file)
index 93e8e85..287f6f0
@@ -1,68 +1,16 @@
-#
-# Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# the rights to use, copy, modify, merge, publish, distribute, sublicense,
-# and/or sell copies of the Software, and to permit persons to whom the
-# Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) 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 AUTHORS OR COPYRIGHT HOLDERS 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.
-#
 
 if ENABLE_SPECS
 
-specdir = $(docdir)/$(subdir)
-doc_sources = inputlib.xml
-dist_spec_DATA = $(doc_sources)        \
-       library.xml             \
-       encoding.xml
+# Main DocBook/XML files (DOCTYPE book)
+docbook = inputlib.xml
 
-if HAVE_XMLTO
-spec_DATA = $(doc_sources:.xml=.html)
+# Included chapters, appendix, images
+chapters = library.xml encoding.xml
 
-if HAVE_FOP
-spec_DATA += $(doc_sources:.xml=.ps) $(doc_sources:.xml=.pdf)
-endif
+# The location where the DocBook/XML files and their generated formats are installed
+shelfdir = $(docdir)
 
-if HAVE_XMLTO_TEXT
-spec_DATA += $(doc_sources:.xml=.txt)
-endif
+# Generate DocBook/XML output formats with or without stylesheets
+include $(top_srcdir)/docbook.am
 
-if HAVE_STYLESHEETS
-XMLTO_FLAGS = -m $(XSL_STYLESHEET)
-
-spec_DATA += xorg.css
-xorg.css: $(STYLESHEET_SRCDIR)/xorg.css
-       $(AM_V_GEN)cp -pf $(STYLESHEET_SRCDIR)/xorg.css $@
-endif
-
-CLEANFILES = $(spec_DATA)
-
-SUFFIXES = .xml .ps .pdf .txt .html
-
-%.txt: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) txt $<
-
-%.html: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) xhtml-nochunks $<
-
-%.pdf: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop pdf $<
-
-%.ps: %.xml $(dist_spec_DATA)
-       $(AM_V_GEN)$(XMLTO) $(XMLTO_FLAGS) --with-fop ps $<
-
-endif HAVE_XMLTO
 endif ENABLE_SPECS
old mode 100755 (executable)
new mode 100644 (file)
index 7b4bceb..33318d1
@@ -1,4 +1,4 @@
-<appendix id="input_extension_protocol_encoding">
+<appendix id="Input_Extension_Protocol_Encoding">
 <title>Input Extension Protocol Encoding</title>
 <para>
 <function>Syntactic Conventions</function>
old mode 100755 (executable)
new mode 100644 (file)
index 526fede..0c562a2
@@ -1,12 +1,16 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
-                   "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+                   "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd"
+[
+<!ENTITY % defs SYSTEM "defs.ent"> %defs;
+]>
 
 <book id="inputlib">
 
 <bookinfo>
-   <title>X11 Input Extension Protocol Specification</title>
-   <releaseinfo>X Version 11, Release 6.4</releaseinfo>
+   <title>X Input Device Extension Library</title>
+   <releaseinfo>X Version 11, Release &fullrelvers;</releaseinfo>
+   <releaseinfo>Version 1.0</releaseinfo>
    <authorgroup>
       <author>
          <firstname>Mark</firstname><surname>Patrick</surname>
          <affiliation><orgname>Hewlett-Packard</orgname></affiliation>
       </othercredit>
    </authorgroup>
-   <copyright><year>1989</year><holder>Hewlett-Packard Company and Ardent Computer</holder></copyright>
-   <copyright><year>1990</year><holder>Hewlett-Packard Company and Ardent Computer</holder></copyright>
-   <copyright><year>1991</year><holder>Hewlett-Packard Company and Ardent Computer</holder></copyright>
-
-   <copyright><year>1989</year><holder>X Consortium</holder></copyright>
-   <copyright><year>1990</year><holder>X Consortium</holder></copyright>
-   <copyright><year>1991</year><holder>X Consortium</holder></copyright>
-   <copyright><year>1992</year><holder>X Consortium</holder></copyright>
-
-   <releaseinfo>1.0</releaseinfo>
-   <productnumber>X Version 11, Release 6.4</productnumber>
+   <copyright><year>1989</year><year>1990</year><year>1991</year>
+     <holder>Hewlett-Packard Company</holder>
+     <holder>Ardent Computer</holder>
+   </copyright>
 
 <legalnotice>
-
 <para>
 Permission to use, copy, modify, and distribute this documentation for any purpose and without
 fee is hereby granted, provided that the above copyright notice and this permission notice appear
@@ -38,12 +34,23 @@ in all copies. Ardent and Hewlett-Packard make no representations about the suit
 purpose of the information in this document. It is provided "as is" without express or implied
 warranty.
 </para>
+</legalnotice>
 
+<legalnotice>
+<para role="multiLicensing">
+Copyright &copy; 1989, 1990, 1991, 1992 X Consortium
+</para>
+<para>
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
+associated documentation files (the â€˜â€˜Software’’), to deal in the Software without restriction,
+including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+</para>
 <para>
 The above copyright notice and this permission notice shall be included in all 
 copies or substantial portions of the Software.
 </para>
-
 <para>
 THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, 
 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 
@@ -53,17 +60,15 @@ 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.
 </para>
-
 <para>
-Except as contained in this notice, the name of The Open Group shall not 
+Except as contained in this notice, the name of the X Consortium 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 X Consortium.
 </para>
-
-<para>X Window System is a trademark of X Consortium, Inc.</para>
-
+<para>X Window System is a trademark of The Open Group.</para>
 </legalnotice>
 </bookinfo>
+
 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"  href="library.xml"/>
 <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"  href="encoding.xml"/>
 </book>
old mode 100755 (executable)
new mode 100644 (file)
index f399800..b65b234
@@ -1,5 +1,5 @@
 <chapter><title>Input Extension</title>
-<sect1 id="Input_Extension_Overview">
+<sect1 id='Overview'>
 <title>Overview</title>
 <!-- .XS -->
 <!-- (SN Input Extension Overview -->
@@ -211,7 +211,7 @@ The device supports feedbacks.
 <!-- .LP -->
 Additional classes may be added in the future.
 Functions that support multiple input classes, such as the 
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 function that lists all available input devices,
 organize the data they return by input class.  Client programs that
 use these functions should not access data unless it matches a 
@@ -235,24 +235,24 @@ that a client would make is as follows:
 <itemizedlist>
   <listitem>
     <para>
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 - lists all of the available input devices.  From the 
 information returned by this request, determine whether the desired input
 device is attached to the server.  For a description of the 
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 request, see the section entitled ``Listing Available Devices.''
     </para>
   </listitem>
   <listitem>
     <para>
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 - requests that the server open the device for access by this client.
 This request returns an 
 <function>XDevice</function>
 structure that is used
 by most other input extension requests to identify the specified device.
 For a description of the 
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 request, see the section entitled ``Enabling and Disabling Extension Devices.''
     </para>
   </listitem>
@@ -269,7 +269,7 @@ see the section entitled ``Selecting Extension Device Events.''
   </listitem>
   <listitem>
     <para>
-<function>XSelectExtensionEvent</function>
+<xref linkend='XSelectExtensionEvent' xrefstyle='select: title'/>
 - selects the desired events from the server.
 For a description of the 
 <function>XSelextExtensionEvent</function>
@@ -278,9 +278,9 @@ request, see the section entitled ``Selecting Extension Device Events.''
   </listitem>
   <listitem>
     <para>
-<function>XNextEvent</function>
+<olink targetdoc='libX11' targetptr='XNextEvent'><function>XNextEvent</function></olink>
 - receives the next available event.  This is the core
-<function>XNextEvent</function>
+<olink targetdoc='libX11' targetptr='XNextEvent'><function>XNextEvent</function></olink>
 function provided by the standard X libarary.
     </para>
   </listitem>
@@ -457,7 +457,7 @@ is treated as a core device until it is in turn replaced by another
 request or until the server terminates.  The termination
 of the client that changed the device will not cause it to change back.
 Attempts to use the
-<function>XCloseDevice</function>
+<xref linkend='XCloseDevice' xrefstyle='select: title'/>
 request to close the new core device will fail with a
 <function>BadDevice</function>
 error.
@@ -466,7 +466,7 @@ error.
 <para>
 <!-- .LP -->
 To change which physical device is used as the X keyboard, use the 
-<function>XChangeKeyboardDevice</function>
+<xref linkend='XChangeKeyboardDevice' xrefstyle='select: title'/>
 function.
 The specified device must support input class 
 <function>Keys</function>
@@ -479,7 +479,7 @@ error.
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangeKeyboardDevice'>
 <funcprototype>
   <funcdef>int <function> XChangeKeyboardDevice</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -514,7 +514,7 @@ Specifies the desired device.
 <!-- .LP -->
 <!-- .eM -->
 If no error occurs, 
-<function>XChangeKeyboardDevice</function>
+<xref linkend='XChangeKeyboardDevice' xrefstyle='select: title'/>
 returns 
 <function>Success .</function>
 A 
@@ -534,7 +534,7 @@ the focus state of the old X keyboard.
 </para>
 <para>
 <!-- .LP -->
-<function>XChangeKeyboardDevice</function>
+<xref linkend='XChangeKeyboardDevice' xrefstyle='select: title'/>
 can generate
 <function>AlreadyGrabbed ,</function>
 <function>BadDevice ,</function>
@@ -548,12 +548,12 @@ errors.
 <!-- .LP -->
 To change which physical device is used as the X pointer,
 use the
-<function>XChangePointerDevice</function>
+<xref linkend='XChangePointerDevice' xrefstyle='select: title'/>
 function.
 The specified device must support input class 
 <function>Valuators</function>
 (as reported in the
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 request) and report at least two axes of motion,
 or the request will fail with a 
 <function>BadMatch</function>
@@ -570,7 +570,7 @@ X pointer, the request will fail with a
 <function>BadDevice</function>
 error.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangePointerDevice'>
 <funcprototype>
   <funcdef>int <function> XChangePointerDevice</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -629,7 +629,7 @@ pointer device.
 <!-- .LP -->
 <!-- .eM -->
 If no error occurs, 
-<function>XChangePointerDevice</function>
+<xref linkend='XChangePointerDevice' xrefstyle='select: title'/>
 returns 
 <function>Success .</function>
 A 
@@ -647,7 +647,7 @@ available as an extension input device.
 </para>
 <para>
 <!-- .LP -->
-<function>XChangePointerDevice</function>
+<xref linkend='XChangePointerDevice' xrefstyle='select: title'/>
 can generate
 <function>AlreadyGrabbed ,</function>
 <function>BadDevice ,</function>
@@ -674,15 +674,15 @@ with a single request.
 The core grab requests require a pointer_mode and keyboard_mode
 argument.  The meaning of these modes is changed by the input extension.
 For the
-<function>XGrabPointer</function>
+<olink targetdoc='libX11' targetptr='XGrabPointer'><function>XGrabPointer</function></olink>
 and 
-<function>XGrabButton</function>
+<olink targetdoc='libX11' targetptr='XGrabButton'><function>XGrabButton</function></olink>
 requests, pointer_mode controls synchronization of the pointer device, 
 and keyboard_mode controls the synchronization of all other input devices.  
 For the 
-<function>XGrabKeyboard</function>
+<olink targetdoc='libX11' targetptr='XGrabKeyboard'><function>XGrabKeyboard</function></olink>
 and
-<function>XGrabKey</function>
+<olink targetdoc='libX11' targetptr='XGrabKey'><function>XGrabKey</function></olink>
 requests, pointer_mode controls the synchronization
 of all input devices, except the X keyboard, while keyboard_mode controls
 the synchronization of the keyboard.  When using one of the core grab
@@ -699,40 +699,40 @@ is controlled by the mode specified for the device not being grabbed.
 <!-- .LP -->
 Active grabs of
 extension devices are supported via the 
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
 function in the same way that core devices are grabbed using the core 
-<function>XGrabKeyboard</function>
+<olink targetdoc='libX11' targetptr='XGrabKeyboard'><function>XGrabKeyboard</function></olink>
 function, except that an extension input device
 is passed as a function parameter.  
 The 
-<function>XUngrabDevice</function>
+<xref linkend='XUngrabDevice' xrefstyle='select: title'/>
 function allows a previous active grab for an extension device to be released.
 </para>
 <para>
 <!-- .LP -->
 Passive grabs of buttons and keys on extension devices are supported
 via the 
-<function>XGrabDeviceButton</function>
+<xref linkend='XGrabDeviceButton' xrefstyle='select: title'/>
 and 
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 functions.
 These passive grabs are released via the
-<function>XUngrabDeviceKey</function>
+<xref linkend='XUngrabDeviceKey' xrefstyle='select: title'/>
 and
-<function>XUngrabDeviceButton</function>
+<xref linkend='XUngrabDeviceButton' xrefstyle='select: title'/>
 functions.
 <!-- .sp -->
 </para>
 <para>
 <!-- .LP -->
 To grab an extension device, use the
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
 function.
 The device must have previously been opened using the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 function.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGrabDevice'>
 <funcprototype>
   <funcdef>int <function> XGrabDevice</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -859,7 +859,7 @@ milliseconds or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
 actively grabs an extension input device and generates 
 <function>DeviceFocusIn</function>
 and 
@@ -903,7 +903,7 @@ the state of the grabbed device
 (as seen by client applications) appears to freeze,
 and no further device events are generated by the server until the
 grabbing client issues a releasing 
-<function>XAllowDeviceEvents</function>
+<xref linkend='XAllowDeviceEvents' xrefstyle='select: title'/>
 call or until the device grab is released.
 Actual device input events are not lost while the device is frozen; they are
 simply queued for later processing.
@@ -921,9 +921,9 @@ the state of all devices except the grabbed device
 (as seen by client applications) appears to freeze, and no further
 events are generated by the server until the grabbing client issues a
 releasing 
-<function>XAllowEvents</function>
+<olink targetdoc='libX11' targetptr='XAllowEvents'><function>XAllowEvents</function></olink>
 or 
-<function>XAllowDeviceEvents</function>
+<xref linkend='XAllowDeviceEvents' xrefstyle='select: title'/>
 call or until the device grab is released.
 Actual events are not lost
 while the other devices are frozen; they are simply queued for later
@@ -933,7 +933,7 @@ processing.
 </itemizedlist>
 <para>
 <!-- .LP -->
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
 fails on the following conditions:
 </para>
 <itemizedlist>
@@ -979,7 +979,7 @@ of the requesting client, it is thawed.
 </para>
 <para>
 <!-- .LP -->
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
 can generate
 <function>BadClass ,</function>
 <function>BadDevice ,</function>
@@ -992,13 +992,13 @@ errors.
 <para>
 <!-- .LP -->
 To release a grab of an extension device, use the
-<function>XUngrabDevice</function>
+<xref linkend='XUngrabDevice' xrefstyle='select: title'/>
 function.
 </para>
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XUngrabDevice'>
 <funcprototype>
   <funcdef>int <function> XUngrabDevice</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -1045,14 +1045,14 @@ milliseconds, or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XUngrabDevice</function>
+<xref linkend='XUngrabDevice' xrefstyle='select: title'/>
 allows a client to release an extension input device and any
 queued events if this client has it grabbed from either
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
 or
 <function>XGrabDeviceKey .</function>
 If any other devices are frozen by the grab,
-<function>XUngrabDevice</function>
+<xref linkend='XUngrabDevice' xrefstyle='select: title'/>
 thaws them. 
 This function does not release the device and any
 queued events if the specified time is earlier than the last-device-grab
@@ -1061,13 +1061,13 @@ time or is later than the current X server time.  It also generates
 and 
 <function>DeviceFocusOut</function>
 events.  The X server automatically performs an
-<function>XUngrabDevice</function>
+<xref linkend='XUngrabDevice' xrefstyle='select: title'/>
 if the event window for an active device grab becomes not viewable
 or if the client terminates without releasing the grab.
 </para>
 <para>
 <!-- .LP -->
-<function>XUngrabDevice</function>
+<xref linkend='XUngrabDevice' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 errors.
@@ -1083,7 +1083,7 @@ errors.
 To passively grab a single key on an extension device, use
 <function>XGrabDeviceKey .</function>
 That device must have previously been opened using the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 function, or the request will fail with a
 <function>BadDevice</function>
 error.  
@@ -1093,7 +1093,7 @@ the request will fail with a
 <function>BadMatch</function>
 error.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGrabDeviceKey'>
 <funcprototype>
   <funcdef>int <function> XGrabDeviceKey</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -1265,13 +1265,13 @@ or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 is analogous to the core 
-<function>XGrabKey</function>
+<olink targetdoc='libX11' targetptr='XGrabKey'><function>XGrabKey</function></olink>
 function.  It creates an
 explicit passive grab for a key on an extension device.
 The 
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 function establishes a passive grab on a device.
 Consequently, in the future, 
 </para>
@@ -1341,21 +1341,21 @@ is equivalent to issuing
 the request for all possible keycodes.  Otherwise, the key must be in
 the range specified by min_keycode and max_keycode in the 
 information returned by the
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 function.
 If it is not within that range, 
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 generates a
 <function>BadValue</function>
 error.
 </para>
 <para>
 <!-- .LP -->
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 generates a
 <function>BadAccess</function>
 error if some other client has issued a 
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 with the same device and key combination on the same window.
 When using
 <function>AnyModifier</function>
@@ -1368,14 +1368,14 @@ for any combination.
 </para>
 <para>
 <!-- .LP -->
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 returns
 <function>Success</function>
 upon successful completion of the request.
 </para>
 <para>
 <!-- .LP -->
-<function>XGrabDeviceKey</function>
+<xref linkend='XGrabDeviceKey' xrefstyle='select: title'/>
 can generate
 <function>BadAccess ,</function>
 <function>BadClass ,</function>
@@ -1392,7 +1392,7 @@ errors.
 To release a passive grab of a single key on an extension device, use
 <function>XUngrabDeviceKey .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XUngrabDeviceKey'>
 <funcprototype>
   <funcdef>int <function> XUngrabDeviceKey</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -1497,15 +1497,15 @@ Specifies the ID of a window associated with the device specified above.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XUngrabDeviceKey</function>
+<xref linkend='XUngrabDeviceKey' xrefstyle='select: title'/>
 is analogous to the core
-<function>XUngrabKey</function>
+<olink targetdoc='libX11' targetptr='XUngrabKey'><function>XUngrabKey</function></olink>
 function.  It releases an explicit passive grab for a key 
 on an extension input device.
 </para>
 <para>
 <!-- .LP -->
-<function>XUngrabDeviceKey</function>
+<xref linkend='XUngrabDeviceKey' xrefstyle='select: title'/>
 can generate
 <function>BadAlloc ,</function>
 <function>BadDevice ,</function>
@@ -1526,7 +1526,7 @@ errors.
 To establish a passive grab for a single button on an extension device, use
 <function>XGrabDeviceButton .</function>
 The specified device must have previously been opened using the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 function, or the request will fail with a 
 <function>BadDevice</function>
 error.  If the specified device does not support input class
@@ -1535,7 +1535,7 @@ the request will fail with a
 <function>BadMatch</function>
 error.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGrabDeviceButton'>
 <funcprototype>
   <funcdef>int <function> XGrabDeviceButton</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -1707,22 +1707,22 @@ or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGrabDeviceButton </function>
+<xref linkend='XGrabDeviceButton' xrefstyle='select: title'/>
 is analogous to the core
-<function>XGrabButton</function>
+<olink targetdoc='libX11' targetptr='XGrabButton'><function>XGrabButton</function></olink>
 function.  
 It creates an explicit passive grab for a button on an extension input device.
 Because the server does not track extension devices,
 no cursor is specified with this request.
 For the same reason, there is no confine_to parameter.
 The device must have previously been opened using the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 function.
 </para>
 <para>
 <!-- .LP -->
 The
-<function>XGrabDeviceButton</function>
+<xref linkend='XGrabDeviceButton' xrefstyle='select: title'/>
 function establishes a passive grab on a device.
 Consequently, in the future, 
 </para>
@@ -1790,11 +1790,11 @@ specified button be assigned to a physical button.
 </para>
 <para>
 <!-- .LP -->
-<function>XGrabDeviceButton</function>
+<xref linkend='XGrabDeviceButton' xrefstyle='select: title'/>
 generates a
 <function>BadAccess</function>
 error if some other client has issued a 
-<function>XGrabDeviceButton</function>
+<xref linkend='XGrabDeviceButton' xrefstyle='select: title'/>
 with the same device and button combination on the same window.  
 When using
 <function>AnyModifier</function>
@@ -1807,7 +1807,7 @@ established if there is a conflicting grab for any combination.
 </para>
 <para>
 <!-- .LP -->
-<function>XGrabDeviceButton</function>
+<xref linkend='XGrabDeviceButton' xrefstyle='select: title'/>
 can generate
 <function>BadAccess , </function>
 <function>BadClass ,</function>
@@ -1824,7 +1824,7 @@ errors.
 To release a passive grab of a button on an extension device, use 
 <function>XUngrabDeviceButton .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XUngrabDeviceButton'>
 <funcprototype>
   <funcdef>int <function> XUngrabDeviceButton</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -1929,13 +1929,13 @@ Specifies the ID of a window associated with the device specified above.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XUngrabDeviceButton </function>
+<xref linkend='XUngrabDeviceButton' xrefstyle='select: title'/>
 is analogous to the core
-<function>XUngrabButton</function>
+<olink targetdoc='libX11' targetptr='XUngrabButton'><function>XUngrabButton</function></olink>
 function.  It releases an explicit passive grab for a button
 on an extension device.
 That device must have previously been opened using the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 function, or a
 <function>BadDevice</function>
 error will result.
@@ -1950,7 +1950,7 @@ modifiers).
 </para>
 <para>
 <!-- .LP -->
-<function>XUngrabDeviceButton </function>
+<xref linkend='XUngrabDeviceButton' xrefstyle='select: title'/>
 can generate
 <function>BadAlloc , </function>
 <function>BadDevice ,</function>
@@ -1971,7 +1971,7 @@ errors.
 To allow further events to be processed when a device has been frozen, use
 <function>XAllowDeviceEvents .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XAllowDeviceEvents'>
 <funcprototype>
   <funcdef>int <function> XAllowDeviceEvents</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -2036,7 +2036,7 @@ milliseconds, or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XAllowDeviceEvents</function>
+<xref linkend='XAllowDeviceEvents' xrefstyle='select: title'/>
 releases some queued events if the client has caused a device to freeze.
 It has no effect if the specified time is earlier than the last-grab 
 time of the most recent active grab for the client and device, 
@@ -2198,7 +2198,7 @@ again be processed.
 </para>
 <para>
 <!-- .LP -->
-<function>XAllowDeviceEvents</function>
+<xref linkend='XAllowDeviceEvents' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 and 
@@ -2215,12 +2215,12 @@ errors.
 <!-- .LP -->
 The current focus window for an extension input device can be 
 determined using the
-<function>XGetDeviceFocus</function>
+<xref linkend='XGetDeviceFocus' xrefstyle='select: title'/>
 function.
 Extension devices are focused using the
-<function>XSetDeviceFocus</function>
+<xref linkend='XSetDeviceFocus' xrefstyle='select: title'/>
 function in the same way that the keyboard is focused using the core
-<function>XSetInputFocus</function>
+<olink targetdoc='libX11' targetptr='XSetInputFocus'><function>XSetInputFocus</function></olink>
 function, except that a device ID is passed as
 a function parameter.  One additional focus state,
 <function>FollowKeyboard ,</function>
@@ -2232,7 +2232,7 @@ To get the current focus state, revert state,
 and focus time of an extension device, use
 <function>XGetDeviceFocus .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceFocus'>
 <funcprototype>
   <funcdef>int <function> XGetDeviceFocus</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -2306,13 +2306,13 @@ return the focus time last set for the device.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetDeviceFocus</function>
+<xref linkend='XGetDeviceFocus' xrefstyle='select: title'/>
 returns the focus state, the revert-to state,
 and the last-focus-time for an extension input device.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceFocus</function>
+<xref linkend='XGetDeviceFocus' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 and
@@ -2325,7 +2325,7 @@ errors.
 To set the focus of an extension device, use
 <function>XSetDeviceFocus .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XSetDeviceFocus'>
 <funcprototype>
   <funcdef>int <function> XSetDeviceFocus</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -2406,7 +2406,7 @@ milliseconds, or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XSetDeviceFocus</function>
+<xref linkend='XSetDeviceFocus' xrefstyle='select: title'/>
 changes the focus for an extension input device and the 
 last-focus-change-time.  It has no effect if the specified 
 time is earlier than the last-focus-change-time or is later than the
@@ -2462,7 +2462,7 @@ of the X keyboard at each input event.
 <para>
 <!-- .LP -->
 The specified focus window must be viewable at the time
-<function>XSetDeviceFocus</function>
+<xref linkend='XSetDeviceFocus' xrefstyle='select: title'/>
 is called.  Otherwise, it generates a
 <function>BadMatch</function>
 error.
@@ -2502,7 +2502,7 @@ events, but the last-focus-change time is not affected.
 </para>
 <para>
 <!-- .LP -->
-<function>XSetDeviceFocus</function>
+<xref linkend='XSetDeviceFocus' xrefstyle='select: title'/>
 can generate
 <function>BadDevice ,</function>
 <function>BadMatch , </function>
@@ -2522,7 +2522,7 @@ errors.
 To determine the current feedback settings of an extension input device, use
 <function>XGetFeedbackControl .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetFeedbackControl'>
 <funcprototype>
   <funcdef>XFeedbackState * <function> XGetFeedbackControl</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -2567,7 +2567,7 @@ Returns the number of feedbacks supported by the device.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetFeedbackControl</function>
+<xref linkend='XGetFeedbackControl' xrefstyle='select: title'/>
 returns a list of
 <function>FeedbackState</function>
 structures that describe the feedbacks supported by the specified device.
@@ -2821,7 +2821,7 @@ Clients set these feedbacks by passing a list of
 <function>KeySyms</function>
 to be displayed.
 The 
-<function>XGetFeedbackControl</function>
+<xref linkend='XGetFeedbackControl' xrefstyle='select: title'/>
 function returns the
 set of key symbols that the feedback can display, as well as the 
 maximum number of symbols that can be displayed.
@@ -2940,7 +2940,7 @@ typedef struct {
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetFeedbackControl</function>
+<xref linkend='XGetFeedbackControl' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 and
@@ -2951,11 +2951,11 @@ errors.
 <para>
 <!-- .LP -->
 To free the information returned by the
-<function>XGetFeedbackControl</function>
+<xref linkend='XGetFeedbackControl' xrefstyle='select: title'/>
 function, use 
 <function>XFreeFeedbackList .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XFreeFeedbackList'>
 <funcprototype>
   <funcdef>void <function> XFreeFeedbackList</function></funcdef>
   <paramdef>XFeedbackState<parameter> *list</parameter></paramdef>
@@ -2982,7 +2982,7 @@ a previous call to
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XFreeFeedbackList</function>
+<xref linkend='XFreeFeedbackList' xrefstyle='select: title'/>
 frees the list of feedback control information.
 <!-- .sp -->
 </para>
@@ -2996,7 +2996,7 @@ using information passed in the appropriate
 structure for the feedback.
 Which values are modified depends on the valuemask passed.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangeFeedbackControl'>
 <funcprototype>
   <funcdef>int <function> XChangeFeedbackControl</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -3056,7 +3056,7 @@ structure.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XChangeFeedbackControl</function>
+<xref linkend='XChangeFeedbackControl' xrefstyle='select: title'/>
 controls the device characteristics described by the
 <function>XFeedbackControl</function>
 structure. 
@@ -3211,7 +3211,7 @@ has its mode changed from
 to
 <function>Absolute</function>
 by an
-<function>XSetDeviceMode</function>
+<xref linkend='XSetDeviceMode' xrefstyle='select: title'/>
 request, valuator control values
 will be ignored by the server while the device is in that mode.
 </para>
@@ -3366,7 +3366,7 @@ Valid masks are as follows:
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XChangeFeedbackControl</function>
+<xref linkend='XChangeFeedbackControl' xrefstyle='select: title'/>
 can generate
 <function>BadDevice ,</function>
 <function>BadFeedBack ,</function>
@@ -3386,7 +3386,7 @@ errors.
 To ring a bell on an extension input device, use
 <function>XDeviceBell .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XDeviceBell'>
 <funcprototype>
   <funcdef>int <function> XDeviceBell</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -3455,9 +3455,9 @@ Specifies the volume in the range -100 (quiet) to 100 percent (loud).
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XDeviceBell</function>
+<xref linkend='XDeviceBell' xrefstyle='select: title'/>
 is analogous to the core 
-<function>XBell</function>
+<olink targetdoc='libX11' targetptr='XBell'><function>XBell</function></olink>
 function.  It rings the specified bell on the specified input device feedback,
 using the specified volume.
 The specified volume is relative to the base volume for the feedback.
@@ -3491,7 +3491,7 @@ To change the base volume of the bell, use
 </para>
 <para>
 <!-- .LP -->
-<function>XDeviceBell</function>
+<xref linkend='XDeviceBell' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 and
@@ -3511,7 +3511,7 @@ To get the key mapping of an extension device that supports input class
 use 
 <function>XGetDeviceKeyMapping .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceKeyMapping'>
 <funcprototype>
   <funcdef>KeySym * <function> XGetDeviceKeyMapping</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -3578,23 +3578,23 @@ Returns the number of keysyms per keycode.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetDeviceKeyMapping </function>
+<xref linkend='XGetDeviceKeyMapping' xrefstyle='select: title'/>
 is analogous to the core
-<function>XGetKeyboardMapping</function>
+<olink targetdoc='libX11' targetptr='XGetKeyboardMapping'><function>XGetKeyboardMapping</function></olink>
 function.  
 It returns the symbols for the specified number of keycodes for the 
 specified extension device.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceKeyMapping </function>
+<xref linkend='XGetDeviceKeyMapping' xrefstyle='select: title'/>
 returns the symbols for the 
 specified number of keycodes for the 
 specified extension device, starting with the specified keycode.
 The first_keycode_wanted must be greater than or equal to
 min-keycode as returned 
 by the
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 request (else a 
 <function>BadValue</function>
 error results). The following value:
@@ -3606,7 +3606,7 @@ first_keycode_wanted + keycode_count - 1
 <!-- .LP -->
 must be less than or equal to max-keycode as returned 
 by the 
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 request (else a 
 <function>BadValue</function>
 error results).
@@ -3634,7 +3634,7 @@ is used to fill in unused elements for individual keycodes.
 <para>
 <!-- .LP -->
 To free the data returned by this function, use
-<function>XFree .</function>
+<olink targetdoc='libX11' targetptr='XFree'><function>XFree</function></olink>.
 </para>
 <para>
 <!-- .LP -->
@@ -3651,7 +3651,7 @@ error.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceKeyMapping </function>
+<xref linkend='XGetDeviceKeyMapping' xrefstyle='select: title'/>
 can generate
 <function>BadDevice ,</function>
 <function>BadMatch ,</function>
@@ -3667,7 +3667,7 @@ To change the keyboard mapping of an extension device that supports input class
 use 
 <function>XChangeDeviceKeyMapping .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangeDeviceKeyMapping'>
 <funcprototype>
   <funcdef>int <function> XChangeDeviceKeyMapping</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -3745,9 +3745,9 @@ Specifies the number of keycodes that are to be changed.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XChangeDeviceKeyMapping</function>
+<xref linkend='XChangeDeviceKeyMapping' xrefstyle='select: title'/>
 is analogous to the core
-<function>XChangeKeyboardMapping</function>
+<olink targetdoc='libX11' targetptr='XChangeKeyboardMapping'><function>XChangeKeyboardMapping</function></olink>
 function.  
 It defines the symbols for the specified number of keycodes for the 
 specified extension keyboard device.
@@ -3769,7 +3769,7 @@ error.
 <!-- .LP -->
 The number of elements in the keysyms list must be a multiple of
 keysyms_per_keycode.  Otherwise,
-<function>XChangeDeviceKeyMapping</function>
+<xref linkend='XChangeDeviceKeyMapping' xrefstyle='select: title'/>
 generates a
 <function>BadLength</function>
 error.
@@ -3790,7 +3790,7 @@ error:
 </para>
 <para>
 <!-- .LP -->
-<function>XChangeDeviceKeyMapping</function>
+<xref linkend='XChangeDeviceKeyMapping' xrefstyle='select: title'/>
 can generate
 <function>BadAlloc ,</function>
 <function>BadDevice ,</function>
@@ -3808,7 +3808,7 @@ extension device that supports input class
 use
 <function>XGetDeviceModifierMapping .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceModifierMapping'>
 <funcprototype>
   <funcdef>XModifierKeymap * <function> XGetDeviceModifierMapping</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -3842,12 +3842,12 @@ Specifies the desired device.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetDeviceModifierMapping</function>
+<xref linkend='XGetDeviceModifierMapping' xrefstyle='select: title'/>
 is analogous to the core
-<function>XGetModifierMapping</function>
+<olink targetdoc='libX11' targetptr='XGetModifierMapping'><function>XGetModifierMapping</function></olink>
 function.  
 The
-<function>XGetDeviceModifierMapping</function>
+<xref linkend='XGetDeviceModifierMapping' xrefstyle='select: title'/>
 function returns a newly created
 <function>XModifierKeymap</function>
 structure that contains the keys being used as
@@ -3859,7 +3859,7 @@ that modifier is disabled.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceModifierMapping</function>
+<xref linkend='XGetDeviceModifierMapping' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 and
@@ -3872,7 +3872,7 @@ errors.
 To set which keycodes are to be used as modifiers for an extension device, use
 <function>XSetDeviceModifierMapping .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XSetDeviceModifierMapping'>
 <funcprototype>
   <funcdef>int <function> XSetDeviceModifierMapping</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -3919,17 +3919,17 @@ structure.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XSetDeviceModifierMapping</function>
+<xref linkend='XSetDeviceModifierMapping' xrefstyle='select: title'/>
 is analogous to the core
-<function>XSetModifierMapping</function>
+<olink targetdoc='libX11' targetptr='XSetModifierMapping'><function>XSetModifierMapping</function></olink>
 function.  
 The 
-<function>XSetDeviceModifierMapping</function>
+<xref linkend='XSetDeviceModifierMapping' xrefstyle='select: title'/>
 function specifies the keycodes of the keys, if any, 
 that are to be used as modifiers.  A zero value means
 that no key should be used.  No two arguments can have the same nonzero
 keycode value.  Otherwise,
-<function>XSetDeviceModifierMapping</function>
+<xref linkend='XSetDeviceModifierMapping' xrefstyle='select: title'/>
 generates a
 <function>BadValue</function>
 error.
@@ -3950,10 +3950,10 @@ Only nonzero keycodes have meaning in each set, and zero keycodes
 are ignored.
 In addition, all of the nonzero keycodes must be in the range specified by 
 min_keycode and max_keycode reported by the
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 function.
 Otherwise,
-<function>XSetModifierMapping</function>
+<olink targetdoc='libX11' targetptr='XSetModifierMapping'><function>XSetModifierMapping</function></olink>
 generates a
 <function>BadValue</function>
 error.
@@ -3978,7 +3978,7 @@ in the logically down state,
 the status reply is
 <function>MappingBusy , </function>
 and none of the modifiers are changed.
-<function>XSetModifierMapping</function>
+<olink targetdoc='libX11' targetptr='XSetModifierMapping'><function>XSetModifierMapping</function></olink>
 generates a
 <function>DeviceMappingNotify</function>
 event on a
@@ -3987,7 +3987,7 @@ status.
 </para>
 <para>
 <!-- .LP -->
-<function>XSetDeviceModifierMapping</function>
+<xref linkend='XSetDeviceModifierMapping' xrefstyle='select: title'/>
 can generate
 <function>BadAlloc ,</function>
 <function>BadDevice ,</function>
@@ -4007,7 +4007,7 @@ errors.
 To set the mapping of the buttons on an extension device, use
 <function>XSetDeviceButtonMapping .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XSetDeviceButtonMapping'>
 <funcprototype>
   <funcdef>int <function> XSetDeviceButtonMapping</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -4063,17 +4063,17 @@ Specifies the number of items in the mapping list.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XSetDeviceButtonMapping</function>
+<xref linkend='XSetDeviceButtonMapping' xrefstyle='select: title'/>
 sets the mapping of the buttons on an extension device.
 If it succeeds, the X server generates a
 <function>DeviceMappingNotify</function>
 event, and
-<function>XSetDeviceButtonMapping</function>
+<xref linkend='XSetDeviceButtonMapping' xrefstyle='select: title'/>
 returns
 <function>MappingSuccess .</function>
 Elements of the list are indexed starting from one.
 The length of the list must be the same as
-<function>XGetDeviceButtonMapping</function>
+<xref linkend='XGetDeviceButtonMapping' xrefstyle='select: title'/>
 would return, or a 
 <function>BadValue</function>
 error results.
@@ -4085,14 +4085,14 @@ However, no two elements can have the same nonzero value, or a
 <function>BadValue</function>
 error results.
 If any of the buttons to be altered are logically in the down state,
-<function>XSetDeviceButtonMapping</function>
+<xref linkend='XSetDeviceButtonMapping' xrefstyle='select: title'/>
 returns
 <function>MappingBusy ,</function>
 and the mapping is not changed.
 </para>
 <para>
 <!-- .LP -->
-<function>XSetDeviceButtonMapping</function>
+<xref linkend='XSetDeviceButtonMapping' xrefstyle='select: title'/>
 can generate
 <function>BadDevice ,</function>
 <function>BadMatch ,</function>
@@ -4106,7 +4106,7 @@ errors.
 To get the button mapping, use
 <function>XGetDeviceButtonMapping .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceButtonMapping'>
 <funcprototype>
   <funcdef>int <function> XGetDeviceButtonMapping</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -4162,10 +4162,10 @@ Specifies the number of items in the mapping list.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetDeviceButtonMapping</function>
+<xref linkend='XGetDeviceButtonMapping' xrefstyle='select: title'/>
 returns the current mapping of the specified extension device.
 Elements of the list are indexed starting from one.
-<function>XGetDeviceButtonMapping</function>
+<xref linkend='XGetDeviceButtonMapping' xrefstyle='select: title'/>
 returns the number of physical buttons actually on the pointer.
 The nominal mapping for the buttons is the identity mapping: map[i]=i.
 The nmap argument specifies the length of the array where the button
@@ -4174,7 +4174,7 @@ in map_return.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceButtonMapping</function>
+<xref linkend='XGetDeviceButtonMapping' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 and
@@ -4193,7 +4193,7 @@ To obtain information that describes the state of the keys, buttons, and
 valuators of an extension device, use
 <function>XQueryDeviceState .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XQueryDeviceState'>
 <funcprototype>
   <funcdef>XDeviceState * <function> XQueryDeviceState</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -4227,7 +4227,7 @@ Specifies the desired device.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XQueryDeviceState</function>
+<xref linkend='XQueryDeviceState' xrefstyle='select: title'/>
 returns a pointer to an
 <function>XDeviceState</function>
 structure, which points to a list of
@@ -4371,7 +4371,7 @@ typedef struct {
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XQueryDeviceState</function>
+<xref linkend='XQueryDeviceState' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 errors.
@@ -4382,7 +4382,7 @@ errors.
 To free the data returned by this function, use
 <function>XFreeDeviceState .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XFreeDeviceState'>
 <funcprototype>
   <funcdef>void <function> XFreeDeviceState</function></funcdef>
   <paramdef>XDeviceState<parameter> *state</parameter></paramdef>
@@ -4408,7 +4408,7 @@ data returned by a previous call to
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XFreeDeviceState</function>
+<xref linkend='XFreeDeviceState' xrefstyle='select: title'/>
 frees the device state data.
 </para>
 </sect3>
@@ -4467,7 +4467,7 @@ types must be obtained by the client from the server.
 <!-- .LP -->
 The client program determines the event type for an extension event by using
 the information returned by the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 request.
 This type can then be used for comparison with the type field
 of events received by the client.
@@ -4575,10 +4575,10 @@ classes must be obtained by the client from the server.
 <!-- .LP -->
 The event class for an extension event and device is obtained from
 information returned by the 
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 function. 
 This class can then be used in an
-<function>XSelectExtensionEvent</function>
+<xref linkend='XSelectExtensionEvent' xrefstyle='select: title'/>
 request to ask that events of that type from that device be sent to
 the client program.
 </para>
@@ -4684,7 +4684,7 @@ Set from the serial number reported in the protocol but expanded from the
 Set to 
 <function>True</function>
 if the event came from an
-<function>XSendEvent</function>
+<olink targetdoc='libX11' targetptr='XSendEvent'><function>XSendEvent</function></olink>
 request.
       </para>
     </listitem>
@@ -5243,7 +5243,7 @@ Get motion history
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetExtensionVersion'>
 <funcprototype>
   <funcdef>XExtensionVersion * <function> XGetExtensionVersion</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -5277,7 +5277,7 @@ Specifies the name of the desired extension.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetExtensionVersion</function>
+<xref linkend='XGetExtensionVersion' xrefstyle='select: title'/>
 allows a client to determine whether a server supports
 the desired version of the input extension.
 </para>
@@ -5312,7 +5312,7 @@ Each version is a superset of the previous versions.
 <para>
 <!-- .LP -->
 You should use 
-<function>XFree</function>
+<olink targetdoc='libX11' targetptr='XFree'><function>XFree</function></olink>.
 to free the data returned by this function.
 </para>
 </sect3>
@@ -5326,22 +5326,22 @@ to free the data returned by this function.
 A client program that wishes to access a specific device
 must first determine whether that device is connected to the X server.  This
 is done through the
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 function, which will return a list of all devices that can be opened
 by the X server.  The client program can use one
 of the names defined in the
 <function>&lt; X11/extensions/XI.h &gt;</function>
 header file in an
-<function>XInternAtom </function>
+<olink targetdoc='libX11' targetptr='XInternAtom'><function>XInternAtom</function></olink>
 request to determine the device type of the desired device.  This type 
 can then be compared with the device types returned by the 
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 request.
 </para>
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XListInputDevices'>
 <funcprototype>
   <funcdef>XDeviceInfo * <function> XListInputDevices</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -5376,7 +5376,7 @@ can return the number of input devices available to the X server.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 allows a client to determine which devices 
 are available for X input and information about those devices.
 An array of
@@ -5533,7 +5533,7 @@ TRACKBALL     NINE_KNOB\s+1
 <para>
 <!-- .LP -->
 These names can be used in an
-<function>XInternAtom</function>
+<olink targetdoc='libX11' targetptr='XInternAtom'><function>XInternAtom</function></olink>
 request to return an atom that can be used for comparison
 with the type member of the 
 <function>XDeviceInfo</function>
@@ -5541,7 +5541,7 @@ structure.
 </para>
 <para>
 <!-- .LP -->
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 returns NULL if there are no input devices to list.
 <!-- .sp -->
 </para>
@@ -5556,7 +5556,7 @@ use
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XFreeDeviceList'>
 <funcprototype>
   <funcdef>void <function> XFreeDeviceList</function></funcdef>
   <paramdef>XDeviceInfo<parameter> *list</parameter></paramdef>
@@ -5582,7 +5582,7 @@ array returned by a previous call to
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XFreeDeviceList</function>
+<xref linkend='XFreeDeviceList' xrefstyle='select: title'/>
 frees the list of input device information.
 </para>
 </sect3>
@@ -5595,10 +5595,10 @@ frees the list of input device information.
 <!-- .LP -->
 Each client program that wishes to access an extension device must request
 that the server open that device by calling the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 function.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XOpenDevice'>
 <funcprototype>
   <funcdef>XDevice * <function> XOpenDevice</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -5625,7 +5625,7 @@ Specifies the connection to the X server.
       <para>
 Specifies the ID that uniquely identifies the device to be opened.
 This ID is obtained from the
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 request.
     </para>
   </listitem>
@@ -5635,7 +5635,7 @@ request.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 opens the device for the requesting client and, on success, returns an
 <function>XDevice</function>
 structure, which is defined as follows:
@@ -5702,14 +5702,14 @@ input is desired, for example:
 <para>
 <!-- .LP -->
 The macro will fill in the values of the event class to be used in an
-<function>XSelectExtensionEvent</function>
+<xref linkend='XSelectExtensionEvent' xrefstyle='select: title'/>
 request to select the event and the event type to be used in comparing
 with the event types of events received via
-<function>XNextEvent .</function>
+<olink targetdoc='libX11' targetptr='XNextEvent'><function>XNextEvent</function></olink>.
 </para>
 <para>
 <!-- .LP -->
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 errors.
@@ -5719,10 +5719,10 @@ errors.
 <!-- .LP -->
 Before terminating, the client program should request that the server close
 the device by calling the
-<function>XCloseDevice</function>
+<xref linkend='XCloseDevice' xrefstyle='select: title'/>
 function.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XCloseDevice'>
 <funcprototype>
   <funcdef>int <function> XCloseDevice</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -5756,7 +5756,7 @@ Specifies the device to be closed.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XCloseDevice</function>
+<xref linkend='XCloseDevice' xrefstyle='select: title'/>
 closes the device for the requesting client and frees the associated
 <function>XDevice</function>
 structure.
@@ -5769,7 +5769,7 @@ after the first successful one return an additional
 structure
 with the same information as the first, but otherwise have no effect.
 A single
-<function>XCloseDevice</function>
+<xref linkend='XCloseDevice' xrefstyle='select: title'/>
 request will terminate that client's access to the device.
 </para>
 <para>
@@ -5786,7 +5786,7 @@ affect any other clients that may be accessing that device.
 </para>
 <para>
 <!-- .LP -->
-<function>XCloseDevice</function>
+<xref linkend='XCloseDevice' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 errors.
@@ -5804,7 +5804,7 @@ data.
 To change the mode of a device from relative to absolute, use
 <function>XSetDeviceMode .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XSetDeviceMode'>
 <funcprototype>
   <funcdef>int <function> XSetDeviceMode</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -5852,12 +5852,12 @@ or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XSetDeviceMode</function>
+<xref linkend='XSetDeviceMode' xrefstyle='select: title'/>
 allows a client to request the server to change the mode of a 
 device that is capable of reporting either absolute positional data or relative
 motion data.  If the device is invalid or if the client has not previously 
 requested that the server open the device via an
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 request, this request will fail with a
 <function>BadDevice</function>
 error.
@@ -5876,7 +5876,7 @@ if another client has already opened the device and requested a different mode.
 </para>
 <para>
 <!-- .LP -->
-<function>XSetDeviceMode</function>
+<xref linkend='XSetDeviceMode' xrefstyle='select: title'/>
 can generate
 <function>BadDevice ,</function>
 <function>BadMatch ,</function>
@@ -5905,7 +5905,7 @@ to a starting value after the mode of the device is changed to
 To initialize the valuators on such a device, use 
 <function>XSetDeviceValuators .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XSetDeviceValuators'>
 <funcprototype>
   <funcdef>Status <function> XSetDeviceValuators</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -5970,7 +5970,7 @@ Specifies the number of valuators to be set.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XSetDeviceValuators</function>
+<xref linkend='XSetDeviceValuators' xrefstyle='select: title'/>
 initializes the specified valuators on the specified extension
 input device.  Valuators are numbered beginning with zero.  Only the valuators
 in the range specified by first_valuator and num_valuators are set.  
@@ -5995,7 +5995,7 @@ will be returned.
 </para>
 <para>
 <!-- .LP -->
-<function>XSetDeviceValuators</function>
+<xref linkend='XSetDeviceValuators' xrefstyle='select: title'/>
 can generate
 <function>BadDevice ,</function>
 <function>BadLength ,</function>
@@ -6031,7 +6031,7 @@ by data structures unique to that device control.
 To query a device control, use
 <function>XGetDeviceControl .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceControl'>
 <funcprototype>
   <funcdef>XDeviceControl * <function> XGetDeviceControl</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -6076,7 +6076,7 @@ Identifies the specific device control to be queried.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetDeviceControl</function>
+<xref linkend='XGetDeviceControl' xrefstyle='select: title'/>
 returns the current state of the specified device control.
 If the target X server does not support that device control, a
 <function>BadValue</function>
@@ -6153,14 +6153,14 @@ maximum valid setting.
 <para>
 <!-- .LP -->
 When this control is specified,
-<function>XGetDeviceControl</function>
+<xref linkend='XGetDeviceControl' xrefstyle='select: title'/>
 fails with a
 <function>BadMatch</function>
 error if the specified device has no valuators.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceControl</function>
+<xref linkend='XGetDeviceControl' xrefstyle='select: title'/>
 can generate
 <function>BadMatch</function>
 and
@@ -6198,7 +6198,7 @@ by data structures unique to that device control.
 To change a device control, use
 <function>XChangeDeviceControl .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangeDeviceControl'>
 <funcprototype>
   <funcdef>Status <function> XChangeDeviceControl</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -6257,7 +6257,7 @@ and how it is to be changed.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XChangeDeviceControl</function>
+<xref linkend='XChangeDeviceControl' xrefstyle='select: title'/>
 changes the current state of the specified device control.
 If the target X server does not support that device control, a
 <function>BadValue</function>
@@ -6341,14 +6341,14 @@ specifies the number of valuators in the resolutions list.
 <para>
 <!-- .LP -->
 When this control is specified,
-<function>XChangeDeviceControl</function>
+<xref linkend='XChangeDeviceControl' xrefstyle='select: title'/>
 fails with a
 <function>BadMatch</function>
 error if the specified device has no valuators.
 If a resolution is specified that is not within the range of valid values 
 (as returned by
 <function>XGetDeviceControl ),</function>
-<function>XChangeDeviceControl</function>
+<xref linkend='XChangeDeviceControl' xrefstyle='select: title'/>
 fails with a
 <function>BadValue</function>
 error.
@@ -6367,7 +6367,7 @@ is less than the following expression:
 </para>
 <para>
 <!-- .LP   -->
-<function>XChangeDeviceControl</function>
+<xref linkend='XChangeDeviceControl' xrefstyle='select: title'/>
 can generate
 <function>BadMatch</function>
 and
@@ -6389,7 +6389,7 @@ a list of classes that define the desired event types and devices, a count
 of the number of elements in the list, and the ID of the window from which 
 events are desired.
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XSelectExtensionEvent'>
 <funcprototype>
   <funcdef>int <function> XSelectExtensionEvent</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -6446,7 +6446,7 @@ Specifies the number of elements in the event_list.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XSelectExtensionEvent</function>
+<xref linkend='XSelectExtensionEvent' xrefstyle='select: title'/>
 requests the server to send events that match the events and
 devices described by the event list and that come from the requested 
 window.  
@@ -6456,7 +6456,7 @@ array are the event_class values
 obtained by invoking a macro with the pointer to an
 <function>XDevice</function>
 structure returned by the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 request.
 For example, the
 <function>DeviceKeyPress</function>
@@ -6501,21 +6501,21 @@ Macros are defined for the following event classes:
 <para>
 <!-- .LP -->
 To get the next available event from within a client program, use the core
-<function>XNextEvent</function>
+<olink targetdoc='libX11' targetptr='XNextEvent'><function>XNextEvent</function></olink>
 function.  This returns the next event whether it
 came from a core device or an extension device.
 </para>
 <para>
 <!-- .LP -->
 Succeeding
-<function>XSelectExtensionEvent</function>
+<xref linkend='XSelectExtensionEvent' xrefstyle='select: title'/>
 requests using event classes
 for the same device as was specified on a previous request will replace
 the previous set of selected events from that device with the new set.
 </para>
 <para>
 <!-- .LP -->
-<function>XSelectExtensionEvent</function>
+<xref linkend='XSelectExtensionEvent' xrefstyle='select: title'/>
 can generate
 <function>BadAccess , </function>
 <function>BadClass ,</function>
@@ -6536,7 +6536,7 @@ To determine which extension events are currently selected from a given
 window, use
 <function>XGetSelectedExtensionEvents .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetSelectedExtensionEvents'>
 <funcprototype>
   <funcdef>int <function> XGetSelectedExtensionEvents</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -6620,7 +6620,7 @@ selected by all clients.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetSelectedExtensionEvents</function>
+<xref linkend='XGetSelectedExtensionEvents' xrefstyle='select: title'/>
 returns pointers to two event class arrays.  
 One lists the extension events selected by this client from
 the specified window.  The other lists the extension events selected by
@@ -6628,14 +6628,14 @@ all clients from the specified window.  This information is analogous
 to that returned in your_event_mask and all_event_masks of the
 <function>XWindowAttributes</function>
 structure when an 
-<function>XGetWindowAttributes</function>
+<olink targetdoc='libX11' targetptr='XGetWindowAttributes'><function>XGetWindowAttributes</function></olink>
 request is made.
 To free the two arrays returned by this function, use
-<function>XFree .</function>
+<olink targetdoc='libX11' targetptr='XFree'><function>XFree</function></olink>.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetSelectedExtensionEvents</function>
+<xref linkend='XGetSelectedExtensionEvents' xrefstyle='select: title'/>
 can generate
 <function>BadWindow</function>
 errors.
@@ -6659,14 +6659,14 @@ particular extension event.
 <!-- .LP -->
 Client programs may control event propagation through the use
 of the following two functions:
-<function>XChangeDeviceDontPropagateList</function>
+<xref linkend='XChangeDeviceDontPropagateList' xrefstyle='select: title'/>
 and
 <function>XGetDeviceDontPropagateList .  </function>
 </para>
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangeDeviceDontPropagateList'>
 <funcprototype>
   <funcdef>int <function> XChangeDeviceDontPropagateList</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -6736,7 +6736,7 @@ or
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XChangeDeviceDontPropagateList</function>
+<xref linkend='XChangeDeviceDontPropagateList' xrefstyle='select: title'/>
 adds an event to or deletes an event from the do_not_propagate list 
 of extension events for the specified window.
 There is one list per window, and the list remains for the life of the window.
@@ -6753,7 +6753,7 @@ error results.
 </para>
 <para>
 <!-- .LP -->
-<function>XChangeDeviceDontPropagateList</function>
+<xref linkend='XChangeDeviceDontPropagateList' xrefstyle='select: title'/>
 can generate
 <function>BadClass ,</function>
 <function>BadMode ,</function>
@@ -6765,7 +6765,7 @@ errors.
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceDontPropagateList'>
 <funcprototype>
   <funcdef>XEventClass * <function> XGetDeviceDontPropagateList</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -6810,7 +6810,7 @@ Returns the number of elements in the array returned by this function.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetDeviceDontPropagateList</function>
+<xref linkend='XGetDeviceDontPropagateList' xrefstyle='select: title'/>
 allows a client to determine the do_not_propagate list of extension events
 for the specified window.
 It returns an array of
@@ -6819,11 +6819,11 @@ each
 <function>XEventClass</function>
 representing a device/event type pair.
 To free the data returned by this function, use
-<function>XFree .</function>
+<olink targetdoc='libX11' targetptr='XFree'><function>XFree</function></olink>.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceDontPropagateList</function>
+<xref linkend='XGetDeviceDontPropagateList' xrefstyle='select: title'/>
 can generate
 <function>BadWindow</function>
 errors.
@@ -6839,7 +6839,7 @@ errors.
 To send an extension event to another client, use
 <function>XSendExtensionEvent .</function>
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XSendExtensionEvent'>
 <funcprototype>
   <funcdef>int <function> XSendExtensionEvent</function></funcdef>
   <paramdef>Display<parameter> *display</parameter></paramdef>
@@ -6935,19 +6935,19 @@ Specifies a pointer to the event that is to be sent.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XSendExtensionEvent</function>
+<xref linkend='XSendExtensionEvent' xrefstyle='select: title'/>
 identifies the destination window, determines which clients should receive
 the specified event, and ignores any active grabs.
 It requires a list of
 <function>XEventClass</function>
 to be specified.
 These are obtained by opening an input device with the
-<function>XOpenDevice</function>
+<xref linkend='XOpenDevice' xrefstyle='select: title'/>
 request.
 </para>
 <para>
 <!-- .LP -->
-<function>XSendExtensionEvent</function>
+<xref linkend='XSendExtensionEvent' xrefstyle='select: title'/>
 uses the window argument to identify the destination window as follows:
 </para>
 <itemizedlist>
@@ -6972,7 +6972,7 @@ the destination window is the focus window.
 <para>
 <!-- .LP -->
 To determine which clients should receive the specified events, 
-<function>XSendExtensionEvent</function>
+<xref linkend='XSendExtensionEvent' xrefstyle='select: title'/>
 uses the propagate argument as follows:
 </para>
 <itemizedlist>
@@ -7017,13 +7017,13 @@ in the forwarded event and to set the sequence number in the event correctly.
 </para>
 <para>
 <!-- .LP -->
-<function>XSendExtensionEvent</function>
+<xref linkend='XSendExtensionEvent' xrefstyle='select: title'/>
 returns zero if the conversion-to-wire protocol failed;
 otherwise, it returns nonzero.
 </para>
 <para>
 <!-- .LP -->
-<function>XSendExtensionEvent</function>
+<xref linkend='XSendExtensionEvent' xrefstyle='select: title'/>
 can generate
 <function>BadClass ,</function>
 <function>BadDevice ,</function>
@@ -7041,7 +7041,7 @@ errors.
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceMotionEvents'>
 <funcprototype>
   <funcdef>XDeviceTimeCoord * <function> XGetDeviceMotionEvents</function></funcdef>
   <paramdef><parameter> axis_count_return)</parameter></paramdef>
@@ -7135,7 +7135,7 @@ Returns the number of axes reported in each of the positions returned.
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XGetDeviceMotionEvents</function>
+<xref linkend='XGetDeviceMotionEvents' xrefstyle='select: title'/>
 returns all positions in the device's motion history buffer
 that fall between the specified start and stop times inclusive.
 If the start time is in the future or is later than the stop time,
@@ -7180,7 +7180,7 @@ that it reports.  The maximum value for each axis is reported in
 the max_val member of the
 <function>XAxisInfo</function>
 structure, which is part of the information returned by the
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
 request.
 </para>
 <para>
@@ -7195,15 +7195,15 @@ accumulating these relative values.
 <para>
 <!-- .LP -->
 Consecutive calls to
-<function>XGetDeviceMotionEvents</function>
+<xref linkend='XGetDeviceMotionEvents' xrefstyle='select: title'/>
 can return data of different modes, that is, if
 some client program has changed the mode of the device via an
-<function>XSetDeviceMode</function>
+<xref linkend='XSetDeviceMode' xrefstyle='select: title'/>
 request.
 </para>
 <para>
 <!-- .LP -->
-<function>XGetDeviceMotionEvents</function>
+<xref linkend='XGetDeviceMotionEvents' xrefstyle='select: title'/>
 can generate
 <function>BadDevice</function>
 and
@@ -7221,7 +7221,7 @@ use
 <para>
 <!-- .LP -->
 <!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XFreeDeviceMotionEvents'>
 <funcprototype>
   <funcdef>void <function> XFreeDeviceMotionEvents</function></funcdef>
   <paramdef>XDeviceTimeCoord<parameter> *events</parameter></paramdef>
@@ -7247,7 +7247,7 @@ array returned by a previous call to
 <para>
 <!-- .LP -->
 <!-- .eM -->
-<function>XFreeDeviceMotionEvents</function>
+<xref linkend='XFreeDeviceMotionEvents' xrefstyle='select: title'/>
 frees the specified array of motion information.
 <!-- .\" -->
 <!-- .\" -->
old mode 100755 (executable)
new mode 100644 (file)
index 76b10e2..806265c
@@ -9,6 +9,7 @@ XI2_sources = XIAllowEvents.c \
                  XIPassiveGrab.c \
                  XIProperties.c \
                  XISelEv.c \
+                 XISetCPtr.c \
                  XIWarpPointer.c \
                  XIHierarchy.c \
                  XIDefineCursor.c \
@@ -48,7 +49,6 @@ libXi_la_SOURCES = \
                  XQueryDv.c \
                  XSelect.c \
                  XSetBMap.c \
-                 XSetCPtr.c \
                  XSetDVal.c \
                  XSetMMap.c \
                  XSetMode.c \
@@ -64,10 +64,11 @@ libXi_la_SOURCES = \
 
 libXi_la_LIBADD = $(XI_LIBS)
 
-AM_CFLAGS = -I$(top_srcdir)/include \
-            -I$(top_srcdir)/include/X11 \
-            -I$(top_srcdir)/include/X11/extensions \
-            $(XI_CFLAGS) \
+AM_CPPFLAGS = -I$(top_srcdir)/include \
+              -I$(top_srcdir)/include/X11 \
+              -I$(top_srcdir)/include/X11/extensions
+
+AM_CFLAGS = $(XI_CFLAGS) \
             $(MALLOC_ZERO_CFLAGS) \
             $(CWARNFLAGS)
 
index d19443d..ccecead 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XAllowDeviceEvents - Thaw a frozen extension device.
  *
  */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 172cb5e..41354ce 100644 (file)
@@ -51,6 +51,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index df703a2..d5ec8dc 100644 (file)
@@ -51,6 +51,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index e88b71d..df301cb 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index ab9a936..3eb46bf 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index 9caeabf..4cb9ee1 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index 6d35e06..dfb5186 100644 (file)
@@ -51,6 +51,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index b5f3dfc..dbf7e50 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index 3792f8a..1fe8297 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
old mode 100755 (executable)
new mode 100644 (file)
index d4b3b69..27638bd
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdio.h>
 #include <stdint.h>
 #include <X11/extensions/XI.h>
@@ -68,12 +72,6 @@ SOFTWARE.
 #define ENQUEUE_EVENT  True
 #define DONT_ENQUEUE   False
 #define FP1616toDBL(x) ((x) * 1.0 / (1 << 16))
-#ifdef _F_ENABLE_XI2_SENDEVENT_
-#define DBLtoFP1616(x) ((FP1616) ((x) * ((1 << 16) + 0.5)))
-#define DBLtoFP3232(x) ((int64_t) ((x) * (1 << 16) * (1 << 16) + 0.5))
-#define DBLtoFP3232frac(x) (DBLtoFP3232(x) & 0xffffffff);
-#define DBLtoFP3232integral(x) (DBLtoFP3232(x) >> 32);
-#endif//_F_ENABLE_XI2_SENDEVENT_
 
 extern void _xibaddevice(
     Display *          /* dpy */,
@@ -104,7 +102,7 @@ extern int _XiGetDevicePresenceNotifyEvent(
     Display *          /* dpy */
 );
 
-int copy_classes(XIDeviceInfo *to, xXIAnyInfo* from, int nclasses);
+int copy_classes(XIDeviceInfo *to, xXIAnyInfo* from, int *nclasses);
 int size_classes(xXIAnyInfo* from, int nclasses);
 
 static XExtensionInfo *xinput_info;
@@ -134,14 +132,6 @@ static Bool XInputWireToCookie(
     xEvent*            /* event */
 );
 
-#ifdef _F_ENABLE_XI2_SENDEVENT_
-static Bool XInputCookieToWire(
-    Display*           /* display */,
-    XGenericEventCookie*       /* re */,
-    xGenericEvent**            /* event */
-);
-#endif//_F_ENABLE_XI2_SENDEVENT_
-
 static Bool XInputCopyCookie(
     Display*           /* display */,
     XGenericEventCookie*       /* in */,
@@ -155,14 +145,19 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie)
 static int
 wireToHierarchyChangedEvent(xXIHierarchyEvent *in, XGenericEventCookie *cookie);
 static int
-wireToRawEvent(xXIRawEvent *in, XGenericEventCookie *cookie);
+wireToRawEvent(XExtDisplayInfo *info, xXIRawEvent *in, XGenericEventCookie *cookie);
 static int
 wireToEnterLeave(xXIEnterEvent *in, XGenericEventCookie *cookie);
 static int
 wireToPropertyEvent(xXIPropertyEvent *in, XGenericEventCookie *cookie);
+static int
+wireToTouchOwnershipEvent(xXITouchOwnershipEvent *in,
+                          XGenericEventCookie *cookie);
 
 static /* const */ XEvent emptyevent;
 
+typedef Status (*core_event_to_wire)(Display*, XEvent*, xEvent*);
+
 static /* const */ XExtensionHooks xinput_extension_hooks = {
     NULL,      /* create_gc */
     NULL,      /* copy_gc */
@@ -172,7 +167,7 @@ static /* const */ XExtensionHooks xinput_extension_hooks = {
     NULL,      /* free_font */
     XInputClose,       /* close_display */
     XInputWireToEvent, /* wire_to_event */
-    _XiEventToWire,    /* event_to_wire */
+    (core_event_to_wire)_XiEventToWire, /* event_to_wire */
     NULL,      /* error */
     XInputError,       /* error_string */
 };
@@ -258,9 +253,6 @@ XExtDisplayInfo *XInput_find_display (Display *dpy)
       if (dpyinfo->codes) /* NULL if XI doesn't exist on the server */
       {
           XESetWireToEventCookie(dpy, dpyinfo->codes->major_opcode, XInputWireToCookie);
-#ifdef _F_ENABLE_XI2_SENDEVENT_
-          XESetEventCookieToWire(dpy, dpyinfo->codes->major_opcode, XInputCookieToWire);
-#endif//_F_ENABLE_XI2_SENDEVENT_
           XESetCopyEventCookie(dpy, dpyinfo->codes->major_opcode, XInputCopyCookie);
       }
     }
@@ -285,7 +277,9 @@ static XExtensionVersion versions[] = { {XI_Absent, 0, 0},
  XI_Add_DevicePresenceNotify_Minor},
 {XI_Present, XI_Add_DeviceProperties_Major,
  XI_Add_DeviceProperties_Minor},
-{XI_Present, XI_2_Major, XI_2_Minor}
+{XI_Present, 2, 0},
+{XI_Present, 2, 1},
+{XI_Present, 2, 2}
 };
 
 /***********************************************************************
@@ -350,6 +344,43 @@ static int XInputCheckExtension(Display *dpy, XExtDisplayInfo *info)
     return 1;
 }
 
+/*****************************************************************
+ * Compare version numbers between info and the built-in version table.
+ * Returns
+ *   -1 if info's version is less than version_index's version,
+ *   0 if equal (or DontCheck),
+ *   1 if info's version is greater than version_index's version.
+ * Returns -2 on initialization errors which shouldn't happen if you call it
+ * correctly.
+ */
+_X_HIDDEN int
+_XiCheckVersion(XExtDisplayInfo *info,
+                int version_index)
+{
+    XExtensionVersion *ext;
+
+    if (versions[version_index].major_version == Dont_Check)
+        return 0;
+
+    if (!info->data)
+        return -2;
+
+    ext = ((XInputData *) info->data)->vers;
+    if (!ext)
+        return -2;
+
+    if (ext->major_version == versions[version_index].major_version &&
+        ext->minor_version == versions[version_index].minor_version)
+        return 0;
+
+    if (ext->major_version < versions[version_index].major_version ||
+        (ext->major_version == versions[version_index].major_version &&
+         ext->minor_version < versions[version_index].minor_version))
+        return -1;
+    else
+        return 1;
+}
+
 /***********************************************************************
  *
  * Check to see if the input extension is installed in the server.
@@ -363,8 +394,6 @@ _XiCheckExtInit(
     register int        version_index,
     XExtDisplayInfo    *info)
 {
-    XExtensionVersion *ext;
-
     if (!XInputCheckExtension(dpy, info)) {
        UnlockDisplay(dpy);
        return (-1);
@@ -380,15 +409,11 @@ _XiCheckExtInit(
            _XiGetExtensionVersion(dpy, "XInputExtension", info);
     }
 
-    if (versions[version_index].major_version > Dont_Check) {
-       ext = ((XInputData *) info->data)->vers;
-       if ((ext->major_version < versions[version_index].major_version) ||
-           ((ext->major_version == versions[version_index].major_version) &&
-            (ext->minor_version < versions[version_index].minor_version))) {
-           UnlockDisplay(dpy);
-           return (-1);
-       }
+    if (_XiCheckVersion(info, version_index) < 0) {
+       UnlockDisplay(dpy);
+       return -1;
     }
+
     return (0);
 }
 
@@ -409,7 +434,16 @@ XInputClose(
        XFree((char *)((XInputData *) info->data)->vers);
        XFree((char *)info->data);
     }
-    return XextRemoveDisplay(xinput_info, dpy);
+
+    if (!XextRemoveDisplay(xinput_info, dpy))
+        return 0;
+
+    if (xinput_info->ndisplays == 0) {
+        XextDestroyExtension(xinput_info);
+        xinput_info = NULL;
+    }
+
+    return 1;
 }
 
 static int
@@ -777,7 +811,6 @@ XInputWireToEvent(
                         return (DONT_ENQUEUE);
                     else {
                         *re = *save;
-                        stev = (XDeviceStateNotifyEvent *) re;
                         return (ENQUEUE_EVENT);
                     }
                 }
@@ -805,7 +838,6 @@ XInputWireToEvent(
                         return (DONT_ENQUEUE);
                     else {
                         *re = *save;
-                        kstev = (XDeviceStateNotifyEvent *) re;
                         return (ENQUEUE_EVENT);
                     }
                 }
@@ -833,7 +865,6 @@ XInputWireToEvent(
                         return (DONT_ENQUEUE);
                     else {
                         *re = *save;
-                        bstev = (XDeviceStateNotifyEvent *) re;
                         return (ENQUEUE_EVENT);
                     }
                 }
@@ -905,11 +936,7 @@ XInputWireToEvent(
 static void xge_copy_to_cookie(xGenericEvent* ev,
                                XGenericEventCookie *cookie)
 {
-#ifndef _F_ENABLE_XI2_SENDEVENT_
     cookie->type = ev->type;
-#else//_F_ENABLE_XI2_SENDEVENT_
-    cookie->type = ev->type & 0x7f;
-#endif//_F_ENABLE_XI2_SENDEVENT_
     cookie->evtype = ev->evtype;
     cookie->extension = ev->extension;
 }
@@ -932,18 +959,12 @@ XInputWireToCookie(
     }
 
     *save = emptyevent;
-#ifndef _F_ENABLE_XI2_SENDEVENT_
     save->type = event->u.u.type;
-#else//_F_ENABLE_XI2_SENDEVENT_
-    xge_copy_to_cookie((xGenericEvent*)event, (XGenericEventCookie*)save);
-#endif//_F_ENABLE_XI2_SENDEVENT_
     ((XAnyEvent*)save)->serial = _XSetLastRequestRead(dpy, (xGenericReply *) event);
     ((XAnyEvent*)save)->send_event = ((event->u.u.type & 0x80) != 0);
     ((XAnyEvent*)save)->display = dpy;
 
-#ifndef _F_ENABLE_XI2_SENDEVENT_
     xge_copy_to_cookie((xGenericEvent*)event, (XGenericEventCookie*)save);
-#endif//_F_ENABLE_XI2_SENDEVENT_
     switch(ge->evtype)
     {
         case XI_Motion:
@@ -951,6 +972,9 @@ XInputWireToCookie(
         case XI_ButtonRelease:
         case XI_KeyPress:
         case XI_KeyRelease:
+        case XI_TouchBegin:
+        case XI_TouchUpdate:
+        case XI_TouchEnd:
             *cookie = *(XGenericEventCookie*)save;
             if (!wireToDeviceEvent((xXIDeviceEvent*)event, cookie))
             {
@@ -977,14 +1001,27 @@ XInputWireToCookie(
                 break;
             }
             return ENQUEUE_EVENT;
+        case XI_TouchOwnership:
+            *cookie = *(XGenericEventCookie*)save;
+            if (!wireToTouchOwnershipEvent((xXITouchOwnershipEvent*)event,
+                                           cookie))
+            {
+                printf("XInputWireToCookie: CONVERSION FAILURE!  evtype=%d\n",
+                        ge->evtype);
+                break;
+            }
+            return ENQUEUE_EVENT;
 
         case XI_RawKeyPress:
         case XI_RawKeyRelease:
         case XI_RawButtonPress:
         case XI_RawButtonRelease:
         case XI_RawMotion:
+        case XI_RawTouchBegin:
+        case XI_RawTouchUpdate:
+        case XI_RawTouchEnd:
             *cookie = *(XGenericEventCookie*)save;
-            if (!wireToRawEvent((xXIRawEvent*)event, cookie))
+            if (!wireToRawEvent(info, (xXIRawEvent*)event, cookie))
             {
                 printf("XInputWireToCookie: CONVERSION FAILURE!  evtype=%d\n",
                         ge->evtype);
@@ -1019,164 +1056,6 @@ XInputWireToCookie(
     return DONT_ENQUEUE;
 }
 
-#ifdef _F_ENABLE_XI2_SENDEVENT_
-static Bool
-XInputCookieToWire(
-    Display    *dpy,
-    XGenericEventCookie *re,
-    xGenericEvent **event)
-{
-    XExtDisplayInfo *info = XInput_find_display(dpy);
-    XGenericEventCookie *xcookie = (XGenericEventCookie *) re;
-
-    switch (((XGenericEvent*)re)->evtype)
-    {
-    case XI_Motion:
-    case XI_ButtonPress:
-    case XI_ButtonRelease:
-    case XI_KeyPress:
-    case XI_KeyRelease: {
-        register XIDeviceEvent *xev = (XIDeviceEvent *) xcookie->data;
-        register xXIDeviceEvent *wev = (xXIDeviceEvent *) event;
-        int buttons_len = (xev->buttons.mask_len + 3) >> 2;
-        int valuators_len = (xev->valuators.mask_len + 3) >> 2;
-        int i, n_valuators, len;
-        unsigned char *ptr;
-        FP3232 *values;
-
-        n_valuators = count_bits (xev->valuators.mask, xev->valuators.mask_len);
-
-        len = sizeof (xXIDeviceEvent);
-        len += buttons_len << 2;
-        len += valuators_len << 2;
-        len += n_valuators * sizeof (FP3232);
-
-        wev = (xXIDeviceEvent *) Xmalloc(len);
-
-        if (!wev)
-            return (_XUnknownEventCookie(dpy, re, event));
-
-        *event = (xGenericEvent *) wev;
-
-        wev->type = GenericEvent;
-        wev->extension = info->codes->major_opcode;
-        wev->sequenceNumber = xev->serial & 0xFFFF;
-        wev->length = (len - sizeof (xEvent) + 3) >> 2;
-        wev->evtype = xev->evtype;
-        wev->deviceid = xev->deviceid;
-        wev->time = xev->time;
-        wev->detail = xev->detail;
-        wev->root = xev->root;
-        wev->event = xev->event;
-        wev->child = xev->child;
-
-        if (xev->sourceid != 0)
-            wev->sourceid = xev->sourceid;
-        else
-            wev->sourceid = xev->deviceid;
-
-        wev->flags = xev->flags;
-
-        wev->root_x = DBLtoFP1616(xev->root_x);
-        wev->root_y = DBLtoFP1616(xev->root_y);
-        wev->event_x = DBLtoFP1616(xev->event_x);
-        wev->event_y = DBLtoFP1616(xev->event_y);
-
-        wev->mods.base_mods = xev->mods.base;
-        wev->mods.latched_mods = xev->mods.latched;
-        wev->mods.locked_mods = xev->mods.locked;
-        wev->mods.effective_mods = xev->mods.effective;
-
-        wev->group.base_group = xev->group.base;
-        wev->group.latched_group = xev->group.latched;
-        wev->group.locked_group = xev->group.locked;
-        wev->group.effective_group = xev->group.effective;
-
-        wev->buttons_len = (xev->buttons.mask_len + 3) >> 2;
-        wev->valuators_len = (xev->valuators.mask_len + 3) >> 2;
-
-        /* Fill in trailing button mask */
-        ptr = (unsigned char *) &wev[1];
-        memcpy (ptr, xev->buttons.mask, xev->buttons.mask_len);
-        ptr += wev->buttons_len << 2;
-
-        /* Fill in valuator mask and values */
-        memcpy (ptr, xev->valuators.mask, xev->valuators.mask_len);
-        ptr += wev->valuators_len << 2;
-
-        values = (FP3232 *) ptr;
-
-        for (i = 0; i < n_valuators; i++, values++) {
-            values->frac = DBLtoFP3232frac(xev->valuators.values[i]);
-            values->integral = DBLtoFP3232integral(xev->valuators.values[i]);
-        }
-
-        return True;
-    }
-    case XI_RawKeyPress:
-    case XI_RawKeyRelease:
-    case XI_RawButtonPress:
-    case XI_RawButtonRelease:
-    case XI_RawMotion: {
-        register XIRawEvent *rev = (XIRawEvent *) xcookie->data;
-        register xXIRawEvent *wev = (xXIRawEvent *) event;
-        int valuators_len = (rev->valuators.mask_len + 3) >> 2;
-        int i, n_valuators, len;
-        unsigned char *ptr;
-        FP3232 *values;
-
-        n_valuators = count_bits (rev->valuators.mask, rev->valuators.mask_len);
-
-        len = sizeof (xXIRawEvent);
-        len += valuators_len << 2;
-        len += n_valuators * sizeof (FP3232) * 2; /* raw + normal */
-
-        wev = (xXIRawEvent *) Xmalloc(len);
-
-        if (!wev)
-            return (_XUnknownEventCookie(dpy, re, event));
-
-        *event = (xGenericEvent *) wev;
-
-        wev->type = GenericEvent;
-        wev->extension = info->codes->major_opcode;
-        wev->sequenceNumber = rev->serial & 0xFFFF;
-        wev->length = (len - sizeof (xEvent) + 3) >> 2;
-        wev->evtype = rev->evtype;
-        wev->deviceid = rev->deviceid;
-        wev->time = rev->time;
-        wev->detail = rev->detail;
-        wev->flags = rev->flags;
-
-        wev->valuators_len = (rev->valuators.mask_len + 3) >> 2;
-
-        /* Fill in trailing valuator mask and values */
-        ptr = (unsigned char *) &wev[1];
-        memcpy (ptr, rev->valuators.mask, rev->valuators.mask_len);
-        ptr += wev->valuators_len << 2;
-
-        values = (FP3232 *) ptr;
-
-        /* Normal values */
-        for (i = 0; i < n_valuators; i++, values++) {
-            values->frac = DBLtoFP3232frac(rev->valuators.values[i]);
-            values->integral = DBLtoFP3232integral(rev->valuators.values[i]);
-        }
-
-        /* Raw values */
-        for (i = 0; i < n_valuators; i++, values++) {
-            values->frac = DBLtoFP3232frac(rev->raw_values[i]);
-            values->integral = DBLtoFP3232integral(rev->raw_values[i]);
-        }
-
-        return True;
-    }
-    }
-
-    return False;
-}
-#endif//_F_ENABLE_XI2_SENDEVENT_
-
 /**
  * Calculate length in bytes needed for the device event with the given
  * button mask length, valuator mask length + valuator mask. All parameters
@@ -1197,6 +1076,55 @@ sizeDeviceEvent(int buttons_len, int valuators_len,
     return len;
 }
 
+/* Return the size with added padding so next element would be
+   double-aligned unless the architecture is known to allow unaligned
+   data accesses.  Not doing this can cause a bus error on
+   MIPS N32. */
+static int
+pad_to_double(int size)
+{
+#if !defined(__i386__) && !defined(__sh__)
+    if (size % sizeof(double) != 0)
+        size += sizeof(double) - size % sizeof(double);
+#endif
+    return size;
+}
+
+/**
+ * Set structure and atoms to size in bytes of XIButtonClassInfo, its
+ * button state mask and labels array.
+ */
+static void
+sizeXIButtonClassType(int num_buttons, int* structure, int* state, int* atoms)
+{
+    int size;
+    int labels;
+
+    *structure = pad_to_double(sizeof(XIButtonClassInfo));
+    size = ((((num_buttons + 7)/8) + 3)/4);
+
+    /* Force mask alignment with longs to avoid unaligned
+     * access when accessing the atoms. */
+    *state = pad_to_double(size * 4);
+    labels = num_buttons * sizeof(Atom);
+
+    /* Force mask alignment with longs to avoid
+     * unaligned access when accessing the atoms. */
+    labels += ((((num_buttons + 7)/8) + 3)/4) * sizeof(Atom);
+    *atoms = pad_to_double(labels);
+}
+
+/**
+ * Set structure and keycodes to size in bytes of XIKeyClassInfo and
+ * its keycodes array.
+ */
+static void
+sizeXIKeyClassType(int num_keycodes, int* structure, int* keycodes)
+{
+    *structure = pad_to_double(sizeof(XIKeyClassInfo));
+    *keycodes = pad_to_double(num_keycodes * sizeof(int));
+}
+
 /**
  * Return the size in bytes required to store the matching class type
  * num_elements is num_buttons for XIButtonClass or num_keycodes for
@@ -1208,19 +1136,26 @@ static int
 sizeDeviceClassType(int type, int num_elements)
 {
     int l = 0;
+    int extra1 = 0;
+    int extra2 = 0;
     switch(type)
     {
         case XIButtonClass:
-            l = sizeof(XIButtonClassInfo);
-            l += num_elements * sizeof(Atom);
-            l += ((((num_elements + 7)/8) + 3)/4) * 4;
+            sizeXIButtonClassType(num_elements, &l, &extra1, &extra2);
+            l += extra1 + extra2;
             break;
         case XIKeyClass:
-            l = sizeof(XIKeyClassInfo);
-            l += num_elements * sizeof(int);
+            sizeXIKeyClassType(num_elements, &l, &extra1);
+            l += extra1;
             break;
         case XIValuatorClass:
-            l = sizeof(XIValuatorClassInfo);
+            l = pad_to_double(sizeof(XIValuatorClassInfo));
+            break;
+        case XIScrollClass:
+            l = pad_to_double(sizeof(XIScrollClassInfo));
+            break;
+        case XITouchClass:
+            l = pad_to_double(sizeof(XITouchClassInfo));
             break;
         default:
             printf("sizeDeviceClassType: unknown type %d\n", type);
@@ -1281,6 +1216,9 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
             case XIValuatorClass:
                 len += sizeDeviceClassType(XIValuatorClass, 0);
                 break;
+            case XIScrollClass:
+                len += sizeDeviceClassType(XIScrollClass, 0);
+                break;
             default:
                 printf("copyDeviceChangedEvent: unknown type %d\n",
                         any->type);
@@ -1306,16 +1244,21 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
         {
             case XIButtonClass:
                 {
+                    int struct_size;
+                    int state_size;
+                    int labels_size;
                     XIButtonClassInfo *bin, *bout;
                     bin = (XIButtonClassInfo*)any;
-                    bout = next_block(&ptr, sizeof(XIButtonClass));
+                    sizeXIButtonClassType(bin->num_buttons, &struct_size,
+                                          &state_size, &labels_size);
+                    bout = next_block(&ptr, struct_size);
 
                     *bout = *bin;
-                    bout->state.mask = next_block(&ptr, bout->state.mask_len);
+                    bout->state.mask = next_block(&ptr, state_size);
                     memcpy(bout->state.mask, bin->state.mask,
                             bout->state.mask_len);
 
-                    bout->labels = next_block(&ptr, bout->num_buttons * sizeof(Atom));
+                    bout->labels = next_block(&ptr, labels_size);
                     memcpy(bout->labels, bin->labels, bout->num_buttons * sizeof(Atom));
                     out->classes[i] = (XIAnyClassInfo*)bout;
                     break;
@@ -1323,11 +1266,15 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
             case XIKeyClass:
                 {
                     XIKeyClassInfo *kin, *kout;
+                    int struct_size;
+                    int keycodes_size;
                     kin = (XIKeyClassInfo*)any;
+                    sizeXIKeyClassType(kin->num_keycodes, &struct_size,
+                                       &keycodes_size);
 
-                    kout = next_block(&ptr, sizeof(XIKeyClass));
+                    kout = next_block(&ptr, struct_size);
                     *kout = *kin;
-                    kout->keycodes = next_block(&ptr, kout->num_keycodes * sizeof(int));
+                    kout->keycodes = next_block(&ptr, keycodes_size);
                     memcpy(kout->keycodes, kin->keycodes, kout->num_keycodes * sizeof(int));
                     out->classes[i] = (XIAnyClassInfo*)kout;
                     break;
@@ -1336,11 +1283,22 @@ copyDeviceChangedEvent(XGenericEventCookie *in_cookie,
                 {
                     XIValuatorClassInfo *vin, *vout;
                     vin = (XIValuatorClassInfo*)any;
-                    vout = next_block(&ptr, sizeof(XIValuatorClass));
+                    vout = next_block(&ptr,
+                                      sizeDeviceClassType(XIValuatorClass, 0));
                     *vout = *vin;
                     out->classes[i] = (XIAnyClassInfo*)vout;
                     break;
                 }
+            case XIScrollClass:
+                {
+                    XIScrollClassInfo *sin, *sout;
+                    sin = (XIScrollClassInfo*)any;
+                    sout = next_block(&ptr,
+                                      sizeDeviceClassType(XIScrollClass, 0));
+                    *sout = *sin;
+                    out->classes[i] = (XIAnyClassInfo*)sout;
+                    break;
+                }
         }
     }
 
@@ -1424,6 +1382,22 @@ copyPropertyEvent(XGenericEventCookie *cookie_in,
 }
 
 static Bool
+copyTouchOwnershipEvent(XGenericEventCookie *cookie_in,
+                        XGenericEventCookie *cookie_out)
+{
+    XITouchOwnershipEvent *in, *out;
+
+    in = cookie_in->data;
+
+    out = cookie_out->data = malloc(sizeof(XITouchOwnershipEvent));
+    if (!out)
+        return False;
+
+    *out = *in;
+    return True;
+}
+
+static Bool
 copyRawEvent(XGenericEventCookie *cookie_in,
              XGenericEventCookie *cookie_out)
 {
@@ -1438,7 +1412,7 @@ copyRawEvent(XGenericEventCookie *cookie_in,
     len = sizeof(XIRawEvent) + in->valuators.mask_len;
     len += bits * sizeof(double) * 2;
 
-    ptr = cookie_out->data = malloc(sizeof(XIRawEvent));
+    ptr = cookie_out->data = malloc(len);
     if (!ptr)
         return False;
 
@@ -1482,6 +1456,9 @@ XInputCopyCookie(Display *dpy, XGenericEventCookie *in, XGenericEventCookie *out
         case XI_ButtonRelease:
         case XI_KeyPress:
         case XI_KeyRelease:
+        case XI_TouchBegin:
+        case XI_TouchUpdate:
+        case XI_TouchEnd:
             ret = copyDeviceEvent(in, out);
             break;
         case XI_DeviceChanged:
@@ -1499,6 +1476,9 @@ XInputCopyCookie(Display *dpy, XGenericEventCookie *in, XGenericEventCookie *out
         case XI_PropertyEvent:
             ret = copyPropertyEvent(in, out);
             break;
+        case XI_TouchOwnership:
+            ret = copyTouchOwnershipEvent(in, out);
+            break;
         case XI_RawKeyPress:
         case XI_RawKeyRelease:
         case XI_RawButtonPress:
@@ -1532,6 +1512,7 @@ wireToDeviceEvent(xXIDeviceEvent *in, XGenericEventCookie* cookie)
     cookie->data = ptr_lib = malloc(len);
 
     out = next_block(&ptr_lib, sizeof(XIDeviceEvent));
+    out->display = cookie->display;
     out->type = in->type;
     out->extension = in->extension;
     out->evtype = in->evtype;
@@ -1592,7 +1573,8 @@ size_classes(xXIAnyInfo* from, int nclasses)
     xXIAnyInfo *any_wire;
     char *ptr_wire;
 
-    len = nclasses * sizeof(XIAnyClassInfo*); /* len for to->classes */
+    /* len for to->classes */
+    len = pad_to_double(nclasses * sizeof(XIAnyClassInfo*));
     ptr_wire = (char*)from;
     for (i = 0; i < nclasses; i++)
     {
@@ -1611,6 +1593,12 @@ size_classes(xXIAnyInfo* from, int nclasses)
             case XIValuatorClass:
                 l = sizeDeviceClassType(XIValuatorClass, 0);
                 break;
+            case XIScrollClass:
+                l = sizeDeviceClassType(XIScrollClass, 0);
+                break;
+            case XITouchClass:
+                l = sizeDeviceClassType(XITouchClass, 0);
+                break;
         }
 
         len += l;
@@ -1627,30 +1615,30 @@ size_classes(xXIAnyInfo* from, int nclasses)
  *             |______________________^
  */
 _X_HIDDEN int
-copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
+copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses)
 {
     XIAnyClassInfo *any_lib;
     xXIAnyInfo *any_wire;
     void *ptr_lib;
     char *ptr_wire;
     int i, len;
+    int cls_idx = 0;
 
     if (!to->classes)
         return -1;
 
     ptr_wire = (char*)from;
     ptr_lib = to->classes;
-    to->classes = next_block(&ptr_lib, nclasses * sizeof(XIAnyClassInfo*));
+    to->classes = next_block(&ptr_lib,
+                             pad_to_double((*nclasses) * sizeof(XIAnyClassInfo*)));
+    memset(to->classes, 0, (*nclasses) * sizeof(XIAnyClassInfo*));
     len = 0; /* count wire length */
 
-    for (i = 0; i < nclasses; i++)
+    for (i = 0; i < *nclasses; i++)
     {
         any_lib = (XIAnyClassInfo*)ptr_lib;
         any_wire = (xXIAnyInfo*)ptr_wire;
 
-        to->classes[i] = any_lib;
-        any_lib->type = any_wire->type;
-        any_lib->sourceid = any_wire->sourceid;
         switch(any_wire->type)
         {
             case XIButtonClass:
@@ -1659,37 +1647,58 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
                     xXIButtonInfo *cls_wire;
                     uint32_t *atoms;
                     int j;
+                    int struct_size;
+                    int state_size;
+                    int labels_size;
+                    int wire_mask_size;
 
-                    cls_lib = next_block(&ptr_lib, sizeof(XIButtonClassInfo));
                     cls_wire = (xXIButtonInfo*)any_wire;
-
+                    sizeXIButtonClassType(cls_wire->num_buttons,
+                                          &struct_size, &state_size,
+                                          &labels_size);
+                    cls_lib = next_block(&ptr_lib, struct_size);
+                    wire_mask_size = ((cls_wire->num_buttons + 7)/8 + 3)/4 * 4;
+
+                    cls_lib->type = cls_wire->type;
+                    cls_lib->sourceid = cls_wire->sourceid;
                     cls_lib->num_buttons = cls_wire->num_buttons;
-                    cls_lib->state.mask_len = ((((cls_wire->num_buttons + 7)/8) + 3)/4) * 4;
-                    cls_lib->state.mask = next_block(&ptr_lib, cls_lib->state.mask_len);
+                    cls_lib->state.mask_len = state_size;
+                    cls_lib->state.mask = next_block(&ptr_lib, state_size);
                     memcpy(cls_lib->state.mask, &cls_wire[1],
-                           cls_lib->state.mask_len);
+                           wire_mask_size);
+                    if (state_size != wire_mask_size)
+                        memset(&cls_lib->state.mask[wire_mask_size], 0,
+                               state_size - wire_mask_size);
 
-                    cls_lib->labels = next_block(&ptr_lib, cls_lib->num_buttons * sizeof(Atom));
-                    atoms =(uint32_t*)((char*)&cls_wire[1] + cls_lib->state.mask_len);
+                    cls_lib->labels = next_block(&ptr_lib, labels_size);
+
+                    atoms =(uint32_t*)((char*)&cls_wire[1] + wire_mask_size);
                     for (j = 0; j < cls_lib->num_buttons; j++)
                         cls_lib->labels[j] = *atoms++;
 
+                    to->classes[cls_idx++] = any_lib;
                     break;
                 }
             case XIKeyClass:
                 {
                     XIKeyClassInfo *cls_lib;
                     xXIKeyInfo *cls_wire;
+                    int struct_size;
+                    int keycodes_size;
 
-                    cls_lib = next_block(&ptr_lib, sizeof(XIKeyClassInfo));
                     cls_wire = (xXIKeyInfo*)any_wire;
+                    sizeXIKeyClassType(cls_wire->num_keycodes,
+                                       &struct_size, &keycodes_size);
+                    cls_lib = next_block(&ptr_lib, struct_size);
 
+                    cls_lib->type = cls_wire->type;
+                    cls_lib->sourceid = cls_wire->sourceid;
                     cls_lib->num_keycodes = cls_wire->num_keycodes;
-                    cls_lib->keycodes = next_block(&ptr_lib,
-                            cls_lib->num_keycodes * sizeof(int));
+                    cls_lib->keycodes = next_block(&ptr_lib, keycodes_size);
                     memcpy(cls_lib->keycodes, &cls_wire[1],
                             cls_lib->num_keycodes);
 
+                    to->classes[cls_idx++] = any_lib;
                     break;
                 }
             case XIValuatorClass:
@@ -1697,9 +1706,13 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
                     XIValuatorClassInfo *cls_lib;
                     xXIValuatorInfo *cls_wire;
 
-                    cls_lib = next_block(&ptr_lib, sizeof(XIValuatorClassInfo));
+                    cls_lib =
+                      next_block(&ptr_lib,
+                                 sizeDeviceClassType(XIValuatorClass, 0));
                     cls_wire = (xXIValuatorInfo*)any_wire;
 
+                    cls_lib->type = cls_wire->type;
+                    cls_lib->sourceid = cls_wire->sourceid;
                     cls_lib->number = cls_wire->number;
                     cls_lib->label  = cls_wire->label;
                     cls_lib->resolution = cls_wire->resolution;
@@ -1709,12 +1722,53 @@ copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses)
                     /* FIXME: fractional parts */
                     cls_lib->mode       = cls_wire->mode;
 
+                    to->classes[cls_idx++] = any_lib;
+                }
+                break;
+            case XIScrollClass:
+                {
+                    XIScrollClassInfo *cls_lib;
+                    xXIScrollInfo *cls_wire;
+
+                    cls_lib =
+                      next_block(&ptr_lib,
+                                 sizeDeviceClassType(XIScrollClass, 0));
+                    cls_wire = (xXIScrollInfo*)any_wire;
+
+                    cls_lib->type = cls_wire->type;
+                    cls_lib->sourceid = cls_wire->sourceid;
+                    cls_lib->number     = cls_wire->number;
+                    cls_lib->scroll_type= cls_wire->scroll_type;
+                    cls_lib->flags      = cls_wire->flags;
+                    cls_lib->increment  = cls_wire->increment.integral;
+                    cls_lib->increment += (unsigned int)cls_wire->increment.frac/(double)(1ULL << 32);
+
+                    to->classes[cls_idx++] = any_lib;
+                }
+                break;
+            case XITouchClass:
+                {
+                    XITouchClassInfo *cls_lib;
+                    xXITouchInfo *cls_wire;
+
+                    cls_wire = (xXITouchInfo*)any_wire;
+                    cls_lib = next_block(&ptr_lib, sizeof(XITouchClassInfo));
+
+                    cls_lib->type = cls_wire->type;
+                    cls_lib->sourceid = cls_wire->sourceid;
+                    cls_lib->mode = cls_wire->mode;
+                    cls_lib->num_touches = cls_wire->num_touches;
+
+                    to->classes[cls_idx++] = any_lib;
                 }
                 break;
         }
         len += any_wire->length * 4;
         ptr_wire += any_wire->length * 4;
     }
+
+    /* we may have skipped unknown classes, reset nclasses */
+    *nclasses = cls_idx;
     return len;
 }
 
@@ -1725,12 +1779,14 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie)
     XIDeviceChangedEvent *out;
     XIDeviceInfo info;
     int len;
+    int nclasses = in->num_classes;
 
     len = size_classes((xXIAnyInfo*)&in[1], in->num_classes);
 
     cookie->data = out = malloc(sizeof(XIDeviceChangedEvent) + len);
 
     out->type = in->type;
+    out->display = cookie->display;
     out->extension = in->extension;
     out->evtype = in->evtype;
     out->send_event = ((in->type & 0x80) != 0);
@@ -1738,13 +1794,13 @@ wireToDeviceChangedEvent(xXIDeviceChangedEvent *in, XGenericEventCookie *cookie)
     out->deviceid = in->deviceid;
     out->sourceid = in->sourceid;
     out->reason = in->reason;
-    out->num_classes = in->num_classes;
 
     out->classes = (XIAnyClassInfo**)&out[1];
 
     info.classes = out->classes;
 
-    copy_classes(&info, (xXIAnyInfo*)&in[1], in->num_classes);
+    copy_classes(&info, (xXIAnyInfo*)&in[1], &nclasses);
+    out->num_classes = nclasses;
 
     return 1;
 }
@@ -1760,6 +1816,7 @@ wireToHierarchyChangedEvent(xXIHierarchyEvent *in, XGenericEventCookie *cookie)
     cookie->data = out = malloc(sizeof(XIHierarchyEvent) + in->num_info * sizeof(XIHierarchyInfo));;
 
     out->info           = (XIHierarchyInfo*)&out[1];
+    out->display        = cookie->display;
     out->type           = in->type;
     out->extension      = in->extension;
     out->evtype         = in->evtype;
@@ -1784,14 +1841,13 @@ wireToHierarchyChangedEvent(xXIHierarchyEvent *in, XGenericEventCookie *cookie)
 }
 
 static int
-wireToRawEvent(xXIRawEvent *in, XGenericEventCookie *cookie)
+wireToRawEvent(XExtDisplayInfo *info, xXIRawEvent *in, XGenericEventCookie *cookie)
 {
     int len, i, bits;
     FP3232 *values;
     XIRawEvent *out;
     void *ptr;
 
-
     len = sizeof(XIRawEvent) + in->valuators_len * 4;
     bits = count_bits((unsigned char*)&in[1], in->valuators_len * 4);
     len += bits * sizeof(double) * 2; /* raw + normal */
@@ -1802,6 +1858,7 @@ wireToRawEvent(xXIRawEvent *in, XGenericEventCookie *cookie)
 
     out = next_block(&ptr, sizeof(XIRawEvent));
     out->type           = in->type;
+    out->display        = cookie->display;
     out->extension      = in->extension;
     out->evtype         = in->evtype;
     out->send_event = ((in->type & 0x80) != 0);
@@ -1810,6 +1867,12 @@ wireToRawEvent(xXIRawEvent *in, XGenericEventCookie *cookie)
     out->deviceid       = in->deviceid;
     out->flags          = in->flags;
 
+    /* https://bugs.freedesktop.org/show_bug.cgi?id=34240 */
+    if (_XiCheckVersion(info, XInput_2_2) >= 0)
+        out->sourceid       = in->sourceid;
+    else
+        out->sourceid       = 0;
+
     out->valuators.mask_len = in->valuators_len * 4;
     out->valuators.mask = next_block(&ptr, out->valuators.mask_len);
     memcpy(out->valuators.mask, &in[1], out->valuators.mask_len);
@@ -1845,6 +1908,7 @@ wireToEnterLeave(xXIEnterEvent *in, XGenericEventCookie *cookie)
     out->buttons.mask = (unsigned char*)&out[1];
 
     out->type           = in->type;
+    out->display        = cookie->display;
     out->extension      = in->extension;
     out->evtype         = in->evtype;
     out->send_event = ((in->type & 0x80) != 0);
@@ -1896,3 +1960,28 @@ wireToPropertyEvent(xXIPropertyEvent *in, XGenericEventCookie *cookie)
 
     return 1;
 }
+
+static int
+wireToTouchOwnershipEvent(xXITouchOwnershipEvent *in,
+                          XGenericEventCookie *cookie)
+{
+    XITouchOwnershipEvent *out = malloc(sizeof(XITouchOwnershipEvent));
+
+    cookie->data = out;
+
+    out->type           = in->type;
+    out->display        = cookie->display;
+    out->extension      = in->extension;
+    out->evtype         = in->evtype;
+    out->send_event     = ((in->type & 0x80) != 0);
+    out->time           = in->time;
+    out->deviceid       = in->deviceid;
+    out->sourceid       = in->sourceid;
+    out->touchid        = in->touchid;
+    out->root           = in->root;
+    out->event          = in->event;
+    out->child          = in->child;
+    out->flags          = in->flags;
+
+    return 1;
+}
old mode 100755 (executable)
new mode 100644 (file)
index 674781f..5f84574
@@ -49,6 +49,10 @@ SOFTWARE.
  *     XExtToWire.c - reformat an XEvent into a wire event.
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
 #include <X11/extensions/XInput.h>
index 1b7693f..02cdcf7 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdio.h>
 #include <X11/Xlib.h>
 
index aee6671..99b1c44 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XGetDeviceMotionEvents - Get the motion history of an input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 610795b..211c9ca 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index 4517b6a..a6a44b7 100644 (file)
@@ -29,6 +29,9 @@ in this Software without prior written authorization from The Open Group.
  * XIGetClientPointer - Get the clientPointer setting for a client.
  *
  */
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/extensions/XI2proto.h>
old mode 100755 (executable)
new mode 100644 (file)
index 729b0a0..c66212d
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
old mode 100755 (executable)
new mode 100644 (file)
index 3d64404..2961034
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index 4596ff0..9431fbb 100644 (file)
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index a4bf094..8a1cdb2 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XGetDeviceModifierMapping - get the modifier map of an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 7ccf9fe..c5d088b 100644 (file)
@@ -50,6 +50,9 @@ SOFTWARE.
  * window.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
old mode 100755 (executable)
new mode 100644 (file)
index 4718617..0751b98
@@ -50,6 +50,10 @@ SOFTWARE.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
 #include <X11/Xlibint.h>
index 264effd..312ff20 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XGrabDeviceBut - Grab a button on an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 3c36000..7f6571b 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XGrabDeviceKey - Grab a key on an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 1cba1f6..ce4613e 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XGrabDevice - grab an extension input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 6b95361..b4c4bd9 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XGetDeviceFocus - Get the focus of an input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index dea8c4c..f890db7 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XGetSelectedExtensionEvents - return a list of currently selected events.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 75980a0..c8d997a 100644 (file)
  *
  */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdint.h>
 #include <X11/Xlibint.h>
 #include <X11/extensions/XI2proto.h>
 #include <X11/extensions/extutil.h>
 #include "XIint.h"
 
-Status
-XIAllowEvents(Display *dpy, int deviceid, int event_mode, Time time)
+/* for GetRequest() to work */
+#define X_XI2_2AllowEvents X_XIAllowEvents
+
+static Status
+_XIAllowEvents(Display *dpy, int deviceid, int event_mode, Time time,
+                    unsigned int touchid, Window grab_window)
 {
+    Bool have_XI22 = True;
     xXIAllowEventsReq *req;
+    xXI2_2AllowEventsReq *req_XI22;
 
     XExtDisplayInfo *extinfo = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, extinfo) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
        return (NoSuchExtension);
 
-    GetReq(XIAllowEvents, req);
+    if (_XiCheckExtInit(dpy, XInput_2_2, extinfo) == 0)
+        have_XI22 = True;
+
+    if (have_XI22)
+    {
+        GetReq(XI2_2AllowEvents, req_XI22);
+        req = (xXIAllowEventsReq*)req_XI22;
+    } else
+        GetReq(XIAllowEvents, req);
+
     req->reqType = extinfo->codes->major_opcode;
     req->ReqType = X_XIAllowEvents;
     req->deviceid = deviceid;
     req->mode = event_mode;
     req->time = time;
 
+    if (have_XI22) {
+        req_XI22->touchid = touchid;
+        req_XI22->grab_window = grab_window;
+    }
+
     UnlockDisplay(dpy);
     SyncHandle();
     return Success;
 }
+
+Status
+XIAllowEvents(Display *dpy, int deviceid, int event_mode, Time time)
+{
+    return _XIAllowEvents(dpy, deviceid, event_mode, time, 0, None);
+}
+
+Status
+XIAllowTouchEvents(Display *dpy, int deviceid, unsigned int touchid,
+                   Window grab_window, int event_mode)
+{
+    int status;
+    XExtDisplayInfo *extinfo = XInput_find_display(dpy);
+
+    LockDisplay(dpy);
+    if (_XiCheckExtInit(dpy, XInput_2_2, extinfo) == -1)
+       return (NoSuchExtension);
+
+    status = _XIAllowEvents(dpy, deviceid, event_mode, CurrentTime, touchid, grab_window);
+
+    UnlockDisplay(dpy);
+    SyncHandle();
+
+    return status;
+}
index 5ad1534..6308945 100644 (file)
@@ -29,6 +29,10 @@ in this Software without prior written authorization from The Open Group.
  * XIDefineCursor - Change the cursor of an extension input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdint.h>
 #include <X11/extensions/XI2proto.h>
 #include <X11/Xlibint.h>
@@ -44,7 +48,7 @@ int XIDefineCursor(Display *dpy, int deviceid, Window w, Cursor cursor)
     XExtDisplayInfo *info = XInput_find_display(dpy);
     LockDisplay(dpy);
 
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return (NoSuchExtension);
 
     GetReq(XIChangeCursor, req);
index 1d2a9bf..172f93e 100644 (file)
@@ -21,6 +21,9 @@
  * DEALINGS IN THE SOFTWARE.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/Xlibint.h>
@@ -38,7 +41,7 @@ XIGetFocus(Display *dpy, int deviceid, Window *focus_return)
     XExtDisplayInfo *extinfo = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, extinfo) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
        return (NoSuchExtension);
 
     GetReq(XIGetFocus, req);
index 985d3f1..dd1bd10 100644 (file)
  *
  */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdint.h>
 #include <X11/Xlibint.h>
 #include <X11/extensions/XI2proto.h>
@@ -43,7 +47,7 @@ XIGrabDevice(Display* dpy, int deviceid, Window grab_window, Time time,
     XExtDisplayInfo *extinfo = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, extinfo) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
        return (NoSuchExtension);
 
     GetReq(XIGrabDevice, req);
@@ -59,10 +63,10 @@ XIGrabDevice(Display* dpy, int deviceid, Window grab_window, Time time,
     req->cursor = cursor;
 
 
-    /* masks.mask_len is in bytes, but we need 4-byte units on the wire,
+    /* mask->mask_len is in bytes, but we need 4-byte units on the wire,
      * and they need to be padded with 0 */
-    len = req->mask_len * 4;
-    buff = calloc(1, len);
+    len = req->mask_len;
+    buff = calloc(1, len * 4);
     memcpy(buff, mask->mask, mask->mask_len);
 
     SetReqLen(req, len, len);
@@ -86,7 +90,7 @@ XIUngrabDevice(Display* dpy, int deviceid, Time time)
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return (NoSuchExtension);
 
     GetReq(XIUngrabDevice, req);
index 9b267bf..39c3d1b 100644 (file)
@@ -29,6 +29,9 @@ in this Software without prior written authorization from The Open Group.
  * XIChangeHierarchy - change the device hierarchy, i.e. which slave
  * device is attached to which master, etc.
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/extensions/XI2proto.h>
@@ -49,9 +52,12 @@ XIChangeHierarchy(Display* dpy,
     int dlen = 0, i;
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return (NoSuchExtension);
 
+    if (num_changes <= 0)
+        return Success;
+
     GetReq(XIChangeHierarchy, req);
     req->reqType = info->codes->major_opcode;
     req->ReqType = X_XIChangeHierarchy;
index 8953013..ac17c01 100644 (file)
@@ -21,6 +21,9 @@
  * DEALINGS IN THE SOFTWARE.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/Xlibint.h>
@@ -45,7 +48,7 @@ _XIPassiveGrabDevice(Display* dpy, int deviceid, int grabtype, int detail,
     XExtDisplayInfo *extinfo = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, extinfo) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
        return -1;
 
     GetReq(XIPassiveGrabDevice, req);
@@ -67,13 +70,13 @@ _XIPassiveGrabDevice(Display* dpy, int deviceid, int grabtype, int detail,
 
     buff = calloc(4, req->mask_len);
     memcpy(buff, mask->mask, mask->mask_len);
-    Data32(dpy, buff, req->mask_len * 4);
+    Data(dpy, buff, req->mask_len * 4);
     for (i = 0; i < num_modifiers; i++)
-        Data32(dpy, &modifiers_inout[i].modifiers, 4);
+        Data(dpy, (char*)&modifiers_inout[i].modifiers, 4);
 
     free(buff);
 
-    if (_XReply(dpy, (xReply *)&reply, 0, xTrue))
+    if (!_XReply(dpy, (xReply *)&reply, 0, xFalse))
     {
        UnlockDisplay(dpy);
        SyncHandle();
@@ -145,6 +148,25 @@ XIGrabFocusIn(Display *dpy, int deviceid, Window grab_window, int grab_mode,
                                 modifiers_inout);
 }
 
+int
+XIGrabTouchBegin(Display *dpy, int deviceid, Window grab_window,
+                 Bool owner_events, XIEventMask *mask,
+                 int num_modifiers, XIGrabModifiers *modifiers_inout)
+{
+    XExtDisplayInfo *extinfo = XInput_find_display(dpy);
+
+    LockDisplay(dpy);
+    if (_XiCheckExtInit(dpy, XInput_2_2, extinfo) == -1)
+       return -1;
+
+    /* FIXME: allow selection of GrabMode for paired devices? */
+    return _XIPassiveGrabDevice(dpy, deviceid, XIGrabtypeTouchBegin, 0,
+                                grab_window, None, XIGrabModeTouch,
+                                GrabModeAsync, owner_events, mask,
+                                num_modifiers, modifiers_inout);
+}
+
+
 static int
 _XIPassiveUngrabDevice(Display* dpy, int deviceid, int grabtype, int detail,
                        Window grab_window, int num_modifiers, XIGrabModifiers *modifiers)
@@ -155,7 +177,7 @@ _XIPassiveUngrabDevice(Display* dpy, int deviceid, int grabtype, int detail,
     XExtDisplayInfo *extinfo = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, extinfo) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
        return -1;
 
     GetReq(XIPassiveUngrabDevice, req);
@@ -208,3 +230,17 @@ XIUngrabFocusIn(Display* display, int deviceid, Window grab_window,
     return _XIPassiveUngrabDevice(display, deviceid, XIGrabtypeFocusIn, 0,
                                   grab_window, num_modifiers, modifiers);
 }
+
+int
+XIUngrabTouchBegin(Display* display, int deviceid, Window grab_window,
+                   int num_modifiers, XIGrabModifiers *modifiers)
+{
+    XExtDisplayInfo *extinfo = XInput_find_display(display);
+
+    LockDisplay(display);
+    if (_XiCheckExtInit(display, XInput_2_2, extinfo) == -1)
+       return -1;
+
+    return _XIPassiveUngrabDevice(display, deviceid, XIGrabtypeTouchBegin, 0,
+                                  grab_window, num_modifiers, modifiers);
+}
old mode 100755 (executable)
new mode 100644 (file)
index 0f77e58..83a7a68
@@ -49,7 +49,7 @@ XIListProperties(Display* dpy, int deviceid, int *num_props_return)
 
     LockDisplay(dpy);
     *num_props_return = 0;
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        goto cleanup;
 
     GetReq(XIListProperties, req);
@@ -88,7 +88,7 @@ XIDeleteProperty(Display* dpy, int deviceid, Atom property)
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return;
 
     GetReq(XIDeleteProperty, req);
@@ -111,7 +111,7 @@ XIChangeProperty(Display* dpy, int deviceid, Atom property, Atom type,
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return;
 
     GetReq(XIChangeProperty, req);
@@ -175,7 +175,7 @@ XIGetProperty(Display* dpy, int deviceid, Atom property, long offset,
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return 1;
 
     GetReq(XIGetProperty, req);
index 34c38cb..4be1eca 100644 (file)
  *
  */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdint.h>
 #include <X11/Xlibint.h>
 #include <X11/extensions/XI2proto.h>
@@ -29,7 +33,7 @@
 #include <X11/extensions/extutil.h>
 #include "XIint.h"
 
-extern int copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int nclasses);
+extern int copy_classes(XIDeviceInfo* to, xXIAnyInfo* from, int *nclasses);
 extern int size_classes(xXIAnyInfo* from, int nclasses);
 
 XIDeviceInfo*
@@ -45,7 +49,7 @@ XIQueryDevice(Display *dpy, int deviceid, int *ndevices_return)
     XExtDisplayInfo *extinfo = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, extinfo) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
        goto error;
 
     GetReq(XIQueryDevice, req);
@@ -70,6 +74,8 @@ XIQueryDevice(Display *dpy, int deviceid, int *ndevices_return)
 
     for (i = 0; i < reply.num_devices; i++)
     {
+        int             nclasses;
+        size_t          sz;
         XIDeviceInfo    *lib = &info[i];
         xXIDeviceInfo   *wire = (xXIDeviceInfo*)ptr;
 
@@ -77,8 +83,7 @@ XIQueryDevice(Display *dpy, int deviceid, int *ndevices_return)
         lib->use         = wire->use;
         lib->attachment  = wire->attachment;
         lib->enabled     = wire->enabled;
-        lib->num_classes = wire->num_classes;
-        lib->classes     = (XIAnyClassInfo**)&lib[1];
+        nclasses         = wire->num_classes;
 
         ptr += sizeof(xXIDeviceInfo);
 
@@ -86,8 +91,11 @@ XIQueryDevice(Display *dpy, int deviceid, int *ndevices_return)
         strncpy(lib->name, ptr, wire->name_len);
         ptr += ((wire->name_len + 3)/4) * 4;
 
-        lib->classes = Xmalloc(size_classes((xXIAnyInfo*)ptr, lib->num_classes));
-        ptr += copy_classes(lib, (xXIAnyInfo*)ptr, lib->num_classes);
+        sz = size_classes((xXIAnyInfo*)ptr, nclasses);
+        lib->classes = Xmalloc(sz);
+        ptr += copy_classes(lib, (xXIAnyInfo*)ptr, &nclasses);
+        /* We skip over unused classes */
+        lib->num_classes = nclasses;
     }
 
     Xfree(buf);
index b3bfebc..6666d1a 100644 (file)
@@ -29,6 +29,9 @@ in this Software without prior written authorization from The Open Group.
  * XIQueryPointer - Query the pointer of an extension input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/extensions/XI2proto.h>
@@ -59,7 +62,7 @@ XIQueryPointer(Display     *dpy,
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return False;
 
     GetReq(XIQueryPointer, req);
@@ -86,9 +89,12 @@ XIQueryPointer(Display     *dpy,
     mods->base          = rep.mods.base_mods;
     mods->latched       = rep.mods.latched_mods;
     mods->locked        = rep.mods.locked_mods;
+    mods->effective     = mods->base | mods->latched | mods->locked;
+
     group->base         = rep.group.base_group;
     group->latched      = rep.group.latched_group;
     group->locked       = rep.group.locked_group;
+    group->effective    = group->base | group->latched | group->locked;
 
     buttons->mask_len   = rep.buttons_len * 4;
     buttons->mask       = malloc(buttons->mask_len);
old mode 100755 (executable)
new mode 100644 (file)
index 1e4f9a4..225737f
  *
  */
 
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdint.h>
 #include <X11/Xlibint.h>
 #include <X11/extensions/XI2proto.h>
old mode 100755 (executable)
new mode 100644 (file)
index f1f3fa4..fa7eb54
@@ -30,6 +30,9 @@ in this Software without prior written authorization from the author.
  *
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/Xlibint.h>
@@ -52,7 +55,7 @@ XISelectEvents(Display* dpy, Window win, XIEventMask* masks, int num_masks)
 
     XExtDisplayInfo *info = XInput_find_display(dpy);
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1) {
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1) {
         r = NoSuchExtension;
         goto out;
     }
@@ -83,7 +86,7 @@ XISelectEvents(Display* dpy, Window win, XIEventMask* masks, int num_masks)
          * and they need to be padded with 0 */
         buff = calloc(1, mask.mask_len * 4);
         memcpy(buff, current->mask, current->mask_len);
-        Data32(dpy, &mask, sizeof(xXIEventMask));
+        Data(dpy, (char*)&mask, sizeof(xXIEventMask));
         Data(dpy, buff, mask.mask_len * 4);
         free(buff);
     }
@@ -108,7 +111,7 @@ XIGetSelectedEvents(Display* dpy, Window win, int *num_masks_return)
 
     *num_masks_return = -1;
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
         goto out;
 
     GetReq(XIGetSelectedEvents, req);
similarity index 95%
rename from src/XSetCPtr.c
rename to src/XISetCPtr.c
index 1176c5d..8537d8a 100644 (file)
@@ -32,6 +32,9 @@ in this Software without prior written authorization from The Open Group.
  * Ideally, the window manager will always send a SetClientPointer request
  * before the client interacts with an application.
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/extensions/XI2proto.h>
@@ -40,14 +43,14 @@ in this Software without prior written authorization from The Open Group.
 #include <X11/extensions/extutil.h>
 #include "XIint.h"
 
-Status 
+Status
 XISetClientPointer(Display* dpy, Window win, int deviceid)
 {
     xXISetClientPointerReq* req;
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return (NoSuchExtension);
 
     GetReq(XISetClientPointer, req);
index e1567bd..6208000 100644 (file)
  *
  */
 
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <stdint.h>
 #include <X11/Xlibint.h>
 #include <X11/extensions/XI2proto.h>
@@ -37,7 +41,7 @@ XISetFocus(Display *dpy, int deviceid, Window focus, Time time)
     XExtDisplayInfo *extinfo = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, extinfo) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, extinfo) == -1)
        return (NoSuchExtension);
 
     GetReq(XISetFocus, req);
index 038a0d3..426bf3b 100644 (file)
@@ -29,6 +29,9 @@ in this Software without prior written authorization from The Open Group.
  * XIWarpPointer - Warp the pointer of an extension input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <stdint.h>
 #include <X11/extensions/XI2proto.h>
@@ -54,7 +57,7 @@ XIWarpPointer(Display      *dpy,
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_2_0, info) == -1)
        return (NoSuchExtension);
 
     GetReq(XIWarpPointer, req);
old mode 100755 (executable)
new mode 100644 (file)
index b27f04a..be4eafb
@@ -7,9 +7,26 @@
 #define _XIINT_H_
 #include <X11/extensions/XI.h>
 
+/* inputproto 2.0 still shipped with these defined in the proto headers */
+#ifndef XInput_Initial_Release
+/* Indices into the versions[] array (XExtInt.c). Used as a index to
+ * retrieve the minimum version of XI from _XiCheckExtInit */
+#define Dont_Check                     0
+#define XInput_Initial_Release         1
+#define XInput_Add_XDeviceBell         2
+#define XInput_Add_XSetDeviceValuators 3
+#define XInput_Add_XChangeDeviceControl        4
+#define XInput_Add_DevicePresenceNotify        5
+#define XInput_Add_DeviceProperties    6
+#define XInput_2_0                     7
+#endif
+#define XInput_2_1                     8
+#define XInput_2_2                     9
+
 extern XExtDisplayInfo *XInput_find_display(Display *);
 
 extern int _XiCheckExtInit(Display *, int, XExtDisplayInfo *);
+extern int _XiCheckVersion(XExtDisplayInfo *info, int version_index);
 
 extern XExtensionVersion *_XiGetExtensionVersion(Display *, _Xconst char *, XExtDisplayInfo *);
 extern XExtensionVersion* _XiGetExtensionVersionRequest(Display *dpy, _Xconst char *name, int xi_opcode);
index 66b9eca..8667350 100644 (file)
@@ -69,7 +69,7 @@ XListDeviceProperties(Display* dpy, XDevice* dev, int *nprops_return)
             goto cleanup;
         }
 
-        _XRead32(dpy, props, rep.nAtoms << 2);
+        _XRead32(dpy, (long*)props, rep.nAtoms << 2);
     }
 
     *nprops_return = rep.nAtoms;
old mode 100755 (executable)
new mode 100644 (file)
index c544ae0..6b91238
@@ -50,6 +50,9 @@ SOFTWARE.
  *                      available input devices.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
@@ -58,6 +61,17 @@ SOFTWARE.
 #include <X11/extensions/extutil.h>
 #include "XIint.h"
 
+/* Calculate length field to a multiples of sizeof(XID). XIDs are typedefs
+ * to ulong and thus may be 8 bytes on some platforms. This can trigger a
+ * SIGBUS if a class ends up not being 8-aligned (e.g. after XAxisInfo).
+ */
+static int pad_to_xid(int base_size)
+{
+    int padsize = sizeof(XID);
+
+    return ((base_size + padsize - 1)/padsize) * padsize;
+}
+
 static int
 SizeClassInfo(xAnyClassPtr *any, int num_classes)
 {
@@ -66,18 +80,18 @@ SizeClassInfo(xAnyClassPtr *any, int num_classes)
     for (j = 0; j < num_classes; j++) {
         switch ((*any)->class) {
             case KeyClass:
-                size += sizeof(XKeyInfo);
+                size += pad_to_xid(sizeof(XKeyInfo));
                 break;
             case ButtonClass:
-                size += sizeof(XButtonInfo);
+                size += pad_to_xid(sizeof(XButtonInfo));
                 break;
             case ValuatorClass:
                 {
                     xValuatorInfoPtr v;
 
                     v = (xValuatorInfoPtr) *any;
-                    size += sizeof(XValuatorInfo) +
-                        (v->num_axes * sizeof(XAxisInfo));
+                    size += pad_to_xid(sizeof(XValuatorInfo) +
+                        (v->num_axes * sizeof(XAxisInfo)));
                     break;
                 }
             default:
@@ -102,7 +116,7 @@ ParseClassInfo(xAnyClassPtr *any, XAnyClassPtr *Any, int num_classes)
                     xKeyInfoPtr k = (xKeyInfoPtr) *any;
 
                     K->class = KeyClass;
-                    K->length = sizeof(XKeyInfo);
+                    K->length = pad_to_xid(sizeof(XKeyInfo));
                     K->min_keycode = k->min_keycode;
                     K->max_keycode = k->max_keycode;
                     K->num_keys = k->num_keys;
@@ -114,7 +128,7 @@ ParseClassInfo(xAnyClassPtr *any, XAnyClassPtr *Any, int num_classes)
                     xButtonInfoPtr b = (xButtonInfoPtr) *any;
 
                     B->class = ButtonClass;
-                    B->length = sizeof(XButtonInfo);
+                    B->length = pad_to_xid(sizeof(XButtonInfo));
                     B->num_buttons = b->num_buttons;
                     break;
                 }
@@ -126,8 +140,8 @@ ParseClassInfo(xAnyClassPtr *any, XAnyClassPtr *Any, int num_classes)
                     xAxisInfoPtr a;
 
                     V->class = ValuatorClass;
-                    V->length = sizeof(XValuatorInfo) +
-                        (v->num_axes * sizeof(XAxisInfo));
+                    V->length = pad_to_xid(sizeof(XValuatorInfo) +
+                        (v->num_axes * sizeof(XAxisInfo)));
                     V->num_axes = v->num_axes;
                     V->motion_buffer = v->motion_buffer_size;
                     V->mode = v->mode;
index b50d5b0..74f18ac 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XOpenDevice - Request the server to open and extension input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
old mode 100755 (executable)
new mode 100644 (file)
index 637d5cf..24d4e4e
@@ -49,6 +49,9 @@ SOFTWARE.
  * XQueryDeviceState - Query the state of an extension input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index fb401a6..ec5ba57 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XSelectExtensionEvent - Select input from an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
old mode 100755 (executable)
new mode 100644 (file)
index d0a6398..8aea9fb
@@ -49,6 +49,9 @@ SOFTWARE.
  * XSetDeviceButtonMapping - Set the button mapping of an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index dcbf25e..431887b 100644 (file)
@@ -50,6 +50,9 @@ SOFTWARE.
  * device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 11e8859..7361f62 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XSetDeviceModifierMapping - set the modifier map of an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index b184a33..9204a8e 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XSetDeviceMode - Set the mode of an extension input device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index ebaab33..5c0775f 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XSendExtensionEvent - send an extension event to a client.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
@@ -57,6 +60,11 @@ SOFTWARE.
 #include <X11/extensions/extutil.h>
 #include "XIint.h"
 
+/* Xlib's wire_vec is defined for a single event only, libXi may return
+ * multiple events.
+ */
+typedef Status (*ext_event_to_wire)(Display*, XEvent*, xEvent**, int*);
+
 Status
 XSendExtensionEvent(
     register Display   *dpy,
@@ -71,7 +79,7 @@ XSendExtensionEvent(
     int ev_size;
     xSendExtensionEventReq *req;
     xEvent *ev;
-    register Status(**fp) (Display *, XEvent*, xEvent **, int *);
+    ext_event_to_wire *fp;
     Status status;
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
@@ -81,10 +89,10 @@ XSendExtensionEvent(
 
     /* call through display to find proper conversion routine */
 
-    fp = &dpy->wire_vec[event->type & 0177];
+    fp = (ext_event_to_wire*)&dpy->wire_vec[event->type & 0177];
     if (*fp == NULL)
        *fp = _XiEventToWire;
-    status = (**fp) (dpy, event, &ev, &num_events);
+    status = (*fp) (dpy, event, &ev, &num_events);
 
     if (status) {
        GetReq(SendExtensionEvent, req);
index 273cd0d..abc0bdc 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XSetDeviceFocus - Set the focus of an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 7b59ae6..2d12718 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XUngrabDevice - Ungrab an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 38267a6..baa12fb 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XUngrabDeviceButton - Ungrab a button on an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>
index 1a60785..cab45a4 100644 (file)
@@ -49,6 +49,9 @@ SOFTWARE.
  * XUngrabDeviceKey - Ungrab a key on an extension device.
  *
  */
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
 #include <X11/extensions/XI.h>
 #include <X11/extensions/XIproto.h>