+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
--- /dev/null
+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.
+
-SUBDIRS = src
-#SUBDIRS = src man doc specs
+SUBDIRS = src man specs
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = xi.pc
+++ /dev/null
-#! /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 "$@"
-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)
[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
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.
------------------------------------
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
@@ -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.
@@ -72,19 +72,15 @@
return (ext);
}
-
+
-_X_HIDDEN XExtensionVersion *
-_XiGetExtensionVersion(register Display * dpy, _Xconst char *name,
- XExtDisplayInfo *info)
xGetExtensionVersionReq *req;
xGetExtensionVersionReply rep;
XExtensionVersion *ext;
-
+
- if (_XiCheckExtInit(dpy, Dont_Check, info) == -1)
- return ((XExtensionVersion *) NoSuchExtension);
-
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);
+
+++ 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(
endif
#configure: $(STAMP_DIR)/patch
-configure:
+configure:
autoreconf -vfi
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
+++ /dev/null
-#
-# 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
+++ /dev/null
-<?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 “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>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 "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 --------------> | - do device-specific initialization
- |
- | - call AddInputDevice (deviceProc,AutoStart)
-AddInputDevice |
- - creates DeviceIntRec |
- - records deviceProc |
- - adds new device to |
- list of off_devices. |
-sets dev->startup=AutoStart|
- | - call one of:
- | - RegisterPointerDevice (X pointer)
- | - processInputProc = ProcessPointerEvents
- | - RegisterKeyboardDevice (X keyboard)
- | - processInputProc = ProcessKeyboardEvents
- | - RegisterOtherDevice (extension device)
- | - processInputProc = ProcessOtherEvents
- |
- |
-InitAndStartDevices -----> | - calls deviceProc with parameters
- | (DEVICE_INIT, AutoStart)
-sets dev->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->startup & | (DEVICE_ON, AutoStart)
- dev->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 (&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<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->devicePrivate = (pointer) &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->devicePrivate;
-
- switch (mode)
- {
- case DEVICE_INIT:
- if (strcmp(localdev->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->n_axes,);
- motionproc, MOTION_BUF_SIZE, Absolute);
- for (i=0; i<localdev->n_axes; i++)
- InitValuatorAxisStruct (dev, i, min_val, max_val,
- resolution);
- InitFocusClassDeviceStruct (dev);
- InitProximityClassDeviceStruct (dev);
- InitPtrFeedbackClassDeviceStruct (dev, p_controlproc);
- }
- else if (strcmp(localdev->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->name, XI_KNOBBOX) == 0)
- {
- /****************************************************
- * This device reports motion.
- * It can be focused.
- ****************************************************/
-
- InitValuatorClassDeviceStruct (dev, localdev->n_axes,);
- motionproc, MOTION_BUF_SIZE, Absolute);
- for (i=0; i<localdev->n_axes; i++)
- InitValuatorAxisStruct (dev, i, min_val, max_val,
- resolution);
- InitFocusClassDeviceStruct (dev);
- }
- localdev->atom =
- MakeAtom(localdev->name, strlen(localdev->name), FALSE);
- AssignTypeAndName (dev, localdev->atom, localdev->name);
- break;
- case DEVICE_ON:
- AddEnabledDevice (localdev->file_ds);
- dev->on = TRUE;
- break;
- case DEVICE_OFF:
- dev->on = FALSE;
- RemoveEnabledDevice (localdev->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 -->
->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<MAX_DEVICES; i++)
- {
- if (!local_dev[i].initialized && available(local_dev[i]))
- {
- dev = (DeviceIntPtr) AddInputDevice (local_dev[i].deviceProc, TRUE);
- dev->public.devicePrivate = local_dev[i];
- RegisterOtherDevice (dev);
- dev->inited = ((*dev->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->type = DeviceKeyPress; /* defined by input extension */
- xev->detail = keycode; /* key pressed on this device */
- xev->time = timestamp; /* same as for core events */
- xev->rootX = pointerx; /* x location of core pointer */
- xev->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->deviceid = dev->id | MORE_EVENTS; /* sending more than 1*/
-
- /******************************************************************/
- /* Fields in the second 32-byte wire event: */
- /******************************************************************/
-
- xv = (deviceValuator *) ++xev;
- xv->type = DeviceValuator; /* event type of second event */
- xv->deviceid = dev->id; /* id of this device */
- xv->num_valuators = 0; /* no valuators being sent */
- xv->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->type = DeviceMotionNotify; /* defined by input extension */
- xev->detail = keycode; /* key pressed on this device */
- xev->time = timestamp; /* same as for core events */
- xev->rootX = pointerx; /* x location of core pointer */
- xev->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->deviceid = dev->id | MORE_EVENTS; /* sending more than 1*/
-
- /******************************************************************/
- /* Fields in the second 32-byte wire event: */
- /******************************************************************/
-
- xv = (deviceValuator *) ++xev;
- xv->type = DeviceValuator; /* event type of second event */
- xv->deviceid = dev->id; /* id of this device */
- xv->num_valuators = 2; /* 2 valuators being sent */
- xv->first_valuator = 0; /* first valuator being sent */
- xv->device_state = 0; /* will be filled in by DIX */
- xv->valuator0 = x; /* first axis of this device */
- xv->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>
--- /dev/null
+#
+# 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)
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;
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;
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(
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,
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,
XIGrabModifiers *modifiers
);
+extern Status XIUngrabTouchBegin(
+ Display* display,
+ int deviceid,
+ Window grab_window,
+ int num_modifiers,
+ XIGrabModifiers *modifiers
+);
extern Atom *XIListProperties(
Display* display,
# 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) < $< > $@
$(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
'\" 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
.\" -----------------------------------------------------------------
-.so manlibmansuffix/XGetDeviceControl.libmansuffix
+.so XGetDeviceControl.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
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 \{\
-.so manlibmansuffix/XGetDeviceKeyMapping.libmansuffix
+.so XGetDeviceKeyMapping.libmansuffix
-.so manlibmansuffix/XGetDeviceProperty.libmansuffix
+.so XGetDeviceProperty.libmansuffix
-.so manlibmansuffix/XGetFeedbackControl.libmansuffix
+.so XGetFeedbackControl.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
'\" 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
.\" -----------------------------------------------------------------
-.so manlibmansuffix/XOpenDevice.libmansuffix
+.so XOpenDevice.libmansuffix
-.so manlibmansuffix/XGetDeviceProperty.libmansuffix
+.so XGetDeviceProperty.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
-.so manlibmansuffix/XGetDeviceMotionEvents.libmansuffix
+.so XGetDeviceMotionEvents.libmansuffix
-.so manlibmansuffix/XListInputDevices.libmansuffix
+.so XListInputDevices.libmansuffix
-.so manlibmansuffix/XSetDeviceButtonMapping.libmansuffix
+.so XSetDeviceButtonMapping.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
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
-.so manlibmansuffix/XChangeDeviceDontPropagateList.libmansuffix
+.so XChangeDeviceDontPropagateList.libmansuffix
-.so manlibmansuffix/XSetDeviceFocus.libmansuffix
+.so XSetDeviceFocus.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
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 \{\
'\" 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
.\" -----------------------------------------------------------------
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 \{\
'\" 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
.\" -----------------------------------------------------------------
'\" 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
.\" -----------------------------------------------------------------
.\" * 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
'\" 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
.\" -----------------------------------------------------------------
.\}
.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
-----------
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
'\" 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
.\" -----------------------------------------------------------------
.if n \{\
.RE
.\}
-.sp
-Structures
+.SS "Structures"
.sp
.if n \{\
.RS 4
.\}
.nf
typedef struct {
-XID class;
-int length;
-XID id;
-} XFeedbackState,
-XFeedbackControl;
+ XID class;
+ int length;
+ XID id;
+} XFeedbackState, XFeedbackControl;
.fi
.if n \{\
.RE
.\}
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
.\}
.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 \{\
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
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.
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;
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;
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
-----------
-.so manlibmansuffix/XSelectExtensionEvent.libmansuffix
+.so XSelectExtensionEvent.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
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 \{\
'\" 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
.\" -----------------------------------------------------------------
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 \{\
'\" 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
.\" -----------------------------------------------------------------
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 \{\
'\" 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
.\" -----------------------------------------------------------------
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
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
'\" 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
.\" -----------------------------------------------------------------
.\" * 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
.sp
.nf
mode
- One of PropModeAppend, PropModePrepend or PropModeReplace\&.
+ One of XIPropModeAppend, XIPropModePrepend or XIPropModeReplace\&.
.fi
.sp
.nf
.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
.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
.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\&.
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)
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.
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
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
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
--------
'\" 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
.\" -----------------------------------------------------------------
.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
.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 \{\
-.so manlibmansuffix/XIChangeProperty.libmansuffix
+.so XIChangeProperty.libmansuffix
-.so manlibmansuffix/XIQueryDevice.libmansuffix
+.so XIQueryDevice.libmansuffix
-.so manlibmansuffix/XISetClientPointer.libmansuffix
+.so XISetClientPointer.libmansuffix
-.so manlibmansuffix/XISetFocus.libmansuffix
+.so XISetFocus.libmansuffix
-.so manlibmansuffix/XIChangeProperty.libmansuffix
+.so XIChangeProperty.libmansuffix
-.so manlibmansuffix/XISelectEvents.libmansuffix
+.so XISelectEvents.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
.SH "SYNOPSIS"
.sp
.nf
-#include <X11/extensions/XInput\&.h>
+#include <X11/extensions/XInput2\&.h>
.fi
.sp
.nf
.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
.sp
.nf
num_modifiers
- Number of elements in modifiers or modifiers_return
+ Number of elements in modifiers or modifiers_inout\&.
.fi
.sp
.nf
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
.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"
.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\&.
.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
.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\&.
.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
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
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 \{\
.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 \{\
SYNOPSIS
--------
- #include <X11/extensions/XInput.h>
+ #include <X11/extensions/XInput2.h>
int XIGrabButton( Display *display,
int deviceid,
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.
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
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.
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.
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
-----------
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
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
--------
'\" 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
.\" -----------------------------------------------------------------
.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
.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
.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 \{\
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
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
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)
'\" 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
.\" -----------------------------------------------------------------
.nf
int XIGrabEnter( Display *display,
int deviceid,
- Window grab_window
+ Window grab_window,
Cursor cursor,
int grab_mode,
int paired_device_mode,
.sp
.nf
num_modifiers
- Number of elements in modifiers or modifiers_return
+ Number of elements in modifiers or modifiers_inout\&.
.fi
.sp
.nf
.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"
.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
.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 \{\
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 \{\
.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 \{\
int XIGrabEnter( Display *display,
int deviceid,
- Window grab_window
+ Window grab_window,
Cursor cursor,
int grab_mode,
int paired_device_mode,
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
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
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.
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
-----------
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
--------
-.so manlibmansuffix/XIGrabEnter.libmansuffix
+.so XIGrabEnter.libmansuffix
-.so manlibmansuffix/XIGrabButton.libmansuffix
+.so XIGrabButton.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
-XIListProperties \- List a device\'s properties\&.
+XIListProperties \- List a device\*(Aqs properties\&.
.SH "SYNOPSIS"
.sp
.nf
'\" 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
.\" -----------------------------------------------------------------
.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
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
.\}
.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
.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 \{\
.\}
.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
double value;
int resolution;
int mode;
-} XIValuatorInfo;
+} XIValuatorClassInfo;
.fi
.if n \{\
.RE
.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 \{\
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.
double value;
int resolution;
int mode;
- } XIValuatorInfo;
+ } XIValuatorClassInfo;
The number field specifies the number of the axis on the
physical device.
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
'\" 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
.\" -----------------------------------------------------------------
.nf
root_x_return, root_y_return
Return the pointer coordinates relative to the root
- window\'s origin\&.
+ window\*(Aqs origin\&.
.fi
.sp
.nf
.\}
.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
.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
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.
'\" 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
.\" -----------------------------------------------------------------
.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
.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\&.
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
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
--------
'\" 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
.\" -----------------------------------------------------------------
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
'\" 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
.\" -----------------------------------------------------------------
.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
.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
'\" 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
.\" -----------------------------------------------------------------
.\" * 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
.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\&.
-.so manlibmansuffix/XIDefineCursor.libmansuffix
+.so XIDefineCursor.libmansuffix
-.so manlibmansuffix/XIGrabButton.libmansuffix
+.so XIGrabButton.libmansuffix
-.so manlibmansuffix/XIGrabDevice.libmansuffix
+.so XIGrabDevice.libmansuffix
-.so manlibmansuffix/XIGrabEnter.libmansuffix
+.so XIGrabEnter.libmansuffix
-.so manlibmansuffix/XIGrabEnter.libmansuffix
+.so XIGrabEnter.libmansuffix
-.so manlibmansuffix/XIGrabButton.libmansuffix
+.so XIGrabButton.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
-XIWarpPointer \- move a device\'s pointer\&.
+XIWarpPointer \- move a device\*(Aqs pointer\&.
.SH "SYNOPSIS"
.sp
.nf
'\" 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
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
-XListDeviceProperties \- List a device\'s properties\&.
+XListDeviceProperties \- List a device\*(Aqs properties\&.
.SH "SYNOPSIS"
.sp
.nf
'\" 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
.\" -----------------------------------------------------------------
'\" 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
.\" -----------------------------------------------------------------
'\" 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
.\" -----------------------------------------------------------------
'\" 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
.\" -----------------------------------------------------------------
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,
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,
'\" 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
.\" -----------------------------------------------------------------
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 \{\
'\" 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
.\" -----------------------------------------------------------------
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 \{\
'\" 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
.\" -----------------------------------------------------------------
* 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
.\}
.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\&.
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 \{\
'\" 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
.\" -----------------------------------------------------------------
-.so manlibmansuffix/XGetDeviceModifierMapping.libmansuffix
+.so XGetDeviceModifierMapping.libmansuffix
'\" 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
.\" -----------------------------------------------------------------
-.so manlibmansuffix/XGrabDevice.libmansuffix
+.so XGrabDevice.libmansuffix
-.so manlibmansuffix/XGrabDeviceButton.libmansuffix
+.so XGrabDeviceButton.libmansuffix
-.so manlibmansuffix/XGrabDeviceKey.libmansuffix
+.so XGrabDeviceKey.libmansuffix
--- /dev/null
+%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
+++ /dev/null
-
-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
-
-#
-# 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
-<appendix id="input_extension_protocol_encoding">
+<appendix id="Input_Extension_Protocol_Encoding">
<title>Input Extension Protocol Encoding</title>
<para>
<function>Syntactic Conventions</function>
<?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
purpose of the information in this document. It is provided "as is" without express or implied
warranty.
</para>
+</legalnotice>
+<legalnotice>
+<para role="multiLicensing">
+Copyright © 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 “AS IS”, WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
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>
<chapter><title>Input Extension</title>
-<sect1 id="Input_Extension_Overview">
+<sect1 id='Overview'>
<title>Overview</title>
<!-- .XS -->
<!-- (SN Input Extension Overview -->
<!-- .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
<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>
</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>
</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>
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.
<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>
<para>
<!-- .LP -->
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangeKeyboardDevice'>
<funcprototype>
<funcdef>int <function> XChangeKeyboardDevice</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<!-- .LP -->
<!-- .eM -->
If no error occurs,
-<function>XChangeKeyboardDevice</function>
+<xref linkend='XChangeKeyboardDevice' xrefstyle='select: title'/>
returns
<function>Success .</function>
A
</para>
<para>
<!-- .LP -->
-<function>XChangeKeyboardDevice</function>
+<xref linkend='XChangeKeyboardDevice' xrefstyle='select: title'/>
can generate
<function>AlreadyGrabbed ,</function>
<function>BadDevice ,</function>
<!-- .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>
<function>BadDevice</function>
error.
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangePointerDevice'>
<funcprototype>
<funcdef>int <function> XChangePointerDevice</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<!-- .LP -->
<!-- .eM -->
If no error occurs,
-<function>XChangePointerDevice</function>
+<xref linkend='XChangePointerDevice' xrefstyle='select: title'/>
returns
<function>Success .</function>
A
</para>
<para>
<!-- .LP -->
-<function>XChangePointerDevice</function>
+<xref linkend='XChangePointerDevice' xrefstyle='select: title'/>
can generate
<function>AlreadyGrabbed ,</function>
<function>BadDevice ,</function>
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
<!-- .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>
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
actively grabs an extension input device and generates
<function>DeviceFocusIn</function>
and
(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.
(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
</itemizedlist>
<para>
<!-- .LP -->
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
fails on the following conditions:
</para>
<itemizedlist>
</para>
<para>
<!-- .LP -->
-<function>XGrabDevice</function>
+<xref linkend='XGrabDevice' xrefstyle='select: title'/>
can generate
<function>BadClass ,</function>
<function>BadDevice ,</function>
<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>
<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
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.
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.
<function>BadMatch</function>
error.
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGrabDeviceKey'>
<funcprototype>
<funcdef>int <function> XGrabDeviceKey</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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>
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>
</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>
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>
<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>
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
<function>BadMatch</function>
error.
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGrabDeviceButton'>
<funcprototype>
<funcdef>int <function> XGrabDeviceButton</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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>
</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>
</para>
<para>
<!-- .LP -->
-<function>XGrabDeviceButton</function>
+<xref linkend='XGrabDeviceButton' xrefstyle='select: title'/>
can generate
<function>BadAccess , </function>
<function>BadClass ,</function>
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>
<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.
</para>
<para>
<!-- .LP -->
-<function>XUngrabDeviceButton </function>
+<xref linkend='XUngrabDeviceButton' xrefstyle='select: title'/>
can generate
<function>BadAlloc , </function>
<function>BadDevice ,</function>
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>
<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,
</para>
<para>
<!-- .LP -->
-<function>XAllowDeviceEvents</function>
+<xref linkend='XAllowDeviceEvents' xrefstyle='select: title'/>
can generate
<function>BadDevice</function>
and
<!-- .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>
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>
<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
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>
<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
<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.
</para>
<para>
<!-- .LP -->
-<function>XSetDeviceFocus</function>
+<xref linkend='XSetDeviceFocus' xrefstyle='select: title'/>
can generate
<function>BadDevice ,</function>
<function>BadMatch , </function>
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>
<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.
<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.
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XGetFeedbackControl</function>
+<xref linkend='XGetFeedbackControl' xrefstyle='select: title'/>
can generate
<function>BadDevice</function>
and
<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>
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XFreeFeedbackList</function>
+<xref linkend='XFreeFeedbackList' xrefstyle='select: title'/>
frees the list of feedback control information.
<!-- .sp -->
</para>
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>
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XChangeFeedbackControl</function>
+<xref linkend='XChangeFeedbackControl' xrefstyle='select: title'/>
controls the device characteristics described by the
<function>XFeedbackControl</function>
structure.
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>
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XChangeFeedbackControl</function>
+<xref linkend='XChangeFeedbackControl' xrefstyle='select: title'/>
can generate
<function>BadDevice ,</function>
<function>BadFeedBack ,</function>
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>
<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.
</para>
<para>
<!-- .LP -->
-<function>XDeviceBell</function>
+<xref linkend='XDeviceBell' xrefstyle='select: title'/>
can generate
<function>BadDevice</function>
and
use
<function>XGetDeviceKeyMapping .</function>
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceKeyMapping'>
<funcprototype>
<funcdef>KeySym * <function> XGetDeviceKeyMapping</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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:
<!-- .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).
<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 -->
</para>
<para>
<!-- .LP -->
-<function>XGetDeviceKeyMapping </function>
+<xref linkend='XGetDeviceKeyMapping' xrefstyle='select: title'/>
can generate
<function>BadDevice ,</function>
<function>BadMatch ,</function>
use
<function>XChangeDeviceKeyMapping .</function>
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XChangeDeviceKeyMapping'>
<funcprototype>
<funcdef>int <function> XChangeDeviceKeyMapping</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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.
<!-- .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.
</para>
<para>
<!-- .LP -->
-<function>XChangeDeviceKeyMapping</function>
+<xref linkend='XChangeDeviceKeyMapping' xrefstyle='select: title'/>
can generate
<function>BadAlloc ,</function>
<function>BadDevice ,</function>
use
<function>XGetDeviceModifierMapping .</function>
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceModifierMapping'>
<funcprototype>
<funcdef>XModifierKeymap * <function> XGetDeviceModifierMapping</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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
</para>
<para>
<!-- .LP -->
-<function>XGetDeviceModifierMapping</function>
+<xref linkend='XGetDeviceModifierMapping' xrefstyle='select: title'/>
can generate
<function>BadDevice</function>
and
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>
<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.
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.
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
</para>
<para>
<!-- .LP -->
-<function>XSetDeviceModifierMapping</function>
+<xref linkend='XSetDeviceModifierMapping' xrefstyle='select: title'/>
can generate
<function>BadAlloc ,</function>
<function>BadDevice ,</function>
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>
<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.
<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>
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>
<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
</para>
<para>
<!-- .LP -->
-<function>XGetDeviceButtonMapping</function>
+<xref linkend='XGetDeviceButtonMapping' xrefstyle='select: title'/>
can generate
<function>BadDevice</function>
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>
<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
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XQueryDeviceState</function>
+<xref linkend='XQueryDeviceState' xrefstyle='select: title'/>
can generate
<function>BadDevice</function>
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>
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XFreeDeviceState</function>
+<xref linkend='XFreeDeviceState' xrefstyle='select: title'/>
frees the device state data.
</para>
</sect3>
<!-- .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.
<!-- .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>
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>
<para>
<!-- .LP -->
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetExtensionVersion'>
<funcprototype>
<funcdef>XExtensionVersion * <function> XGetExtensionVersion</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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>
<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>
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>< X11/extensions/XI.h ></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>
<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
<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>
</para>
<para>
<!-- .LP -->
-<function>XListInputDevices</function>
+<xref linkend='XListInputDevices' xrefstyle='select: title'/>
returns NULL if there are no input devices to list.
<!-- .sp -->
</para>
<para>
<!-- .LP -->
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XFreeDeviceList'>
<funcprototype>
<funcdef>void <function> XFreeDeviceList</function></funcdef>
<paramdef>XDeviceInfo<parameter> *list</parameter></paramdef>
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XFreeDeviceList</function>
+<xref linkend='XFreeDeviceList' xrefstyle='select: title'/>
frees the list of input device information.
</para>
</sect3>
<!-- .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>
<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>
<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:
<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.
<!-- .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>
<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.
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>
</para>
<para>
<!-- .LP -->
-<function>XCloseDevice</function>
+<xref linkend='XCloseDevice' xrefstyle='select: title'/>
can generate
<function>BadDevice</function>
errors.
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>
<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.
</para>
<para>
<!-- .LP -->
-<function>XSetDeviceMode</function>
+<xref linkend='XSetDeviceMode' xrefstyle='select: title'/>
can generate
<function>BadDevice ,</function>
<function>BadMatch ,</function>
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>
<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.
</para>
<para>
<!-- .LP -->
-<function>XSetDeviceValuators</function>
+<xref linkend='XSetDeviceValuators' xrefstyle='select: title'/>
can generate
<function>BadDevice ,</function>
<function>BadLength ,</function>
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>
<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>
<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
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>
<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>
<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.
</para>
<para>
<!-- .LP -->
-<function>XChangeDeviceControl</function>
+<xref linkend='XChangeDeviceControl' xrefstyle='select: title'/>
can generate
<function>BadMatch</function>
and
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>
<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.
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>
<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>
window, use
<function>XGetSelectedExtensionEvents .</function>
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetSelectedExtensionEvents'>
<funcprototype>
<funcdef>int <function> XGetSelectedExtensionEvents</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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
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.
<!-- .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>
<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.
</para>
<para>
<!-- .LP -->
-<function>XChangeDeviceDontPropagateList</function>
+<xref linkend='XChangeDeviceDontPropagateList' xrefstyle='select: title'/>
can generate
<function>BadClass ,</function>
<function>BadMode ,</function>
<para>
<!-- .LP -->
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceDontPropagateList'>
<funcprototype>
<funcdef>XEventClass * <function> XGetDeviceDontPropagateList</function></funcdef>
<paramdef>Display<parameter> *display</parameter></paramdef>
<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
<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.
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>
<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>
<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>
</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>
<para>
<!-- .LP -->
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XGetDeviceMotionEvents'>
<funcprototype>
<funcdef>XDeviceTimeCoord * <function> XGetDeviceMotionEvents</function></funcdef>
<paramdef><parameter> axis_count_return)</parameter></paramdef>
<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,
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>
<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
<para>
<!-- .LP -->
<!-- .sM -->
-<funcsynopsis>
+<funcsynopsis id='XFreeDeviceMotionEvents'>
<funcprototype>
<funcdef>void <function> XFreeDeviceMotionEvents</function></funcdef>
<paramdef>XDeviceTimeCoord<parameter> *events</parameter></paramdef>
<para>
<!-- .LP -->
<!-- .eM -->
-<function>XFreeDeviceMotionEvents</function>
+<xref linkend='XFreeDeviceMotionEvents' xrefstyle='select: title'/>
frees the specified array of motion information.
<!-- .\" -->
<!-- .\" -->
XIPassiveGrab.c \
XIProperties.c \
XISelEv.c \
+ XISetCPtr.c \
XIWarpPointer.c \
XIHierarchy.c \
XIDefineCursor.c \
XQueryDv.c \
XSelect.c \
XSetBMap.c \
- XSetCPtr.c \
XSetDVal.c \
XSetMMap.c \
XSetMode.c \
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)
* XAllowDeviceEvents - Thaw a frozen extension device.
*
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <stdint.h>
#include <X11/extensions/XI.h>
#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 */,
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;
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 */,
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 */
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 */
};
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);
}
}
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}
};
/***********************************************************************
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.
register int version_index,
XExtDisplayInfo *info)
{
- XExtensionVersion *ext;
-
if (!XInputCheckExtension(dpy, info)) {
UnlockDisplay(dpy);
return (-1);
_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);
}
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
return (DONT_ENQUEUE);
else {
*re = *save;
- stev = (XDeviceStateNotifyEvent *) re;
return (ENQUEUE_EVENT);
}
}
return (DONT_ENQUEUE);
else {
*re = *save;
- kstev = (XDeviceStateNotifyEvent *) re;
return (ENQUEUE_EVENT);
}
}
return (DONT_ENQUEUE);
else {
*re = *save;
- bstev = (XDeviceStateNotifyEvent *) re;
return (ENQUEUE_EVENT);
}
}
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;
}
}
*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:
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))
{
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);
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
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
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);
case XIValuatorClass:
len += sizeDeviceClassType(XIValuatorClass, 0);
break;
+ case XIScrollClass:
+ len += sizeDeviceClassType(XIScrollClass, 0);
+ break;
default:
printf("copyDeviceChangedEvent: unknown type %d\n",
any->type);
{
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;
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;
{
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;
+ }
}
}
}
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)
{
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;
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:
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:
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;
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++)
{
case XIValuatorClass:
l = sizeDeviceClassType(XIValuatorClass, 0);
break;
+ case XIScrollClass:
+ l = sizeDeviceClassType(XIScrollClass, 0);
+ break;
+ case XITouchClass:
+ l = sizeDeviceClassType(XITouchClass, 0);
+ break;
}
len += l;
* |______________________^
*/
_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:
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:
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;
/* 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;
}
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);
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;
}
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;
}
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 */
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);
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);
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);
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;
+}
* 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>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdio.h>
#include <X11/Xlib.h>
* 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>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
* XIGetClientPointer - Get the clientPointer setting for a client.
*
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdint.h>
#include <X11/extensions/XI2proto.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
* 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>
* window.
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#include <X11/Xlibint.h>
* 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>
* 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>
* XGrabDevice - grab an extension input device.
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
* 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>
* 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>
*
*/
+#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;
+}
* 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>
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);
* DEALINGS IN THE SOFTWARE.
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdint.h>
#include <X11/Xlibint.h>
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);
*
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdint.h>
#include <X11/Xlibint.h>
#include <X11/extensions/XI2proto.h>
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);
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);
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);
* 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>
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;
* DEALINGS IN THE SOFTWARE.
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdint.h>
#include <X11/Xlibint.h>
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);
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();
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)
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);
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);
+}
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);
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);
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);
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);
*
*/
+#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"
-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*
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);
for (i = 0; i < reply.num_devices; i++)
{
+ int nclasses;
+ size_t sz;
XIDeviceInfo *lib = &info[i];
xXIDeviceInfo *wire = (xXIDeviceInfo*)ptr;
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);
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);
* 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>
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);
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);
*
*/
+
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdint.h>
#include <X11/Xlibint.h>
#include <X11/extensions/XI2proto.h>
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <stdint.h>
#include <X11/Xlibint.h>
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;
}
* 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);
}
*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);
* 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>
#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);
*
*/
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif
+
#include <stdint.h>
#include <X11/Xlibint.h>
#include <X11/extensions/XI2proto.h>
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);
* 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>
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);
#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);
goto cleanup;
}
- _XRead32(dpy, props, rep.nAtoms << 2);
+ _XRead32(dpy, (long*)props, rep.nAtoms << 2);
}
*nprops_return = rep.nAtoms;
* available input devices.
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
#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)
{
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:
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;
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;
}
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;
* 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>
* 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>
* 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>
* 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>
* device.
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
* 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>
* 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>
* 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>
#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,
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);
/* 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);
* 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>
* XUngrabDevice - Ungrab an extension device.
*
*/
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
#include <X11/extensions/XI.h>
#include <X11/extensions/XIproto.h>
* 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>
* 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>