--- libxi-1.7.10.orig/.gitignore
+++ libxi-1.7.10/.gitignore
@@ -0,0 +1,78 @@
+#
+# X.Org module default exclusion patterns
+# The next section if for module specific patterns
+#
+# Do not edit the following section
+# GNU Build System (Autotools)
+aclocal.m4
+autom4te.cache/
+autoscan.log
+ChangeLog
+compile
+config.guess
+config.h
+config.h.in
+config.log
+config-ml.in
+config.py
+config.status
+config.status.lineno
+config.sub
+configure
+configure.scan
+depcomp
+.deps/
+INSTALL
+install-sh
+.libs/
+libtool
+libtool.m4
+ltmain.sh
+lt~obsolete.m4
+ltoptions.m4
+ltsugar.m4
+ltversion.m4
+Makefile
+Makefile.in
+mdate-sh
+missing
+mkinstalldirs
+*.pc
+py-compile
+stamp-h?
+symlink-tree
+texinfo.tex
+ylwrap
+
+# Do not edit the following section
+# Edit Compile Debug Document Distribute
+*~
+*.[0-9]
+*.[0-9]x
+*.bak
+*.bin
+core
+*.dll
+*.exe
+*-ISO*.bdf
+*-JIS*.bdf
+*-KOI8*.bdf
+*.kld
+*.ko
+*.ko.cmd
+*.lai
+*.l[oa]
+*.[oa]
+*.obj
+*.patch
+*.so
+*.pcf.gz
+*.pdb
+*.tar.bz2
+*.tar.gz
+#
+# Add & Override patterns for libXi
+#
+# Edit the following section as needed
+# For example, !report.pc overrides *.pc. See 'man gitignore'
+#
--- libxi-1.7.10.orig/.pc/.quilt_patches
+++ libxi-1.7.10/.pc/.quilt_patches
@@ -0,0 +1 @@
+debian/patches
--- libxi-1.7.10.orig/.pc/.quilt_series
+++ libxi-1.7.10/.pc/.quilt_series
@@ -0,0 +1 @@
+series
--- libxi-1.7.10.orig/.pc/.version
+++ libxi-1.7.10/.pc/.version
@@ -0,0 +1 @@
+2
--- libxi-1.7.10.orig/.pc/0001-Documentation-Ids.patch/specs/inputlib.xml
+++ libxi-1.7.10/.pc/0001-Documentation-Ids.patch/specs/inputlib.xml
@@ -0,0 +1,75 @@
+
+ %defs;
+]>
+
+
+
+
+ X Input Device Extension Library
+ X Version 11, Release &fullrelvers;
+ Version 1.0
+
+
+ MarkPatrick
+ Ardent Computer
+
+
+ GeorgeSachs
+ Hewlett-Packard
+
+
+ 198919901991
+ Hewlett-Packard Company
+ Ardent Computer
+
+
+
+
+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. Ardent and Hewlett-Packard make no representations about the suitability for any
+purpose of the information in this document. It is provided "as is" without express or implied
+warranty.
+
+
+
+
+
+Copyright © 1989, 1990, 1991, 1992 X Consortium
+
+
+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 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 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.
+
+
+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.
+
+X Window System is a trademark of The Open Group.
+
+
+
+
+
+
+
--- libxi-1.7.10.orig/.pc/0001-Documentation-Ids.patch/specs/library.xml
+++ libxi-1.7.10/.pc/0001-Documentation-Ids.patch/specs/library.xml
@@ -0,0 +1,8559 @@
+Input Extension
+
+Overview
+
+
+
+
+
+This document describes an extension to
+the X11 server. The purpose of this extension is to support the use
+of additional input devices beyond the pointer and keyboard devices
+defined by the core X protocol. This first section gives an overview
+of the input extension. The following sections correspond to
+chapters 9, 10, and 11, ``Window and Session Manager Functions'',
+``Events'', and ``Event Handling Functions'' of the
+``Xlib - C Language Interface'' manual
+and describe how to use the input device extension.
+
+
+Design Approach
+
+
+
+
+
+The design approach of the extension is to define functions
+and events analogous to the core functions and events.
+This allows extension input devices and events to be individually
+distinguishable from each other and from the core input devices and events.
+These functions and events make use of a device identifier and support the
+reporting of n-dimensional motion data as well as other data that
+is not currently reportable via the core input events.
+
+
+
+Core Input Devices
+
+
+
+
+
+The X server core protocol supports two input devices: a pointer and a
+keyboard. The pointer device has two major functions.
+First, it may be used to generate motion information
+that client programs can detect. Second, it may also be used to indicate the
+current location and focus of the X keyboard. To accomplish this, the server
+echoes a cursor at the current position of the X pointer. Unless the X
+keyboard has been explicitly focused, this cursor also shows the current
+location and focus of the X keyboard.
+
+
+
+The X keyboard is used to generate input that client programs can detect.
+
+
+
+The X keyboard and X pointer are referred to in this document as
+the core devices, and the input
+events they generate
+( KeyPress ,
+KeyRelease ,
+ButtonPress ,
+ButtonRelease ,
+and
+MotionNotify )
+are known as the core input events. All other
+input devices are referred to as extension input devices, and the
+input events they generate are referred to as extension input events.
+
+This input extension does not change the behavior or functionality of the
+core input devices, core events, or core protocol requests, with the
+exception of the core grab requests. These requests may affect the
+synchronization of events from extension devices. See the explanation
+in the section titled ``Event Synchronization and Core Grabs.''
+
+
+
+
+Selection of the physical devices to be initially used by the server as the
+core devices is left implementation dependent. Functions are defined that
+allow client programs to change which physical devices are used as the
+core devices.
+
+
+
+Extension Input Devices
+
+
+
+
+
+The input extension controls access to input devices other than the X keyboard
+and X pointer. It allows client programs to select input from these devices
+independently
+from each other and independently from the core devices. Input events from
+these devices are of extension types
+( DeviceKeyPress ,
+DeviceKeyRelease ,
+DeviceButtonPress ,
+DeviceButtonRelease ,
+DeviceMotionNotify ,
+and so on) and contain
+a device identifier so that events of the same type coming from different
+input devices can be distinguished.
+
+
+
+Extension input events are not limited in size by the size of the server
+32-byte wire events. Extension input events
+may be constructed by the server sending as many
+wire-sized events as necessary to return the information required for
+that event.
+The library event reformatting routines
+are responsible for combining these into one or more client XEvents.
+
+
+
+Any input device that generates key, button, or motion data may be used as
+an extension input device.
+Extension input devices may have zero or more keys, zero or more buttons,
+and may report zero or more axes of motion. Motion may be reported
+as relative movements from a previous position or as an absolute
+position. All valuators reporting motion information for a given
+extension input device must report the same kind of motion information
+(absolute or relative).
+
+
+
+This extension is designed to accommodate new types of input devices that
+may be added in the future. The protocol requests that refer to
+specific characteristics of input devices organize that information
+by input device classes. Server implementors may add new
+classes of input devices without changing the protocol requests.
+
+
+
+All extension input
+devices are treated like the core X keyboard in determining their location
+and focus. The server does not track the location of these devices on an
+individual basis and, therefore,
+does not echo a cursor to indicate their current location.
+Instead, their location is determined by the location of the core X pointer.
+Like the core X keyboard, some may be explicitly focused. If they are
+not explicitly focused, their focus
+is determined by the location of the core X pointer.
+
+
+Input Device Classes
+
+
+
+
+
+Some of the input extension requests divide input devices into classes
+based on their functionality. This is intended to allow new classes of input
+devices to be defined at a later time without changing the semantics of
+these functions. The following input device classes are currently
+defined:
+
+
+ KEY
+
+
+The device reports key events.
+
+
+
+
+ BUTTON
+
+
+The device reports button events.
+
+
+
+
+ VALUATOR
+
+
+The device reports valuator data in motion events.
+
+
+
+
+ PROXIMITY
+
+
+The device reports proximity events.
+
+
+
+
+ FOCUS
+
+
+The device can be focused.
+
+
+
+
+ FEEDBACK
+
+
+The device supports feedbacks.
+
+
+
+
+
+
+
+Additional classes may be added in the future.
+Functions that support multiple input classes, such as the
+
+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
+class defined at the time those clients were compiled. In this way,
+new classes can be added without forcing existing clients that use
+these functions to be recompiled.
+
+
+
+
+Using Extension Input Devices
+
+
+
+
+
+A client that wishes to access an input device does so through the library
+functions defined in the following sections. A typical sequence of requests
+that a client would make is as follows:
+
+
+
+
+
+- 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
+
+request, see the section entitled ``Listing Available Devices.''
+
+
+
+
+
+- requests that the server open the device for access by this client.
+This request returns an
+XDevice
+structure that is used
+by most other input extension requests to identify the specified device.
+For a description of the
+
+request, see the section entitled ``Enabling and Disabling Extension Devices.''
+
+
+
+
+Determine the event types and event classes needed to select the desired
+input extension events, and identify them when they are received.
+This is done via macros whose name corresponds to the desired event, for
+example,
+DeviceKeyPress .
+For a description of these macros,
+see the section entitled ``Selecting Extension Device Events.''
+
+
+
+
+
+- selects the desired events from the server.
+For a description of the
+XSelextExtensionEvent
+request, see the section entitled ``Selecting Extension Device Events.''
+
+
+
+
+XNextEvent
+- receives the next available event. This is the core
+XNextEvent
+function provided by the standard X libarary.
+
+
+
+
+
+Other requests are defined to grab and focus extension devices, to
+change their key, button, or modifier mappings, to control the
+propagation of input extension events, to get motion history from an
+extension device, and to send input extension events to another client.
+These functions are described in the following sections.
+
+
+
+
+Library Extension Requests
+
+
+
+
+
+Extension input devices are accessed by client programs through the
+use of new protocol requests.
+The following requests are provided as extensions to Xlib. Constants
+and structures referenced by these functions may be found in the
+files <X11/extensions/XI.h> and <X11/extensions/XInput.h>,
+which are attached to this document as
+Appendix A.
+
+
+
+The library will return NoSuchExtension if an extension request
+is made to a server that does not support the input extension.
+
+
+
+Input extension requests cannot be used to access the X keyboard and
+X pointer devices.
+
+
+Window Manager Functions
+
+
+
+
+
+This section discusses the following X Input Extension Window Manager topics:
+
+
+
+
+Changing the core devices
+
+
+
+
+Event synchronization and core grabs
+
+
+
+
+Extension active grabs
+
+
+
+
+Passively grabbing a key
+
+
+
+
+Passively grabbing a button
+
+
+
+
+Thawing a device
+
+
+
+
+Controlling device focus
+
+
+
+
+Controlling device feedback
+
+
+
+
+Ringing a bell on an input device
+
+
+
+
+Controlling device encoding
+
+
+
+
+Controlling button mapping
+
+
+
+
+Obtaining the state of a device
+
+
+
+
+Changing the Core Devices
+
+
+
+
+
+
+These functions are provided to change which physical device is used
+as the X pointer or X keyboard.
+
+
+
+Using these functions may change the characteristics of the core devices.
+The new pointer device may have a different number of buttons from the
+old one, or the new keyboard device may have a different number of
+keys or report a different range of keycodes. Client programs may be
+running that depend on those characteristics. For example, a client
+program could allocate an array based on the number of buttons on the
+pointer device and then use the button numbers received in button events
+as indices into that array. Changing the core devices could cause
+such client programs to behave improperly or to terminate abnormally
+if they ignore the
+ChangeDeviceNotify
+event generated by these requests.
+
+
+
+
+
+These functions change the X keyboard or X pointer device and generate an
+XChangeDeviceNotify
+event and a
+MappingNotify
+event.
+The specified device becomes the
+new X keyboard or X pointer device. The location of the core device
+does not change as a result of this request.
+
+
+
+These requests fail and return
+AlreadyGrabbed
+if either the specified
+device or the core device it would replace are grabbed by some other client.
+They fail and return
+GrabFrozen
+if either device is frozen by the active grab of another client.
+
+
+
+These requests fail with a
+BadDevice
+error if the specified device is invalid, has not previously been opened via
+XOpenDevice ,
+or is
+not supported as a core device by the server implementation.
+
+
+
+Once the device has successfully replaced one of the core devices, it
+is treated as a core device until it is in turn replaced by another
+ChangeDevice
+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
+
+request to close the new core device will fail with a
+BadDevice
+error.
+
+
+
+
+To change which physical device is used as the X keyboard, use the
+
+function.
+The specified device must support input class
+Keys
+(as reported in the
+ListInputDevices
+request) or the request will fail with a
+BadMatch
+error.
+
+
+
+
+
+
+ int XChangeKeyboardDevice
+ Display *display
+ XDevice *device
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+
+
+
+If no error occurs,
+
+returns
+Success .
+A
+ChangeDeviceNotify
+event with the request field set to
+NewKeyboard
+is sent to all clients selecting that event.
+A
+MappingNotify
+event with the request field set to
+MappingKeyboard
+is sent to all clients.
+The requested device becomes the X keyboard, and the old keyboard becomes
+available as an extension input device.
+The focus state of the new keyboard is the same as
+the focus state of the old X keyboard.
+
+
+
+
+can generate
+AlreadyGrabbed ,
+BadDevice ,
+BadMatch ,
+and
+GrabFrozen
+errors.
+
+
+
+
+To change which physical device is used as the X pointer,
+use the
+
+function.
+The specified device must support input class
+Valuators
+(as reported in the
+
+request) and report at least two axes of motion,
+or the request will fail with a
+BadMatch
+error.
+If the specified device reports more than two axes, the two specified in
+the xaxis and yaxis arguments will be used. Data from other
+valuators on the device will be ignored.
+
+
+
+If the specified device reports absolute positional information, and the
+server implementation does not allow such a device to be used as the
+X pointer, the request will fail with a
+BadDevice
+error.
+
+
+
+ int XChangePointerDevice
+ Display *display
+ XDevice *device
+ int xaxis
+ int yaxis
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ xaxis
+
+
+
+Specifies the zero-based index of the axis to be used as the x-axis of the
+pointer device.
+
+
+
+
+
+ yaxis
+
+
+
+Specifies the zero-based index of the axis to be used as the y-axis of the
+pointer device.
+
+
+
+
+
+
+
+
+If no error occurs,
+
+returns
+Success .
+A
+ChangeDeviceNotify
+event with the request field set to
+NewPointer
+is sent to all clients selecting that event.
+A
+MappingNotify
+event with the request field set to
+MappingPointer
+is sent to all clients.
+The requested device becomes the X pointer, and the old pointer becomes
+available as an extension input device.
+
+
+
+
+can generate
+AlreadyGrabbed ,
+BadDevice ,
+BadMatch ,
+and
+GrabFrozen
+errors.
+
+
+
+Event Synchronization and Core Grabs
+
+
+
+
+
+Implementation of the input extension requires an extension of the
+meaning of event synchronization for the core grab requests. This is
+necessary in order to allow window managers to freeze all input devices
+with a single request.
+
+
+
+The core grab requests require a pointer_mode and keyboard_mode
+argument. The meaning of these modes is changed by the input extension.
+For the
+XGrabPointer
+and
+XGrabButton
+requests, pointer_mode controls synchronization of the pointer device,
+and keyboard_mode controls the synchronization of all other input devices.
+For the
+XGrabKeyboard
+and
+XGrabKey
+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
+requests, the synchronization of extension devices
+is controlled by the mode specified for the device not being grabbed.
+
+
+
+Extension Active Grabs
+
+
+
+
+
+Active grabs of
+extension devices are supported via the
+
+function in the same way that core devices are grabbed using the core
+XGrabKeyboard
+function, except that an extension input device
+is passed as a function parameter.
+The
+
+function allows a previous active grab for an extension device to be released.
+
+
+
+Passive grabs of buttons and keys on extension devices are supported
+via the
+
+and
+
+functions.
+These passive grabs are released via the
+
+and
+
+functions.
+
+
+
+
+To grab an extension device, use the
+
+function.
+The device must have previously been opened using the
+
+function.
+
+
+
+ int XGrabDevice
+ Display *display
+ XDevice *device
+ Window grab_window
+ Bool owner_events
+ int event_count
+ XEventClass *event_list
+ int this_device_mode
+ int other_device_mode
+ Time time
+
+
+
+
+
+
+ "display"
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ grab_window
+
+
+
+Specifies the ID of a window associated with the device specified above.
+
+
+
+
+
+ owner_events
+
+
+
+Specifies a boolean value of either
+True
+or
+False .
+
+
+
+
+
+ event_count
+
+
+
+Specifies the number of elements in the event_list array.
+
+
+
+
+
+ event_list
+
+
+
+Specifies a pointer to a list of event classes that indicate which events
+the client wishes to receive.
+These event classes must have been obtained
+using the device being grabbed.
+
+
+
+
+
+ this_device_mode
+
+
+
+Controls further processing of events from this device. You can pass one
+of these constants:
+GrabModeSync
+or
+GrabModeAsync .
+
+
+
+
+
+ other_device_mode
+
+
+
+Controls further processing of events from all other devices. You can pass one
+of these constants:
+GrabModeSync
+or
+GrabModeAsync .
+
+
+
+
+
+ time
+
+
+
+Specifies the time. This may be either a timestamp expressed in
+milliseconds or
+CurrentTime .
+
+
+
+
+
+
+
+
+
+actively grabs an extension input device and generates
+DeviceFocusIn
+and
+DeviceFocusOut
+events.
+Further input events from this device are reported only to the grabbing client.
+This function overrides any previous active grab by this client for this device.
+
+
+
+The event_list parameter is a pointer to a list of event classes. This list
+indicates which events the client wishes to receive while the grab is active.
+If owner_events is
+False ,
+input events from this device are reported with respect to
+grab_window and are reported only if specified in event_list.
+If owner_events is
+True ,
+then if a generated event would normally be reported to this client,
+it is reported normally.
+Otherwise, the event is reported with respect to the grab_window and is only
+reported if specified in event_list.
+
+
+
+The this_device_mode argument controls the further processing
+of events from this device, and the other_device_mode argument controls
+the further processing of input events from all other devices.
+
+
+
+
+If the this_device_mode argument is
+GrabModeAsync ,
+device event processing continues
+normally; if the device is currently frozen by this client, then
+processing of device events is resumed.
+If the this_device_mode argument is
+GrabModeSync ,
+the state of the grabbed device
+(as seen by client applications) appears to freeze,
+and no further device events are generated by the server until the
+grabbing client issues a releasing
+
+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.
+
+
+
+
+If the other_device_mode is
+GrabModeAsync ,
+event processing from other input devices is unaffected
+by activation of the grab.
+If other_device_mode is
+GrabModeSync ,
+the state of all devices except the grabbed device
+(as seen by client applications) appears to freeze, and no further
+events are generated by the server until the grabbing client issues a
+releasing
+XAllowEvents
+or
+
+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
+processing.
+
+
+
+
+
+
+fails on the following conditions:
+
+
+
+
+If the device is actively grabbed by some other client, it returns
+AlreadyGrabbed .
+
+
+
+
+If grab_window is not viewable, it returns
+GrabNotViewable .
+
+
+
+
+If the specified time is earlier
+than the last-grab-time for the specified device
+or later than the current X server time, it returns
+GrabInvalidTime .
+Otherwise,
+the last-grab-time for the specified device is set
+to the specified time and
+CurrentTime
+is replaced by the current X server time.
+
+
+
+
+If the device is frozen by an active grab of another client, it returns
+GrabFrozen .
+
+
+
+
+
+If a grabbed device is closed by a client while an active grab by that
+client is in effect, that active grab will be released.
+Any passive grabs established by that client will be released.
+If the device is frozen only by an active grab
+of the requesting client, it is thawed.
+
+
+
+
+can generate
+BadClass ,
+BadDevice ,
+BadValue ,
+and
+BadWindow
+errors.
+
+
+
+
+To release a grab of an extension device, use the
+
+function.
+
+
+
+
+
+
+ int XUngrabDevice
+ Display *display
+ XDevice *device
+ Time time
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ time
+
+
+
+Specifies the time. This may be either a timestamp expressed in
+milliseconds, or
+CurrentTime .
+
+
+
+
+
+
+
+
+
+allows a client to release an extension input device and any
+queued events if this client has it grabbed from either
+
+or
+XGrabDeviceKey .
+If any other devices are frozen by the grab,
+
+thaws them.
+This function does not release the device and any
+queued events if the specified time is earlier than the last-device-grab
+time or is later than the current X server time. It also generates
+DeviceFocusIn
+and
+DeviceFocusOut
+events. The X server automatically performs an
+
+if the event window for an active device grab becomes not viewable
+or if the client terminates without releasing the grab.
+
+
+
+
+can generate
+BadDevice
+errors.
+
+
+
+Passively Grabbing a Key
+
+
+
+
+
+To passively grab a single key on an extension device, use
+XGrabDeviceKey .
+That device must have previously been opened using the
+
+function, or the request will fail with a
+BadDevice
+error.
+If the specified device does not support input class
+Keys ,
+the request will fail with a
+BadMatch
+error.
+
+
+
+ int XGrabDeviceKey
+ Display *display
+ XDevice *device
+ int keycode
+ unsignedint modifiers
+ XDevice *modifier_device
+ Window grab_window
+ Bool owner_events
+ int event_count
+ XEventClass *event_list
+ int this_device_mode
+ int other_device_mode
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ keycode
+
+
+
+Specifies the keycode of the key that is to be grabbed. You can pass
+either the keycode or
+AnyKey .
+
+
+
+
+
+ modifiers
+
+
+
+Specifies the set of keymasks. This mask is the bitwise inclusive OR
+of these keymask bits:
+ShiftMask ,
+LockMask ,
+ControlMask ,
+Mod1Mask ,
+Mod2Mask ,
+Mod3Mask ,
+Mod4Mask ,
+and
+Mod5Mask .
+
+
+
+
+
+
+
+
+
+You can also pass
+AnyModifier ,
+which is equivalent to issuing the grab key request
+for all possible modifier combinations (including the combination
+of no modifiers).
+
+
+
+
+
+ modifier_device
+
+
+
+Specifies the device whose modifiers are to be used. If NULL is
+specified, the core X keyboard is used as the modifier_device.
+
+
+
+
+
+ grab_window
+
+
+
+Specifies the ID of a window associated with the device specified above.
+
+
+
+
+
+ owner_events
+
+
+
+Specifies a boolean value of either
+True
+or
+False .
+
+
+
+
+
+ event_count
+
+
+
+Specifies the number of elements in the event_list array.
+
+
+
+
+
+ event_list
+
+
+
+Specifies a pointer to a list of event classes that indicate which events
+the client wishes to receive.
+
+
+
+
+
+ this_device_mode
+
+
+
+Controls further processing of events from this device.
+You can pass one of these constants:
+GrabModeSync
+or
+GrabModeAsync .
+
+
+
+
+
+ other_device_mode
+
+
+
+Controls further processing of events from all other devices.
+You can pass one of these constants:
+GrabModeSync
+or
+GrabModeAsync .
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XGrabKey
+function. It creates an
+explicit passive grab for a key on an extension device.
+The
+
+function establishes a passive grab on a device.
+Consequently, in the future,
+
+
+
+
+IF the device is not grabbed and the specified key,
+which itself can be a modifier key, is logically pressed
+when the specified modifier keys logically are down on the specified
+modifier device (and no other keys are down),
+
+
+
+
+AND no other modifier keys logically are down,
+
+
+
+
+AND 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 pointer,
+
+
+
+
+AND a passive grab on the same device and key combination does not exist on any
+ancestor of the grab window,
+
+
+
+
+THEN the device is actively grabbed, as for
+XGrabDevice ,
+the last-device-grab time is set to the time at which the key was pressed
+(as transmitted in the
+DeviceKeyPress
+event), and the
+DeviceKeyPress
+event is reported.
+
+
+
+
+
+The interpretation of the remaining arguments is as for
+XGrabDevice .
+The active grab is terminated automatically when the logical state of the
+device has the specified key released
+(independent of the logical state of the modifier keys).
+
+
+
+Note that the logical state of a device (as seen by means of the X protocol)
+may lag the physical state if device event processing is frozen.
+
+
+
+A modifier of
+AnyModifier
+is equivalent to issuing the request for all
+possible modifier combinations (including the combination of no modifiers).
+It is not required that all modifiers specified have
+currently assigned keycodes.
+A key of
+AnyKey
+is equivalent to issuing
+the request for all possible keycodes. Otherwise, the key must be in
+the range specified by min_keycode and max_keycode in the
+information returned by the
+
+function.
+If it is not within that range,
+
+generates a
+BadValue
+error.
+
+
+
+
+generates a
+BadAccess
+error if some other client has issued a
+
+with the same device and key combination on the same window.
+When using
+AnyModifier
+or
+AnyKey ,
+the request fails completely and the X server generates a
+BadAccess
+error, and no grabs are established if there is a conflicting grab
+for any combination.
+
+
+
+
+returns
+Success
+upon successful completion of the request.
+
+
+
+
+can generate
+BadAccess ,
+BadClass ,
+BadDevice ,
+BadMatch ,
+BadValue ,
+and
+BadWindow
+errors.
+
+
+
+
+To release a passive grab of a single key on an extension device, use
+XUngrabDeviceKey .
+
+
+
+ int XUngrabDeviceKey
+ Display *display
+ XDevice *device
+ int keycode
+ unsignedint modifiers
+ XDevice *modifier_device
+ Window ungrab_window
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ keycode
+
+
+
+Specifies the keycode of the key that is to be ungrabbed. You can pass
+either the keycode or
+AnyKey .
+
+
+
+
+
+ modifiers
+
+
+
+Specifies the set of keymasks. This mask is the bitwise inclusive OR
+of these keymask bits:
+ShiftMask ,
+LockMask ,
+ControlMask ,
+Mod1Mask ,
+Mod2Mask ,
+Mod3Mask ,
+Mod4Mask ,
+and
+Mod5Mask .
+
+
+
+
+
+
+
+
+
+You can also pass
+AnyModifier ,
+which is equivalent to issuing the ungrab key
+request for all possible modifier combinations (including the combination
+of no modifiers).
+
+
+
+
+
+ modifier_device
+
+
+
+Specifies the device whose modifiers are to be used. If NULL is
+specified, the core X keyboard is used as the modifier_device.
+
+
+
+
+
+ ungrab_window
+
+
+
+Specifies the ID of a window associated with the device specified above.
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XUngrabKey
+function. It releases an explicit passive grab for a key
+on an extension input device.
+
+
+
+
+can generate
+BadAlloc ,
+BadDevice ,
+BadMatch ,
+BadValue ,
+and
+BadWindow
+errors.
+
+
+
+Passively Grabbing a Button
+
+
+
+
+
+To establish a passive grab for a single button on an extension device, use
+XGrabDeviceButton .
+The specified device must have previously been opened using the
+
+function, or the request will fail with a
+BadDevice
+error. If the specified device does not support input class
+Buttons ,
+the request will fail with a
+BadMatch
+error.
+
+
+
+ int XGrabDeviceButton
+ Display *display
+ XDevice *device
+ unsignedint button
+ unsignedint modifiers
+ XDevice*modifier_device
+ Window grab_window
+ Bool owner_events
+ int event_count
+ XEventClass *event_list
+ int this_device_mode
+ int other_device_mode
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ button
+
+
+
+Specifies the code of the button that is to be grabbed. You can pass
+either the button or
+AnyButton .
+
+
+
+
+
+ modifiers
+
+
+
+Specifies the set of keymasks. This mask is the bitwise inclusive OR
+of these keymask bits:
+ShiftMask ,
+LockMask ,
+ControlMask ,
+Mod1Mask ,
+Mod2Mask ,
+Mod3Mask ,
+Mod4Mask ,
+and
+Mod5Mask .
+
+
+
+
+
+
+
+
+
+You can also pass
+AnyModifier ,
+which is equivalent to issuing the grab request
+for all possible modifier combinations (including the combination
+of no modifiers).
+
+
+
+
+
+ modifier_device
+
+
+
+Specifies the device whose modifiers are to be used. If NULL is
+specified, the core X keyboard is used as the modifier_device.
+
+
+
+
+
+ grab_window
+
+
+
+Specifies the ID of a window associated with the device specified above.
+
+
+
+
+
+ owner_events
+
+
+
+Specifies a boolean value of either
+True
+or
+False .
+
+
+
+
+
+ event_count
+
+
+
+Specifies the number of elements in the event_list array.
+
+
+
+
+
+ event_list
+
+
+
+Specifies a list of event classes that indicates which device events are to be
+reported to the client.
+
+
+
+
+
+ this_device_mode
+
+
+
+Controls further processing of events from this device. You can pass one
+of these constants:
+GrabModeSync
+or
+GrabModeAsync .
+
+
+
+
+
+ other_device_mode
+
+
+
+Controls further processing of events from all other devices. You can pass one
+of these constants:
+GrabModeSync
+or
+GrabModeAsync .
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XGrabButton
+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.
+
+
+
+The
+
+function establishes a passive grab on a device.
+Consequently, in the future,
+
+
+
+
+IF the device is not grabbed and the specified button is logically pressed
+when the specified modifier keys logically are down
+(and no other buttons or modifier keys are down),
+
+
+
+
+AND 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 pointer,
+
+
+
+
+AND a passive grab on the same device and button/key combination does not
+exist on any ancestor of the grab window,
+
+
+
+
+THEN the device is actively grabbed, as for
+XGrabDevice ,
+the last-grab time is set to the time at which the button was pressed
+(as transmitted in the
+DeviceButtonPress
+event), and the
+DeviceButtonPress
+event is reported.
+
+
+
+
+
+The interpretation of the remaining arguments is as for
+XGrabDevice .
+The active grab is terminated automatically when logical state of the
+device has all buttons released (independent of the logical state of
+the modifier keys).
+
+
+
+Note that the logical state of a device (as seen by means of the X protocol)
+may lag the physical state if device event processing is frozen.
+
+
+
+A modifier of
+AnyModifier
+is equivalent to issuing the request for all
+possible modifier combinations (including the combination of no
+modifiers).
+It is not required that all modifiers specified have
+currently assigned keycodes.
+A button of
+AnyButton
+is equivalent to issuing
+the request for all possible buttons.
+Otherwise, it is not required that the
+specified button be assigned to a physical button.
+
+
+
+
+generates a
+BadAccess
+error if some other client has issued a
+
+with the same device and button combination on the same window.
+When using
+AnyModifier
+or
+AnyButton ,
+the request fails completely and the X server generates a
+BadAccess
+error and no grabs are
+established if there is a conflicting grab for any combination.
+
+
+
+
+can generate
+BadAccess ,
+BadClass ,
+BadDevice ,
+BadMatch ,
+BadValue ,
+and
+BadWindow
+errors.
+
+
+
+
+To release a passive grab of a button on an extension device, use
+XUngrabDeviceButton .
+
+
+
+ int XUngrabDeviceButton
+ Display *display
+ XDevice *device
+ unsignedint button
+ unsignedint modifiers
+ XDevice *modifier_device
+ Window ungrab_window
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ button
+
+
+
+Specifies the code of the button that is to be ungrabbed. You can pass
+either a button or
+AnyButton .
+
+
+
+
+
+ modifiers
+
+
+
+Specifies the set of keymasks. This mask is the bitwise inclusive OR
+of these keymask bits:
+ShiftMask ,
+LockMask ,
+ControlMask ,
+Mod1Mask ,
+Mod2Mask ,
+Mod3Mask ,
+Mod4Mask ,
+and
+Mod5Mask .
+
+
+
+
+
+
+
+
+
+You can also pass
+AnyModifier ,
+which is equivalent to issuing the ungrab key
+request for all possible modifier combinations (including the combination
+of no modifiers).
+
+
+
+
+
+ modifier_device
+
+
+
+Specifies the device whose modifiers are to be used. If NULL is
+specified, the core X keyboard is used as the modifier_device.
+
+
+
+
+
+ ungrab_window
+
+
+
+Specifies the ID of a window associated with the device specified above.
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XUngrabButton
+function. It releases an explicit passive grab for a button
+on an extension device.
+That device must have previously been opened using the
+
+function, or a
+BadDevice
+error will result.
+
+
+
+A modifier of
+AnyModifier
+is equivalent to issuing the request for all
+possible modifier combinations (including the combination of no
+modifiers).
+
+
+
+
+can generate
+BadAlloc ,
+BadDevice ,
+BadMatch ,
+BadValue ,
+and
+BadWindow
+errors.
+
+
+
+Thawing a Device
+
+
+
+
+
+To allow further events to be processed when a device has been frozen, use
+XAllowDeviceEvents .
+
+
+
+ int XAllowDeviceEvents
+ Display *display
+ XDevice *device
+ int event_mode
+ Time time
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ event_mode
+
+
+
+Specifies the event mode. You can pass one of these constants:
+AsyncThisDevice ,
+SyncThisDevice ,
+AsyncOtherDevices ,
+ReplayThisDevice ,
+AsyncAll ,
+or
+SyncAll .
+
+
+
+
+
+ time
+
+
+
+Specifies the time. This may be either a timestamp expressed in
+milliseconds, or
+CurrentTime .
+
+
+
+
+
+
+
+
+
+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,
+or if the specified time is later than the current X server time.
+The following describes the processing that occurs depending on what constant
+you pass to the event_mode argument:
+
+
+
+
+AsyncThisDevice
+
+
+
+
+If the specified device is frozen by the client, event processing for that
+continues as usual. If the device is frozen multiple times by the client on
+behalf of multiple separate grabs,
+AsyncThisDevice
+thaws for all.
+AsyncThisDevice
+has no effect if the specified device is not frozen by the
+client, but the device need not be grabbed by the client.
+
+
+
+
+SyncThisDevice
+
+
+
+
+If the specified device is frozen and actively grabbed by the client,
+event processing for that device continues normally until the next
+key or button event is reported to the client.
+At this time,
+the specified device again appears to freeze.
+However, if the reported event causes the grab to be released,
+the specified device does not freeze.
+SyncThisDevice
+has no effect if the specified device is not frozen by the client
+or is not grabbed by the client.
+
+
+
+
+ReplayThisDevice
+
+
+
+
+If the specified device is actively grabbed by the client
+and is frozen as the result of an event having been sent to the client
+(either from the activation of a
+GrabDeviceButton
+or from a previous
+AllowDeviceEvents
+with mode
+SyncThisDevice ,
+but not from a
+Grab ),
+the grab is released and that event is completely reprocessed.
+This time, however, the request ignores any passive grabs at or above
+(toward the root) the grab-window of the grab just released.
+The request has no effect if the specified device is not grabbed by the client
+or if it is not frozen as the result of an event.
+
+
+
+
+AsyncOtherDevices
+
+
+
+
+If the remaining devices are frozen by the client,
+event processing for them continues as usual.
+If the other devices are frozen multiple times by the client on behalf of
+multiple separate grabs,
+AsyncOtherDevices
+``thaws'' for all.
+AsyncOtherDevices
+has no effect if the devices are not frozen by the client,
+but those devices need not be grabbed by the client.
+
+
+
+
+SyncAll
+
+
+
+
+If all devices are frozen by the client,
+event processing (for all devices) continues normally until the next
+button or key event is reported
+to the client for a grabbed device,
+at which time the devices again appear to
+freeze. However, if the reported event causes the grab to be released,
+then the devices do not freeze (but if any device is still
+grabbed, then a subsequent event for it will still cause all devices
+to freeze).
+SyncAll
+has no effect unless all devices are frozen by the client.
+If any device is frozen twice
+by the client on behalf of two separate grabs,
+SyncAll
+"thaws" for both (but a subsequent freeze for
+SyncAll
+will freeze each device only once).
+
+
+
+
+AsyncAll
+
+
+
+
+If all devices are frozen by the
+client, event processing (for all devices) continues normally.
+If any device is frozen multiple times by the client on behalf of multiple
+separate grabs,
+AsyncAll
+``thaws ''for all.
+If any device is frozen twice by the client on behalf of two separate grabs,
+AsyncAll
+``thaws'' for both.
+AsyncAll
+has no effect unless all devices are frozen by the client.
+
+
+
+
+
+AsyncThisDevice ,
+SyncThisDevice ,
+and
+ReplayThisDevice
+have no effect on the processing of events from the remaining devices.
+AsyncOtherDevices
+has no effect on the processing of events from the specified device.
+When the event_mode is
+SyncAll
+or
+AsyncAll ,
+the device parameter is ignored.
+
+
+
+It is possible for several grabs of different devices (by the same
+or different clients) to be active simultaneously.
+If a device is frozen on behalf of any grab,
+no event processing is performed for the device.
+It is possible for a single device to be frozen because of several grabs.
+In this case,
+the freeze must be released on behalf of each grab before events can
+again be processed.
+
+
+
+
+can generate
+BadDevice
+and
+BadValue
+errors.
+
+
+
+Controlling Device Focus
+
+
+
+
+
+The current focus window for an extension input device can be
+determined using the
+
+function.
+Extension devices are focused using the
+
+function in the same way that the keyboard is focused using the core
+XSetInputFocus
+function, except that a device ID is passed as
+a function parameter. One additional focus state,
+FollowKeyboard ,
+is provided for extension devices.
+
+
+
+To get the current focus state, revert state,
+and focus time of an extension device, use
+XGetDeviceFocus .
+
+
+
+ int XGetDeviceFocus
+ Display *display
+ XDevice *device
+ Window *focus_return
+ int *revert_to_return
+ Time *focus_time_return
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ focus_return
+
+
+
+Specifies the address of a variable into which the server can return the ID of
+the window that contains the device focus or one of the constants
+None ,
+PointerRoot ,
+or
+FollowKeyboard .
+
+
+
+
+
+ revert_to_return
+
+
+
+Specifies the address of a variable into which the server can
+return the current revert_to status for the device.
+
+
+
+
+
+ focus_time_return
+
+
+
+Specifies the address of a variable into which the server can
+return the focus time last set for the device.
+
+
+
+
+
+
+
+
+
+returns the focus state, the revert-to state,
+and the last-focus-time for an extension input device.
+
+
+
+
+can generate
+BadDevice
+and
+BadMatch
+errors.
+
+
+
+
+To set the focus of an extension device, use
+XSetDeviceFocus .
+
+
+
+ int XSetDeviceFocus
+ Display *display
+ XDevice *device
+ Window focus
+ int revert_to
+ Time time
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ focus
+
+
+
+Specifies the ID of the window to which the device's focus should be set.
+This may be a window ID, or
+PointerRoot ,
+FollowKeyboard ,
+or
+None .
+
+
+
+
+
+ revert_to
+
+
+
+Specifies to which window the focus of the device should revert
+if the focus window becomes not viewable. One of the following
+constants may be passed:
+RevertToParent ,
+RevertToPointerRoot ,
+RevertToNone ,
+or
+RevertToFollowKeyboard .
+
+
+
+
+
+ time
+
+
+
+Specifies the time. You can pass either a timestamp, expressed in
+milliseconds, or
+CurrentTime .
+
+
+
+
+
+
+
+
+
+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
+current X server time. Otherwise, the last-focus-change-time is set to the
+specified time.
+This function causes the X server to generate
+DeviceFocusIn
+and
+DeviceFocusOut
+events.
+
+
+
+The action taken by the server when this function is requested depends
+on the value of the focus argument:
+
+
+
+
+If the focus argument is
+None ,
+all input events from this device will be discarded until a new focus window
+is set. In this case, the revert_to argument is ignored.
+
+
+
+
+If the focus argument is a window ID, it becomes the focus
+window of the device. If an input event from the device would normally
+be reported to this window or to one of its inferiors, the event is
+reported normally. Otherwise, the event is reported relative to the focus
+window.
+
+
+
+
+If the focus argument is
+PointerRoot ,
+the focus window is dynamically taken to be the root window
+of whatever screen the pointer is on at each input event.
+In this case, the revert_to argument is ignored.
+
+
+
+
+If the focus argument is
+FollowKeyboard ,
+the focus window is dynamically taken to be the same as the focus
+of the X keyboard at each input event.
+
+
+
+
+
+The specified focus window must be viewable at the time
+
+is called. Otherwise, it generates a
+BadMatch
+error.
+If the focus window later becomes not viewable,
+the X server evaluates the revert_to argument
+to determine the new focus window.
+
+
+
+
+If the revert_to argument is
+RevertToParent ,
+the focus reverts to the parent (or the closest viewable ancestor),
+and the new revert_to value is taken to be
+RevertToNone .
+
+
+
+
+If the revert_to argument is
+RevertToPointerRoot ,
+RevertToFollowKeyboard ,
+or
+RevertToNone ,
+the focus reverts to that value.
+
+
+
+
+
+When the focus reverts,
+the X server generates
+DeviceFocusIn
+and
+DeviceFocusOut
+events, but the last-focus-change time is not affected.
+
+
+
+
+can generate
+BadDevice ,
+BadMatch ,
+BadValue ,
+and
+BadWindow
+errors.
+
+
+
+Controlling Device Feedback
+
+
+
+
+
+To determine the current feedback settings of an extension input device, use
+XGetFeedbackControl .
+
+
+
+ XFeedbackState * XGetFeedbackControl
+ Display *display
+ XDevice *device
+ int *num_feedbacks_return
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ num_feedbacks_return
+
+
+
+Returns the number of feedbacks supported by the device.
+
+
+
+
+
+
+
+
+
+returns a list of
+FeedbackState
+structures that describe the feedbacks supported by the specified device.
+There is an
+XFeedbackState
+structure for each class of feedback. These are of
+variable length, but the first three members are common to all.
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+} XFeedbackState;
+
+
+
+
+
+The common members are as follows:
+
+
+
+
+The class member identifies the class of feedback.
+It may be compared to constants defined in the file
+< X11/extensions/XI.h >.
+Currently defined feedback constants include:
+KbdFeedbackClass ,
+PtrFeedbackClass ,
+StringFeedbackClass ,
+IntegerFeedbackClass ,
+LedFeedbackClass ,
+and
+BellFeedbackClass .
+
+
+
+
+The length member specifies the length of the
+FeedbackState
+structure and can be used by clients to traverse the list.
+
+
+
+
+The id member uniquely identifies a feedback for a given device and class.
+This allows a device to support more than one feedback of the same class.
+Other feedbacks of other classes or devices may have the same ID.
+
+
+
+
+
+
+Those feedbacks equivalent to those
+supported by the core keyboard are reported in class
+KbdFeedback
+using the
+XKbdFeedbackState
+structure, which is defined as follows:
+
+
+
+
+
+
+
+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];
+} XKbdFeedbackState;
+
+
+
+
+
+The additional members of the
+XKbdFeedbackState
+structure report the current state of the feedback:
+
+
+
+
+The click member specifies the key-click volume and has a value in the range
+0 (off) to 100 (loud).
+
+
+
+
+The percent member specifies the bell volume and has a value in the range
+0 (off) to 100 (loud).
+
+
+
+
+The pitch member specifies the bell pitch in Hz. The range of the value is
+implementation-dependent.
+
+
+
+
+The duration member specifies the duration in milliseconds of the bell.
+
+
+
+
+The led_mask member is a bit mask that describes the current state of up to
+32 LEDs. A value of 1 in a bit indicates that the corresponding LED is on.
+
+
+
+
+The global_auto_repeat member has a value of
+AutoRepeatModeOn
+or
+AutoRepeatModeOff .
+
+
+
+
+The auto_repeats member is a bit vector. Each bit set to 1 indicates
+that auto-repeat is enabled for the corresponding key. The vector is
+represented as 32 bytes. Byte N (from 0) contains the bits for keys
+8N to 8N + 7, with the least significant bit in the byte representing
+key 8N.
+
+
+
+
+
+
+Those feedbacks equivalent to those
+supported by the core pointer are reported in class
+PtrFeedback
+using the
+XPtrFeedbackState
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int accelNum;
+ int accelDenom;
+ int threshold;
+} XPtrFeedbackState;
+
+
+
+
+
+The additional members of the
+XPtrFeedbackState
+structure report the current state of the feedback:
+
+
+
+
+The accelNum member returns the numerator for the acceleration multiplier.
+
+
+
+
+The accelDenom member returns the denominator for the acceleration multiplier.
+
+
+
+
+The accelDenom member returns the threshold for the acceleration.
+
+
+
+
+
+
+Integer feedbacks are those capable of displaying integer numbers
+and reported via the
+XIntegerFeedbackState
+structure.
+The minimum and maximum values that they can display are reported.
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int resolution;
+ int minVal;
+ int maxVal;
+} XIntegerFeedbackState;
+
+
+
+
+
+The additional members of the
+XIntegerFeedbackState
+structure report the capabilities of the feedback:
+
+
+
+
+The resolution member specifies the number of digits that the feedback
+can display.
+
+
+
+
+The minVal member specifies the minimum value that the feedback can display.
+
+
+
+
+The maxVal specifies the maximum value that the feedback can display.
+
+
+
+
+
+
+String feedbacks are those that can display character information
+and are reported via the
+XStringFeedbackState
+structure.
+Clients set these feedbacks by passing a list of
+KeySyms
+to be displayed.
+The
+
+function returns the
+set of key symbols that the feedback can display, as well as the
+maximum number of symbols that can be displayed.
+The
+XStringFeedbackState
+structure is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int max_symbols;
+ int num_syms_supported;
+ KeySym *syms_supported;
+} XStringFeedbackState;
+
+
+
+
+
+The additional members of the
+XStringFeedbackState
+structure report the capabilities of the feedback:
+
+
+
+
+The max_symbols member specifies the maximum number of symbols
+that can be displayed.
+
+
+
+
+The syms_supported member is a pointer to the list of supported symbols.
+
+
+
+
+The num_syms_supported member specifies the length of the list of supported symbols.
+
+
+
+
+
+
+Bell feedbacks are those that can generate a sound
+and are reported via the
+XBellFeedbackState
+structure.
+Some implementations may support a bell as part of a
+KbdFeedback
+feedback. Class
+BellFeedback
+is provided for implementations that do not choose to do
+so and for devices that support multiple feedbacks that can produce sound.
+The meaning of the members is the same as that of the corresponding fields in
+the
+XKbdFeedbackState
+structure.
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int percent;
+ int pitch;
+ int duration;
+} XBellFeedbackState;
+
+
+
+
+
+Led feedbacks are those that can generate a light and are reported via the
+XLedFeedbackState
+structure.
+Up to 32 lights per feedback are supported.
+Each bit in led_mask
+corresponds to one supported light, and the corresponding bit in led_values
+indicates whether that light is currently on (1) or off (0).
+Some implementations may support leds as part of a
+KbdFeedback
+feedback.
+Class
+LedFeedback
+is provided for implementations that do not choose to do
+so and for devices that support multiple led feedbacks.
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ Mask led_values;
+ Mask led_mask;
+} XLedFeedbackState;
+
+
+
+
+
+
+can generate
+BadDevice
+and
+BadMatch
+errors.
+
+
+
+
+To free the information returned by the
+
+function, use
+XFreeFeedbackList .
+
+
+
+ void XFreeFeedbackList
+ XFeedbackState *list
+
+
+
+
+
+
+ list
+
+
+
+Specifies the pointer to the
+XFeedbackState
+structure returned by
+a previous call to
+XGetFeedbackControl .
+
+
+
+
+
+
+
+
+
+frees the list of feedback control information.
+
+
+
+
+To change the settings of a feedback on an extension device, use
+XChangeFeedbackControl .
+This function modifies the current control values of the specified feedback
+using information passed in the appropriate
+XFeedbackControl
+structure for the feedback.
+Which values are modified depends on the valuemask passed.
+
+
+
+ int XChangeFeedbackControl
+ Display *display
+ XDevice *device
+ unsignedlong valuemask
+ XFeedbackControl *value
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ valuemask
+
+
+
+Specifies one value for each bit in the mask (least to most significant
+bit). The values are associated with the feedbacks for the specified
+device.
+
+
+
+
+
+ value
+
+
+
+Specifies a pointer to the
+XFeedbackControl
+structure.
+
+
+
+
+
+
+
+
+
+controls the device characteristics described by the
+XFeedbackControl
+structure.
+There is an
+XFeedbackControl
+structure for each class of feedback.
+These are of variable length, but the first
+three members are common to all and are as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+} XFeedbackControl;
+
+
+
+
+
+Feedback class
+KbdFeedback
+controls feedbacks equivalent to those provided by the core keyboard using the
+KbdFeedbackControl
+structure, which is defined as follows:.
+
+
+
+
+
+
+
+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;
+} XKbdFeedbackControl;
+
+
+
+
+
+This class controls the device characteristics described by the
+XKbdFeedbackControl
+structure. These include the key_click_percent,
+global_auto_repeat, and individual key auto-repeat. Valid modes
+are
+AutoRepeatModeOn ,
+AutoRepeatModeOff ,
+and
+AutoRepeatModeDefault .
+
+
+
+Valid masks are as follows:
+
+
+
+
+
+#define DvKeyClickPercent (1><<0)
+#define DvPercent (1><<0)
+#define DvPitch (1><<0)
+#define DvDuration (1><<0)
+#define DvLed (1><<0)
+#define DvLedMode (1><<0)
+#define DvKey (1><<0)
+#define DvAutoRepeatMode (1><<0)
+
+
+
+
+Feedback class
+PtrFeedback
+controls feedbacks equivalent to those provided by the core pointer using the
+PtrFeedbackControl
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int accelNum;
+ int accelDenom;
+ int threshold;
+} XPtrFeedbackControl;
+
+
+
+
+
+Which values are modified depends on the valuemask passed.
+
+
+
+Valid masks are as follows:
+
+
+
+
+#define DvAccelnum (1L<<0)
+#define DvAccelDenom (1L<<1)
+#define DvThreshold (1L<<2)
+
+
+
+
+
+
+The acceleration, expressed as a fraction, is a multiplier for movement.
+For example,
+specifying 3/1 means that the device moves three times as fast as normal.
+The fraction may be rounded arbitrarily by the X server.
+Acceleration takes effect only if the device moves more than threshold pixels at
+once and applies only to the amount beyond the value in the threshold argument.
+Setting a value to -1 restores the default.
+The values of the accelNumerator and threshold fields must be nonzero for
+the pointer values to be set.
+Otherwise, the parameters will be unchanged.
+Negative values generate a
+BadValue
+error, as does a zero value
+for the accelDenominator field.
+
+
+
+This request fails with a
+BadMatch
+error if the specified device is not currently reporting relative motion.
+If a device that is capable of reporting both relative and absolute motion
+has its mode changed from
+Relative
+to
+Absolute
+by an
+
+request, valuator control values
+will be ignored by the server while the device is in that mode.
+
+
+
+Feedback class
+IntegerFeedback
+controls integer feedbacks displayed on input devices and are
+reported via the
+IntegerFeedbackControl
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int int_to_display;
+} XIntegerFeedbackControl;
+
+
+
+
+
+Valid masks are as follows:
+
+
+
+
+
+#define DvInteger (1L<<0)
+
+
+
+
+
+Feedback class
+StringFeedback
+controls string feedbacks displayed on input devices
+and reported via the
+StringFeedbackControl
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int num_keysyms;
+ KeySym *syms_to_display;
+} XStringFeedbackControl;
+
+
+
+
+
+Valid masks are as follows:
+
+
+
+
+#define DvString (1L<<0)
+
+
+
+
+
+Feedback class
+BellFeedback
+controls a bell on an input device and is reported via the
+BellFeedbackControl
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int percent;
+ int pitch;
+ int duration;
+} XBellFeedbackControl;
+
+
+
+
+
+Valid masks are as follows:
+
+
+
+
+
+
+#define DvPercent (1L<<1)
+#define DvPitch (1L<<2)
+#define DvDuration (1L<<3)
+
+
+
+
+
+Feedback class
+LedFeedback
+controls lights on an input device and are reported via the
+LedFeedbackControl
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int led_mask;
+ int led_values;
+} XLedFeedbackControl;
+
+
+
+
+
+Valid masks are as follows:
+
+
+
+
+
+#define DvLed (1L<<4)
+#define DvLedMode (1L<<5)
+
+
+
+
+
+
+can generate
+BadDevice ,
+BadFeedBack ,
+BadMatch ,
+and
+BadValue
+errors.
+
+
+
+Ringing a Bell on an Input Device
+
+
+
+
+
+To ring a bell on an extension input device, use
+XDeviceBell .
+
+
+
+ int XDeviceBell
+ Display *display
+ XDevice *device
+ XIDfeedbackclass, feedbackid
+ int percent
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ feedbackclass
+
+
+
+Specifies the feedbackclass. Valid values are
+KbdFeedbackClass
+and
+BellFeedbackClass .
+
+
+
+
+
+ feedbackid
+
+
+
+Specifies the ID of the feedback that has the bell.
+
+
+
+
+
+ percent
+
+
+
+Specifies the volume in the range -100 (quiet) to 100 percent (loud).
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XBell
+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.
+If the value for the percent argument is not in the range -100 to 100
+inclusive, a
+BadValue
+error results.
+The volume at which the bell rings when the percent argument is nonnegative is:
+
+
+
+
+ base - [(base * percent) / 100] + percent
+
+
+
+
+The volume at which the bell rings
+when the percent argument is negative is:
+
+
+
+
+ base + [(base * percent) / 100]
+
+
+
+
+To change the base volume of the bell, use
+XChangeFeedbackControl .
+
+
+
+
+can generate
+BadDevice
+and
+BadValue
+errors.
+
+
+
+Controlling Device Encoding
+
+
+
+
+
+To get the key mapping of an extension device that supports input class
+Keys ,
+use
+XGetDeviceKeyMapping .
+
+
+
+ KeySym * XGetDeviceKeyMapping
+ Display *display
+ XDevice *device
+ KeyCode first_keycode_wanted
+ int keycode_count
+ int *keysyms_per_keycode_return
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ first_keycode_wanted
+
+
+
+Specifies the first keycode that is to be returned.
+
+
+
+
+
+ keycode_count
+
+
+
+Specifies the number of keycodes that are to be returned.
+
+
+
+
+
+ keysyms_per_keycode_return
+
+
+
+Returns the number of keysyms per keycode.
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XGetKeyboardMapping
+function.
+It returns the symbols for the specified number of keycodes for the
+specified extension device.
+
+
+
+
+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
+
+request (else a
+BadValue
+error results). The following value:
+
+first_keycode_wanted + keycode_count - 1
+
+
+
+
+must be less than or equal to max-keycode as returned
+by the
+
+request (else a
+BadValue
+error results).
+
+
+
+The number of elements in the keysyms list is as follows:
+
+keycode_count * keysyms_per_keycode_return
+
+And KEYSYM number N (counting from zero) for keycode K has an index
+(counting from zero), in keysyms, of the following:
+
+(K - first_keycode_wanted) * keysyms_per_keycode_return + N
+
+
+
+
+The keysyms_per_keycode_return value is chosen arbitrarily by the server
+to be large enough to report all requested symbols.
+A special KEYSYM value of
+NoSymbol
+is used to fill in unused elements for individual keycodes.
+
+
+
+To free the data returned by this function, use
+XFree.
+
+
+
+If the specified device has not first been opened by this client via
+XOpenDevice ,
+this request will fail with a
+BadDevice
+error.
+If that device does not support input class
+Keys ,
+this request will fail with a
+BadMatch
+error.
+
+
+
+
+can generate
+BadDevice ,
+BadMatch ,
+and
+BadValue
+errors.
+
+
+
+
+To change the keyboard mapping of an extension device that supports input class
+Keys ,
+use
+XChangeDeviceKeyMapping .
+
+
+
+ int XChangeDeviceKeyMapping
+ Display *display
+ XDevice *device
+ int first_keycode
+ int keysyms_per_keycode
+ KeySym *keysyms
+ int num_codes
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ first_keycode
+
+
+
+Specifies the first keycode that is to be changed.
+
+
+
+
+
+ keysyms_per_keycode
+
+
+
+Specifies the keysyms that are to be used.
+
+
+
+
+
+ keysyms
+
+
+
+Specifies a pointer to an array of keysyms.
+
+
+
+
+
+ num_codes
+
+
+
+Specifies the number of keycodes that are to be changed.
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XChangeKeyboardMapping
+function.
+It defines the symbols for the specified number of keycodes for the
+specified extension keyboard device.
+
+
+
+If the specified device has not first been opened by this client via
+XOpenDevice ,
+this request will fail with a
+BadDevice
+error.
+If the specified device does not support input class
+Keys ,
+this request will fail with a
+BadMatch
+error.
+
+
+
+The number of elements in the keysyms list must be a multiple of
+keysyms_per_keycode. Otherwise,
+
+generates a
+BadLength
+error.
+The specified first_keycode must be greater than or equal to
+the min_keycode value returned by the
+ListInputDevices
+request, or this request will fail with a
+BadValue
+error. In addition, if the following expression is not less than
+the max_keycode value returned by the
+ListInputDevices
+request, the request will fail with a
+BadValue
+error:
+
+ first_keycode + (num_codes / keysyms_per_keycode) - 1
+
+
+
+
+
+can generate
+BadAlloc ,
+BadDevice ,
+BadMatch ,
+and
+BadValue
+errors.
+
+
+
+
+To obtain the keycodes that are used as modifiers on an
+extension device that supports input class
+Keys ,
+use
+XGetDeviceModifierMapping .
+
+
+
+ XModifierKeymap * XGetDeviceModifierMapping
+ Display *display
+ XDevice *device
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XGetModifierMapping
+function.
+The
+
+function returns a newly created
+XModifierKeymap
+structure that contains the keys being used as
+modifiers for the specified device.
+The structure should be freed after use with
+XFreeModifierMapping .
+If only zero values appear in the set for any modifier,
+that modifier is disabled.
+
+
+
+
+can generate
+BadDevice
+and
+BadMatch
+errors.
+
+
+
+
+To set which keycodes are to be used as modifiers for an extension device, use
+XSetDeviceModifierMapping .
+
+
+
+ int XSetDeviceModifierMapping
+ Display *display
+ XDevice *device
+ XModifierKeymap *modmap
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ modmap
+
+
+
+Specifies a pointer to the
+XModifierKeymap
+structure.
+
+
+
+
+
+
+
+
+
+is analogous to the core
+XSetModifierMapping
+function.
+The
+
+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,
+
+generates a
+BadValue
+error.
+There are eight modifiers, and the modifiermap member of the
+XModifierKeymap
+structure contains eight sets of max_keypermod
+keycodes, one for each modifier in the order
+Shift ,
+Lock ,
+Control ,
+Mod1 ,
+Mod2 ,
+Mod3 ,
+Mod4 ,
+and
+Mod5 .
+Only nonzero keycodes have meaning in each set, and zero keycodes
+are ignored.
+In addition, all of the nonzero keycodes must be in the range specified by
+min_keycode and max_keycode reported by the
+
+function.
+Otherwise,
+XSetModifierMapping
+generates a
+BadValue
+error.
+No keycode may appear twice in the entire map.
+Otherwise, it generates a
+BadValue
+error.
+
+
+
+A X server can impose restrictions on how modifiers can be changed,
+for example,
+if certain keys do not generate up transitions in hardware or if multiple
+modifier keys are not supported.
+If some such restriction is violated,
+the status reply is
+MappingFailed ,
+and none of the modifiers are changed.
+If the new keycodes specified for a modifier differ from those
+currently defined and any (current or new) keys for that modifier are
+in the logically down state,
+the status reply is
+MappingBusy ,
+and none of the modifiers are changed.
+XSetModifierMapping
+generates a
+DeviceMappingNotify
+event on a
+MappingSuccess
+status.
+
+
+
+
+can generate
+BadAlloc ,
+BadDevice ,
+BadMatch ,
+and
+BadValue
+errors.
+
+
+
+Controlling Button Mapping
+
+
+
+
+
+To set the mapping of the buttons on an extension device, use
+XSetDeviceButtonMapping .
+
+
+
+ int XSetDeviceButtonMapping
+ Display *display
+ XDevice *device
+ unsignedchar map[]
+ int nmap
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ map
+
+
+
+Specifies the mapping list.
+
+
+
+
+
+ nmap
+
+
+
+Specifies the number of items in the mapping list.
+
+
+
+
+
+
+
+
+
+sets the mapping of the buttons on an extension device.
+If it succeeds, the X server generates a
+DeviceMappingNotify
+event, and
+
+returns
+MappingSuccess .
+Elements of the list are indexed starting from one.
+The length of the list must be the same as
+
+would return, or a
+BadValue
+error results.
+The index is a button number, and the element of the list
+defines the effective number.
+A zero element disables a button, and elements are not restricted in
+value by the number of physical buttons.
+However, no two elements can have the same nonzero value, or a
+BadValue
+error results.
+If any of the buttons to be altered are logically in the down state,
+
+returns
+MappingBusy ,
+and the mapping is not changed.
+
+
+
+
+can generate
+BadDevice ,
+BadMatch ,
+and
+BadValue
+errors.
+
+
+
+
+To get the button mapping, use
+XGetDeviceButtonMapping .
+
+
+
+ int XGetDeviceButtonMapping
+ Display *display
+ XDevice *device
+ unsignedchar map_return[]
+ int nmap
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ map_return
+
+
+
+Specifies the mapping list.
+
+
+
+
+
+ nmap
+
+
+
+Specifies the number of items in the mapping list.
+
+
+
+
+
+
+
+
+
+returns the current mapping of the specified extension device.
+Elements of the list are indexed starting from one.
+
+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
+mapping is returned, and only the first nmap elements are returned
+in map_return.
+
+
+
+
+can generate
+BadDevice
+and
+BadMatch
+errors.
+
+
+
+Obtaining the State of a Device
+
+
+
+
+
+To obtain information that describes the state of the keys, buttons, and
+valuators of an extension device, use
+XQueryDeviceState .
+
+
+
+ XDeviceState * XQueryDeviceState
+ Display *display
+ XDevice *device
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+
+
+
+
+returns a pointer to an
+XDeviceState
+structure, which points to a list of
+structures that describe the state of the keys, buttons, and valuators
+on the device:
+
+
+
+
+
+
+
+typedef struct {
+ XID device_id;
+ int num_classes;
+ XInputClass *data;
+} XDeviceState;
+
+
+
+
+
+The structures are of variable length, but the first
+two members are common to all and are as follows:
+
+
+
+
+
+
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+} XInputClass;
+
+
+
+
+
+The class member contains a class identifier. This identifier can be
+compared with constants defined in the file
+< X11/extensions/XI.h >.
+Currently defined constants are:
+KeyClass ,
+ButtonClass ,
+and
+ValuatorClass .
+
+
+
+The length member contains the length of the structure and can be used
+by clients to traverse the list.
+
+
+
+The
+XValuatorState
+structure describes the current state of the valuators
+on the device.
+The num_valuators member contains the number of valuators
+on the device.
+The mode member is a mask whose bits report the data mode
+and other state information for the device.
+The following bits are currently defined:
+
+
+
+ DeviceMode 1 << 0 Relative = 0, Absolute = 1
+ ProximityState 1 << 1 InProximity = 0, OutOfProximity = 1
+
+The valuators member contains a pointer to an array of integers that
+describe the current value of the valuators.
+If the mode is
+Relative ,
+these values are undefined.
+
+
+
+
+
+
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ unsigned char num_valuators;
+ unsigned char mode;
+ int *valuators;
+} XValuatorState;
+
+
+
+
+
+The
+XKeyState
+structure describes the current state of the keys
+on the device. Byte N (from 0) contains the
+bits for key 8N to 8N + 7 with the least significant bit in the
+byte representing key 8N.
+
+
+
+
+
+
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_keys;
+ char keys[32];
+} XKeyState;
+
+
+
+
+
+The
+XButtonState
+structure describes the current state of the buttons
+on the device. Byte N (from 0) contains the bits for button 8N to 8N + 7
+with the least significant bit in the
+byte representing button 8N.
+
+
+
+
+
+
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_buttons;
+ char buttons[32];
+} XButtonState;
+
+
+
+
+
+
+can generate
+BadDevice
+errors.
+
+
+
+
+To free the data returned by this function, use
+XFreeDeviceState .
+
+
+
+ void XFreeDeviceState
+ XDeviceState *state
+
+
+
+
+
+
+ state
+
+
+
+Specifies the pointer to the
+XDeviceState
+data returned by a previous call to
+XQueryDeviceState .
+
+
+
+
+
+
+
+
+
+frees the device state data.
+
+
+
+
+Events
+
+
+
+
+
+The input extension creates input events analogous to the core input events.
+These extension input events are generated by manipulating one of the
+extension input devices.
+The remainder of this section discusses the following X Input Extension
+event topics:
+
+
+
+
+Event types
+
+
+
+
+Event classes
+
+
+
+
+Event structures
+
+
+
+
+Event Types
+
+
+
+
+
+Event types are integer numbers that a client can use to determine what
+kind of event it has received. The client compares the type field of
+the event structure with known event types to make this determination.
+
+
+
+The core input event types are constants and are defined in the header file
+< X11/X.h >.
+Extension event types are not constants. Instead, they
+are dynamically allocated by the extension's request to the X server
+when the extension is initialized. Because of this, extension event
+types must be obtained by the client from the server.
+
+
+
+The client program determines the event type for an extension event by using
+the information returned by the
+
+request.
+This type can then be used for comparison with the type field
+of events received by the client.
+
+
+
+Extension events propagate up the window hierarchy in the same manner
+as core events. If a window is not interested in an extension event,
+it usually propagates to the closest ancestor that is interested,
+unless the dont_propagate list prohibits it.
+Grabs of extension devices may alter the set of windows that receive a particular
+extension event.
+
+
+
+The following table lists the event category and its associated event
+type or types.
+
+
+
+
+
+
+
+
+ Event Category
+ Event Type
+
+
+
+
+ Device key
+ DeviceKeyPress
+
+
+
+ DeviceKeyRelease
+
+
+ Device motion
+ DeviceButtonPress
+
+
+
+ DeviceButtonRelease
+
+
+
+ DeviceMotionNotify
+
+
+ Device input focus
+ DeviceFocusIn
+
+
+
+ DeviceFocusOut
+
+
+ Device state notification
+ DeviceStateNotify
+
+
+ Device proximity
+ ProximityIn
+
+
+
+ ProximityOut
+
+
+ Device mapping
+ DeviceMappingNotify
+
+
+ Device change
+ ChangeDeviceNotify
+
+
+
+
+
+
+
+Event Classes
+
+
+
+
+
+Event classes are integer numbers that are used in the same way as the
+core event masks. They are used by a client program to indicate to the
+server which events that client program wishes to receive.
+
+
+
+The core input event masks are constants and are defined in the header file
+< X11/X.h >.
+Extension event classes are not constants. Instead, they are dynamically
+allocated by the extension's request to the X server
+when the extension is initialized. Because of this, extension event
+classes must be obtained by the client from the server.
+
+
+
+The event class for an extension event and device is obtained from
+information returned by the
+
+function.
+This class can then be used in an
+
+request to ask that events of that type from that device be sent to
+the client program.
+
+
+
+For
+DeviceButtonPress
+events, the client may specify whether
+or not an implicit passive grab should be done when the button is
+pressed. If the client wants to guarantee that it will receive a
+DeviceButtonRelease
+event for each
+DeviceButtonPress
+event it receives, it should specify the
+DeviceButtonPressGrab
+class in addition to the
+DeviceButtonPress
+class.
+This restricts the client in that only one client at a time
+may request
+DeviceButtonPress
+events from the same device and
+window if any client specifies this class.
+
+
+
+If any client has specified the
+DeviceButtonPressGrab
+class, any requests by any other client that specify the same device
+and window and specify either
+DeviceButtonPress
+or
+DeviceButtonPressGrab
+will cause an
+Access
+error to be generated.
+
+
+
+If only the
+DeviceButtonPress
+class is specified, no implicit passive grab will be done when a button
+is pressed on the device.
+Multiple clients may use this class to specify the same device and
+window combination.
+
+
+
+The client may also select
+DeviceMotion
+events only when a button is down.
+It does this by specifying the event classes
+DeviceButton1Motion
+through
+DeviceButton5Motion .
+An input device will support only
+as many button motion classes as it has buttons.
+
+
+
+Event Structures
+
+
+
+
+
+Each extension event type has a corresponding structure declared in
+< X11/extensions/XInput.h >.
+All event structures have the following common members:
+
+
+
+ type
+
+
+
+Set to the event type number that uniquely identifies it. For example,
+when the X server reports a
+DeviceKeyPress
+event to a client application, it sends an
+XDeviceKeyPressEvent
+structure.
+
+
+
+
+
+ serial
+
+
+
+Set from the serial number reported in the protocol but expanded from the
+16-bit least significant bits to a full 32-bit value.
+
+
+
+
+
+ send_event
+
+
+
+Set to
+True
+if the event came from an
+XSendEvent
+request.
+
+
+
+
+
+ display
+
+
+
+Set to a pointer to a structure that defines the display
+on which the event was read.
+
+
+
+
+
+
+
+Extension event structures report the current position of the X pointer.
+In addition, if the device reports motion data and is reporting absolute data,
+the current value of any valuators the device contains is also reported.
+
+
+Device Key Events
+
+
+
+
+
+Key events from extension devices contain all the information that is
+contained in a key event from the X keyboard. In addition, they contain
+a device ID and report the current value of any valuators on the device,
+if that device is reporting absolute data.
+If data for more than six valuators is being reported, more than one
+key event will be sent.
+The axes_count member contains the number of axes that are being
+reported. The server sends as many of these events as are
+needed to report the device data. Each event contains the total number
+of axes reported in the axes_count member and the first axis reported
+in the current event in the first_axis member.
+If the device supports input class
+Valuators ,
+but is not reporting absolute mode data,
+the axes_count member contains zero (0).
+
+
+
+The location reported in
+the x, y and x_root, y_root members is the location of the core X pointer.
+
+
+
+The
+XDeviceKeyEvent
+structure is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed */
+ Bool send_event; /* true if from SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ XID deviceid;
+ Window root; /* root window event occurred on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* x, y coordinates in event window */
+ int x_root; /* coordinates relative to root */
+ int y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ unsigned int keycode; /* detail */
+ Bool same_screen; /* same screen flag */
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+} XDeviceKeyEvent;
+
+typedef XDeviceKeyEvent XDeviceKeyPressedEvent;
+typedef XDeviceKeyEvent XDeviceKeyReleasedEvent;
+
+
+
+
+
+Device Button Events
+
+
+
+
+
+Button events from extension devices contain all the information that is
+contained in a button event from the X pointer. In addition, they contain
+a device ID and report the current value of any valuators on the device
+if that device is reporting absolute data.
+If data for more than six valuators is being reported, more than one
+button event may be sent.
+The axes_count member contains the number of axes that are being
+reported. The server sends as many of these events as are
+needed to report the device data. Each event contains the total number
+of axes reported in the axes_count member and the first axis reported
+in the current event in the first_axis member.
+If the device supports input class
+Valuators ,
+but is not reporting absolute mode data,
+the axes_count member contains zero (0).
+
+
+
+The location reported in
+the x, y and x_root, y_root members is the location of the core X pointer.
+
+
+
+
+
+
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ XID deviceid;
+ Window root; /* root window that the event occurred on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* x, y coordinates in event window */
+ int x_root; /* coordinates relative to root */
+ int y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ unsigned int button; /* detail */
+ Bool same_screen; /* same screen flag */
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+} XDeviceButtonEvent;
+
+typedef XDeviceButtonEvent XDeviceButtonPressedEvent;
+typedef XDeviceButtonEvent XDeviceButtonReleasedEvent;
+
+
+
+
+
+Device Motion Events
+
+
+
+
+
+Motion events from extension devices contain all the information that is
+contained in a motion event from the X pointer. In addition, they contain
+a device ID and report the current value of any valuators on the device.
+
+
+
+The location reported in
+the x, y and x_root, y_root members is the location of the core X pointer,
+and so is 2-dimensional.
+
+
+
+Extension motion devices may report motion data for a variable number of
+axes.
+The axes_count member contains the number of axes that are being
+reported. The server sends as many of these events as are
+needed to report the device data. Each event contains the total number
+of axes reported in the axes_count member and the first axis reported
+in the current event in the first_axis member.
+
+
+
+
+
+
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ XID deviceid;
+ Window root; /* root window that the event occurred on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* x, y coordinates in event window */
+ int x_root; /* coordinates relative to root */
+ int y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ char is_hint; /* detail */
+ Bool same_screen; /* same screen flag */
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+} XDeviceMotionEvent;
+
+
+
+
+
+Device Focus Events
+
+
+
+
+
+These events are equivalent to the core focus events.
+They contain the same information, with the addition
+of a device ID to identify which device has had a focus change,
+and a timestamp.
+
+
+
+DeviceFocusIn
+and
+DeviceFocusOut
+events are generated for
+focus changes of extension devices in the same manner as core focus
+events are generated.
+
+
+
+
+
+
+
+typedef struct {
+ int type; /* of event */
+ 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 */
+ Window window; /* "event" window it is reported relative to */
+ XID deviceid;
+ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */
+ int detail;
+ /*
+ * NotifyAncestor, NotifyVirtual, NotifyInferior,
+ * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer,
+ * NotifyPointerRoot, NotifyDetailNone
+ */
+ Time time;
+} XDeviceFocusChangeEvent;
+
+typedef XDeviceFocusChangeEvent XDeviceFocusInEvent;
+typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent;
+
+
+
+
+
+Device StateNotify Event
+
+
+
+
+
+This event is analogous to the core keymap event but
+reports the current state of the device for each
+input class that it supports.
+It is generated after every
+DeviceFocusIn
+event and
+EnterNotify
+event and is delivered to clients who have selected
+XDeviceStateNotify
+events.
+
+
+
+If the device supports input class
+Valuators ,
+the mode member in the
+XValuatorStatus
+structure is a bitmask that reports the device mode,
+proximity state, and other state information.
+The following bits are currently defined:
+
+
+
+ 0x01 Relative = 0, Absolute = 1
+ 0x02 InProximity = 0, OutOfProximity = 1
+
+
+
+
+If the device supports more valuators than can be reported in a single
+XEvent ,
+multiple
+XDeviceStateNotify
+events will be generated.
+
+
+
+
+
+
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+} XInputClass;
+
+typedef struct {
+ int type;
+ 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 */
+ Window window;
+ XID deviceid;
+ Time time;
+ int num_classes;
+ char data[64];
+} XDeviceStateNotifyEvent;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ unsigned char num_valuators;
+ unsigned char mode;
+ int valuators[6];
+} XValuatorStatus;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_keys;
+ char keys[32];
+} XKeyStatus;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_buttons;
+ char buttons[32];
+} XButtonStatus;
+
+
+
+
+
+Device Mapping Event
+
+
+
+
+
+This event is equivalent to the core
+MappingNotify
+event.
+It notifies client programs when the mapping of keys,
+modifiers, or buttons on an extension device has changed.
+
+
+
+
+
+
+
+typedef struct {
+ int type;
+ unsigned long serial;
+ Bool send_event;
+ Display *display;
+ Window window;
+ XID deviceid;
+ Time time;
+ int request;
+ int first_keycode;
+ int count;
+} XDeviceMappingEvent;
+
+
+
+
+
+ChangeDeviceNotify Event
+
+
+
+
+
+This event has no equivalent in the core protocol. It notifies client
+programs when one of the core devices has been changed.
+
+
+
+
+
+
+
+typedef struct {
+ int type;
+ unsigned long serial;
+ Bool send_event;
+ Display *display;
+ Window window;
+ XID deviceid;
+ Time time;
+ int request;
+} XChangeDeviceNotifyEvent;
+
+
+
+
+
+Proximity Events
+
+
+
+
+
+These events have no equivalent in the core protocol. Some input
+devices such as graphics tablets or touchscreens may send these
+events to indicate that a stylus has moved into or out of contact
+with a positional sensing surface.
+
+
+
+The event contains the current value of any valuators on the device
+if that device is reporting absolute data.
+If data for more than six valuators is being reported, more than one
+proximity event may be sent.
+The axes_count member contains the number of axes that are being
+reported. The server sends as many of these events as are
+needed to report the device data. Each event contains the total number
+of axes reported in the axes_count member and the first axis reported
+in the current event in the first_axis member.
+If the device supports input class
+Valuators ,
+but is not reporting absolute mode data,
+the axes_count member contains zero (0).
+
+
+
+
+
+
+
+typedef struct {
+ int type; /* ProximityIn or ProximityOut */
+ 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 */
+ Window window;
+ XID deviceid;
+ Window root;
+ Window subwindow;
+ Time time;
+ int x, y;
+ int x_root, y_root;
+ unsigned int state;
+ Bool same_screen;
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+} XProximityNotifyEvent;
+
+typedef XProximityNotifyEvent XProximityInEvent;
+typedef XProximityNotifyEvent XProximityOutEvent;
+
+
+
+
+
+
+
+Event Handling Functions
+
+
+
+
+
+This section discusses the X Input Extension
+event handling functions that allow you to:
+
+
+
+
+Determine the extension version
+
+
+
+
+List the available devices
+
+
+
+
+Enable and disable extension devices
+
+
+
+
+Change the mode of a device
+
+
+
+
+Initialize valuators on an input device
+
+
+
+
+Get input device controls
+
+
+
+
+Change input device controls
+
+
+
+
+Select extension device events
+
+
+
+
+Determine selected device events
+
+
+
+
+Control event propogation
+
+
+
+
+Send an event
+
+
+
+
+Get motion history
+
+
+
+
+Determining the Extension Version
+
+
+
+
+
+
+
+
+ XExtensionVersion * XGetExtensionVersion
+ Display *display
+ char *name
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ name
+
+
+
+Specifies the name of the desired extension.
+
+
+
+
+
+
+
+
+
+allows a client to determine whether a server supports
+the desired version of the input extension.
+
+
+
+The
+XExtensionVersion
+structure returns information about the version of the extension
+supported by the server and is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ Bool present;
+ short major_version;
+ short minor_version;
+} XExtensionVersion;
+
+
+
+
+
+The major and minor versions can be compared with constants defined in
+the header file
+< X11/extensions/XI.h >.
+Each version is a superset of the previous versions.
+
+
+
+You should use
+XFree.
+to free the data returned by this function.
+
+
+
+Listing Available Devices
+
+
+
+
+
+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, 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
+< X11/extensions/XI.h >
+header file in an
+XInternAtom
+request to determine the device type of the desired device. This type
+can then be compared with the device types returned by the
+
+request.
+
+
+
+
+
+
+ XDeviceInfo * XListInputDevices
+ Display *display
+ int *ndevices
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ ndevices
+
+
+
+Specifies the address of a variable into which the server
+can return the number of input devices available to the X server.
+
+
+
+
+
+
+
+
+
+allows a client to determine which devices
+are available for X input and information about those devices.
+An array of
+XDeviceInfo
+structures is returned, with one element in the array for each device.
+The number of devices is returned in the ndevices argument.
+
+
+
+The X pointer device and X keyboard device are reported, as well as
+all available extension input devices. The use member of the
+XDeviceInfo
+structure specifies the current use of the device.
+If the value of this member is
+IsXPointer ,
+the device is the X pointer device. If the value is
+IsXKeyboard ,
+the device is the X keyboard device. If the value is
+IsXExtensionDevice ,
+the device is available for use as an extension input device.
+
+
+
+Each
+XDeviceInfo
+entry contains a pointer to a list of structures
+that describe the characteristics of each class
+of input supported by that device. The num_classes member
+contains the number of entries in that list.
+
+
+
+If the device supports input class
+Valuators ,
+one of the structures pointed to by the
+XDeviceInfo
+structure will be an
+XValuatorInfo
+structure. The axes member of that structure
+contains the address of an array of
+XAxisInfo
+structures.
+There is one element in this array for each axis of motion
+reported by the device. The number of elements in this
+array is contained in the num_axes element of the
+XValuatorInfo
+structure.
+The size of the motion buffer for the device is
+reported in the motion_buffer member of the
+XValuatorInfo
+structure.
+
+
+
+The
+XDeviceInfo
+structure is defined as follows:
+
+
+
+
+
+
+
+typedef struct _XDeviceInfo {
+ XID id;
+ Atom type;
+ char *name;
+ int num_classes;
+ int use;
+ XAnyClassPtr inputclassinfo;
+} XDeviceInfo;
+
+
+
+
+
+The structures pointed to by the
+XDeviceInfo
+structure are defined as follows:
+
+
+
+
+
+
+
+typedef struct _XKeyInfo {
+ XID class;
+ int length;
+ unsigned short min_keycode;
+ unsigned short max_keycode;
+ unsigned short num_keys;
+} XKeyInfo;
+
+typedef struct _XButtonInfo {
+ XID class;
+ int length;
+ short num_buttons;
+} XButtonInfo;
+
+typedef struct _XValuatorInfo {
+ XID class;
+ int length;
+ unsigned char num_axes;
+ unsigned char mode;
+ unsigned long motion_buffer;
+ XAxisInfoPtr axes;
+} XValuatorInfo;
+
+
+
+
+
+The
+XAxisInfo
+structure pointed to by the
+XValuatorInfo
+structure is defined as follows:
+
+
+
+
+
+
+
+typedef struct _XAxisInfo {
+ int resolution;
+ int min_value;
+ int max_value;
+} XAxisInfo;
+
+
+
+
+
+The following atom names are defined in the
+< X11/extensions/XI.h >
+header file.
+
+
+
+MOUSE QUADRATURE
+TABLET SPACEBALL
+KEYBOARD DATAGLOVE
+TOUCHSCREEN EYETRACKER
+TOUCHPAD CURSORKEYS
+BUTTONBOX FOOTMOUSE
+BARCODE ID_MODULE
+KNOB_BOX ONE_KNOB
+TRACKBALL NINE_KNOB\s+1
+
+
+
+
+These names can be used in an
+XInternAtom
+request to return an atom that can be used for comparison
+with the type member of the
+XDeviceInfo
+structure.
+
+
+
+
+returns NULL if there are no input devices to list.
+
+
+
+
+To free the data returned by
+XListInputDevices ,
+use
+XFreeDeviceList .
+
+
+
+
+
+
+
+ void XFreeDeviceList
+ XDeviceInfo *list
+
+
+
+
+
+
+ list
+
+
+
+Specifies the pointer to the
+XDeviceInfo
+array returned by a previous call to
+XListInputDevices .
+
+
+
+
+
+
+
+
+
+frees the list of input device information.
+
+
+
+Enabling and Disabling Extension Devices
+
+
+
+
+
+Each client program that wishes to access an extension device must request
+that the server open that device by calling the
+
+function.
+
+
+
+ XDevice * XOpenDevice
+ Display *display
+ XID device_id
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device_id
+
+
+
+Specifies the ID that uniquely identifies the device to be opened.
+This ID is obtained from the
+
+request.
+
+
+
+
+
+
+
+
+
+opens the device for the requesting client and, on success, returns an
+XDevice
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID device_id;
+ int num_classes;
+ XInputClassInfo *classes;
+} XDevice;
+
+
+
+
+
+The
+XDevice
+structure contains a pointer to an array of
+XInputClassInfo
+structures. Each element in that array
+contains information about events of a particular input class supported
+by the input device.
+
+
+
+The
+XInputClassInfo
+structure is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ unsigned char input_class;
+ unsigned char event_type_base;
+} XInputClassInfo;
+
+
+
+
+
+A client program can determine the event
+type and event class for a given event by using macros defined by the
+input extension. The name of the macro corresponds to the desired event,
+and the macro is passed the structure that describes the device from which
+input is desired, for example:
+
+
+
+
+
+
+ DeviceKeyPress(XDevice *device, event_type, event_class)
+
+
+
+
+The macro will fill in the values of the event class to be used in an
+
+request to select the event and the event type to be used in comparing
+with the event types of events received via
+XNextEvent.
+
+
+
+
+can generate
+BadDevice
+errors.
+
+
+
+
+Before terminating, the client program should request that the server close
+the device by calling the
+
+function.
+
+
+
+ int XCloseDevice
+ Display *display
+ XDevice *device
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the device to be closed.
+
+
+
+
+
+
+
+
+
+closes the device for the requesting client and frees the associated
+XDevice
+structure.
+
+
+
+A client may open the same extension device more than once. Requests
+after the first successful one return an additional
+XDevice
+structure
+with the same information as the first, but otherwise have no effect.
+A single
+
+request will terminate that client's access to the device.
+
+
+
+Closing a device releases any active or passive grabs the requesting client
+has established. If the device is frozen only by an active grab of the
+requesting client, any queued events are released.
+
+
+
+If a client program terminates without closing a device, the server will
+automatically close that device on behalf of the client. This does not
+affect any other clients that may be accessing that device.
+
+
+
+
+can generate
+BadDevice
+errors.
+
+
+
+Changing the Mode of a Device
+
+
+
+
+
+Some devices are capable of reporting either relative or absolute motion
+data.
+To change the mode of a device from relative to absolute, use
+XSetDeviceMode .
+
+
+
+ int XSetDeviceMode
+ Display *display
+ XDevice *device
+ int mode
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the device whose mode should be changed.
+
+
+
+
+
+ mode
+
+
+
+Specifies the mode. You can pass
+Absolute
+or
+Relative .
+
+
+
+
+
+
+
+
+
+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
+
+request, this request will fail with a
+BadDevice
+error.
+If the device does not support input class
+Valuators
+or if it is not capable of reporting the specified mode,
+the request will fail with a
+BadMatch
+error.
+
+
+
+This request will fail and return
+DeviceBusy
+if another client has already opened the device and requested a different mode.
+
+
+
+
+can generate
+BadDevice ,
+BadMatch ,
+BadMode ,
+and
+DeviceBusy
+errors.
+
+
+
+Initializing Valuators on an Input Device
+
+
+
+
+
+Some devices that report absolute positional data can be initialized to a
+starting value. Devices that are capable of reporting relative motion or
+absolute positional data may require that their valuators be initialized
+to a starting value after the mode of the device is changed to
+Absolute .
+
+
+
+
+To initialize the valuators on such a device, use
+XSetDeviceValuators .
+
+
+
+ Status XSetDeviceValuators
+ Display *display
+ XDevice *device
+ int*valuators,first_valuator, num_valuators
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the device whose valuators should be initialized.
+
+
+
+
+
+ valuators
+
+
+
+Specifies the values to which each valuator should be set.
+
+
+
+
+
+ first_valuator
+
+
+
+Specifies the first valuator to be set.
+
+
+
+
+
+ num_valuators
+
+
+
+Specifies the number of valuators to be set.
+
+
+
+
+
+
+
+
+
+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.
+A
+BadValue
+error results if the number of valuators supported by the device
+is less than the following expression:
+
+
+
+ first_valuator + num_valuators
+
+
+
+
+If the request succeeds,
+Success
+is returned. If the specified device is grabbed by some other client,
+the request will fail and a status of
+AlreadyGrabbed
+will be returned.
+
+
+
+
+can generate
+BadDevice ,
+BadLength ,
+BadMatch ,
+and
+BadValue
+errors.
+
+
+
+Getting Input Device Controls
+
+
+
+
+
+Some input devices support various configuration controls
+that can be queried or changed by clients. The set of supported
+controls will vary from one input device to another. Requests
+to manipulate these controls will fail if either the target
+X server or the target input device does not support the
+requested device control.
+
+
+
+Each device control has a unique identifier. Information
+passed with each device control varies in length and is mapped
+by data structures unique to that device control.
+
+
+
+
+To query a device control, use
+XGetDeviceControl .
+
+
+
+ XDeviceControl * XGetDeviceControl
+ Display *display
+ XDevice *device
+ int control
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the device whose configuration control status is to be returned.
+
+
+
+
+
+ control
+
+
+
+Identifies the specific device control to be queried.
+
+
+
+
+
+
+
+
+
+returns the current state of the specified device control.
+If the target X server does not support that device control, a
+BadValue
+error is returned.
+If the specified device does not support that device control, a
+BadMatch
+error
+is returned.
+
+
+
+If the request is successful, a pointer to a generic
+XDeviceState
+structure is returned. The information returned varies according
+to the specified control and is mapped by a structure appropriate
+for that control.
+The first two members are common to all device controls
+and are defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID control;
+ int length;
+} XDeviceState;
+\fP
+
+
+
+
+
+The control may be compared to constants defined in the file
+< X11/extensions/XI.h >.
+Currently defined device controls include DEVICE_RESOLUTION.
+
+
+
+The information returned for the DEVICE_RESOLUTION control is
+defined in the
+XDeviceResolutionState
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID control;
+ int length;
+ int num_valuators;
+ int *resolutions;
+ int *min_resolutions;
+ int *max_resolutions;
+} XDeviceResolutionState;
+
+
+
+
+
+This device control returns a list of valuators and the range of
+valid resolutions allowed for each. Valuators are numbered
+beginning with zero (0). Resolutions for all valuators on the device are
+returned. For each valuator i on the device, resolutions[i] returns
+the current setting of the resolution, min_resolutions[i] returns
+the minimum valid setting, and max_resolutions[i] returns the
+maximum valid setting.
+
+
+
+When this control is specified,
+
+fails with a
+BadMatch
+error if the specified device has no valuators.
+
+
+
+
+can generate
+BadMatch
+and
+BadValue
+errors.
+
+
+
+Changing Input Device Controls
+
+
+
+
+
+Some input devices support various configuration controls
+that can be changed by clients. Typically, this would be
+done to initialize the device to a known state or configuration.
+The set of supported controls will vary from one input device
+to another. Requests to manipulate these controls will fail if
+either the target X server or the target input device does not
+support the requested device control. Setting the device control
+will also fail if the target input device is grabbed by another
+client or is open by another client and has been set to a conflicting
+state.
+
+
+
+Each device control has a unique identifier. Information
+passed with each device control varies in length and is mapped
+by data structures unique to that device control.
+
+
+
+
+To change a device control, use
+XChangeDeviceControl .
+
+
+
+ Status XChangeDeviceControl
+ Display *display
+ XDevice *device
+ int control
+ XDeviceControl *value
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the device whose configuration control status is to be modified.
+
+
+
+
+
+ control
+
+
+
+Identifies the specific device control to be changed.
+
+
+
+
+
+ value
+
+
+
+Specifies a pointer to an
+XDeviceControl
+structure that describes which control is to be changed
+and how it is to be changed.
+
+
+
+
+
+
+
+
+
+changes the current state of the specified device control.
+If the target X server does not support that device control, a
+BadValue
+error is returned.
+If the specified device does not support that device control, a
+BadMatch
+error is returned.
+If another client has the target device grabbed, a status of
+AlreadyGrabbed
+is returned.
+If another client has the device open and has set it to a
+conflicting state, a status of
+DeviceBusy
+is returned.
+If the request fails for any reason, the device control will not
+be changed.
+
+
+
+If the request is successful, the device control will be changed
+and a status of
+Success
+is returned.
+The information passed varies according to the specified control
+and is mapped by a structure appropriate for that control.
+The first two members are common to all device controls:
+
+
+
+
+
+
+
+typedef struct {
+ XID control;
+ int length;
+} XDeviceControl;
+
+
+
+
+
+The control may be set using constants defined in the
+< X11/extensions/XI.h >
+header file.
+Currently defined device controls include DEVICE_RESOLUTION.
+
+
+
+The information that can be changed by the DEVICE_RESOLUTION
+control is defined in the
+XDeviceResolutionControl
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ XID control;
+ int length;
+ int first_valuator;
+ int num_valuators;
+ int *resolutions;
+} XDeviceResolutionControl;
+
+
+
+
+
+This device control changes the resolution of 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. A value
+of -1 in the resolutions list indicates that the resolution for
+this valuator is not to be changed. The num_valuators member
+specifies the number of valuators in the resolutions list.
+
+
+
+When this control is specified,
+
+fails with a
+BadMatch
+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
+XGetDeviceControl ),
+
+fails with a
+BadValue
+error.
+A
+BadValue
+error results if the number of valuators supported by the device
+is less than the following expression:
+
+
+
+
+
+
+ first_valuator + num_valuators,
+
+
+
+
+
+can generate
+BadMatch
+and
+BadValue
+errors.
+
+
+
+Selecting Extension Device Events
+
+
+
+
+
+To select device input events, use
+XSelectExtensionEvent .
+The parameters passed are a pointer to
+a list of classes that define the desired event types and devices, a count
+of the number of elements in the list, and the ID of the window from which
+events are desired.
+
+
+
+ int XSelectExtensionEvent
+ Display *display
+ Window window
+ XEventClass *event_list
+ int event_count
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ window
+
+
+
+Specifies the ID of the window from which the client wishes to receive events.
+
+
+
+
+
+ event_list
+
+
+
+Specifies a pointer to an array of event classes
+that specify which events are desired.
+
+
+
+
+
+ event_count
+
+
+
+Specifies the number of elements in the event_list.
+
+
+
+
+
+
+
+
+
+requests the server to send events that match the events and
+devices described by the event list and that come from the requested
+window.
+The elements of the
+XEventClass
+array are the event_class values
+obtained by invoking a macro with the pointer to an
+XDevice
+structure returned by the
+
+request.
+For example, the
+DeviceKeyPress
+macro would return the
+XEventClass
+for
+DeviceKeyPress
+events from the specified device if it were invoked in the following form:
+
+
+
+ DeviceKeyPress (XDevice *device, event_type, event_class)
+
+
+
+
+Macros are defined for the following event classes:
+
+DeviceKeyPress
+DeviceKeyRelease
+DeviceButtonPress
+DeviceButtonRelease
+DeviceMotionNotify
+DeviceFocusIn
+DeviceFocusOut
+ProximityIn
+ProximityOut
+DeviceStateNotify
+DeviceMappingNotify
+ChangeDeviceNotify
+DevicePointerMotionHint
+DeviceButton1Motion
+DeviceButton2Motion
+DeviceButton3Motion,
+DeviceButton4Motion
+DeviceButton5Motion
+DeviceButtonMotion,
+DeviceOwnerGrabButton
+DeviceButtonPressGrab
+
+
+
+
+To get the next available event from within a client program, use the core
+XNextEvent
+function. This returns the next event whether it
+came from a core device or an extension device.
+
+
+
+Succeeding
+
+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.
+
+
+
+
+can generate
+BadAccess ,
+BadClass ,
+BadLength ,
+and
+BadWindow
+errors.
+
+
+
+Determining Selected Device Events
+
+
+
+
+
+To determine which extension events are currently selected from a given
+window, use
+XGetSelectedExtensionEvents .
+
+
+
+ int XGetSelectedExtensionEvents
+ Display *display
+ Window window
+ int *this_client_count
+ XEventClass **this_client
+ int *all_clients_count
+ XEventClass **all_clients
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ window
+
+
+
+Specifies the ID of the window from which the client wishes to receive events.
+
+
+
+
+
+ this_client_count
+
+
+
+Returns the number of elements in the this_client list.
+
+
+
+
+
+ this_client
+
+
+
+Returns a list of
+XEventClasses
+that specify which events are
+selected by this client.
+
+
+
+
+
+ all_clients_count
+
+
+
+Returns the number of elements in the all_clients list.
+
+
+
+
+
+ all_clients
+
+
+
+Returns a list of
+XEventClasses
+that specify which events are
+selected by all clients.
+
+
+
+
+
+
+
+
+
+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
+all clients from the specified window. This information is analogous
+to that returned in your_event_mask and all_event_masks of the
+XWindowAttributes
+structure when an
+XGetWindowAttributes
+request is made.
+To free the two arrays returned by this function, use
+XFree.
+
+
+
+
+can generate
+BadWindow
+errors.
+
+
+
+Controlling Event Propagation
+
+
+
+
+
+Extension events propagate up the window hierarchy in the same manner
+as core events. If a window is not interested in an extension event,
+it usually propagates to the closest ancestor that is interested,
+unless the dont_propagate list prohibits it.
+Grabs of extension devices may alter the set of windows that receive a
+particular extension event.
+
+
+
+Client programs may control event propagation through the use
+of the following two functions:
+
+and
+XGetDeviceDontPropagateList .
+
+
+
+
+
+
+ int XChangeDeviceDontPropagateList
+ Display *display
+ Window window
+ int event_count
+ XEventClass *events
+ int mode
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ window
+
+
+
+Specifies the desired window.
+
+
+
+
+
+ event_count
+
+
+
+Specifies the number of elements in the events list.
+
+
+
+
+
+ events
+
+
+
+Specifies a pointer to the list of XEventClasses.
+
+
+
+
+
+ mode
+
+
+
+Specifies the mode. You can pass
+AddToList
+or
+DeleteFromList .
+
+
+
+
+
+
+
+
+
+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.
+The list is not altered if a client that changed the list terminates.
+
+
+
+Suppression of event propagation is not allowed for all events. If a
+specified
+XEventClass
+is invalid because suppression of that event is not allowed, a
+BadClass
+error results.
+
+
+
+
+can generate
+BadClass ,
+BadMode ,
+and
+BadWindow
+errors.
+
+
+
+
+
+
+
+ XEventClass * XGetDeviceDontPropagateList
+ Display *display
+ Window window
+ int *event_count
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ window
+
+
+
+Specifies the desired window.
+
+
+
+
+
+ event_count
+
+
+
+Returns the number of elements in the array returned by this function.
+
+
+
+
+
+
+
+
+
+allows a client to determine the do_not_propagate list of extension events
+for the specified window.
+It returns an array of
+XEventClass ,
+each
+XEventClass
+representing a device/event type pair.
+To free the data returned by this function, use
+XFree.
+
+
+
+
+can generate
+BadWindow
+errors.
+
+
+
+Sending an Event
+
+
+
+
+
+To send an extension event to another client, use
+XSendExtensionEvent .
+
+
+
+ int XSendExtensionEvent
+ Display *display
+ XDevice *device
+ Window window
+ Bool propagate
+ int event_count
+ XEventClass *event_list
+ XEvent *event
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the device whose ID is recorded in the event.
+
+
+
+
+
+ window
+
+
+
+Specifies the destination window ID. You can pass a window ID,
+PointerWindow
+or
+InputFocus .
+
+
+
+
+
+ propagate
+
+
+
+Specifies a boolean value that is either
+True
+or
+False .
+
+
+
+
+
+ event_count
+
+
+
+Specifies the number of elements in the event_list array.
+
+
+
+
+
+ event_list
+
+
+
+Specifies a pointer to an array of
+XEventClass .
+
+
+
+
+
+ event
+
+
+
+Specifies a pointer to the event that is to be sent.
+
+
+
+
+
+
+
+
+
+identifies the destination window, determines which clients should receive
+the specified event, and ignores any active grabs.
+It requires a list of
+XEventClass
+to be specified.
+These are obtained by opening an input device with the
+
+request.
+
+
+
+
+uses the window argument to identify the destination window as follows:
+
+
+
+
+If you pass
+PointerWindow ,
+the destination window is the window that contains the pointer.
+
+
+
+
+If you pass
+InputFocus
+and if the focus window contains the pointer,
+the destination window is the window that contains the pointer.
+If the focus window does not contain the pointer,
+the destination window is the focus window.
+
+
+
+
+
+To determine which clients should receive the specified events,
+
+uses the propagate argument as follows:
+
+
+
+
+If propagate is
+False ,
+the event is sent to every client selecting
+from the destination window
+any of the events specified in the event_list array.
+
+
+
+
+If propagate is
+True
+and no clients have selected from the destination window
+any of the events specified in the event_list array, the destination is
+replaced with the closest ancestor of destination for which some client
+has selected one of the specified events and for which no intervening
+window has that event in its do_not_propagate mask.
+If no such window exists,
+or if the window is an ancestor of the focus window, and
+InputFocus
+was originally specified as the destination,
+the event is not sent to any clients. Otherwise, the event is reported to every
+client selecting on the final destination any of the events specified
+in event_list.
+
+
+
+
+
+The event in the
+XEvent
+structure must be one of the events defined
+by the input extension, so that the X server can correctly byte swap the
+contents as necessary. The contents of the event are otherwise unaltered
+and unchecked by the X server except to force send_event to
+True
+in the forwarded event and to set the sequence number in the event correctly.
+
+
+
+
+returns zero if the conversion-to-wire protocol failed;
+otherwise, it returns nonzero.
+
+
+
+
+can generate
+BadClass ,
+BadDevice ,
+BadValue ,
+and
+BadWindow
+errors.
+
+
+
+Getting Motion History
+
+
+
+
+
+
+
+
+ XDeviceTimeCoord * XGetDeviceMotionEvents
+ axis_count_return)
+ Display *display
+ XDevice *device
+ Timestart, stop
+ int *nevents_return
+ int *mode_return
+ int *axis_count_return
+
+
+
+
+
+
+ display
+
+
+
+Specifies the connection to the X server.
+
+
+
+
+
+ device
+
+
+
+Specifies the desired device.
+
+
+
+
+
+ start
+
+
+
+Specifies the start time.
+
+
+
+
+
+ stop
+
+
+
+Specifies the stop time.
+
+
+
+
+
+ nevents_return
+
+
+
+Returns the number of positions in the motion buffer returned
+for this request.
+
+
+
+
+
+ mode_return
+
+
+
+Returns the mode of the nevents information.
+The mode will be one of the following:
+Absolute
+or
+Relative .
+
+
+
+
+
+ axis_count_return
+
+
+
+Returns the number of axes reported in each of the positions returned.
+
+
+
+
+
+
+
+
+
+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,
+no positions are returned.
+
+
+
+The return type for this function is an
+XDeviceTimeCoord
+structure, which is defined as follows:
+
+
+
+
+
+
+
+typedef struct {
+ Time time;
+ unsigned int *data;
+} XDeviceTimeCoord;
+
+
+
+
+
+The data member is a pointer to an array of data items.
+Each item is of type int, and there is one data item
+per axis of motion reported by the device.
+The number of axes reported by the device is returned in the axis_count variable.
+
+
+
+The value of the data items depends on the mode of the device.
+The mode is returned in the mode variable. If the
+mode is
+Absolute ,
+the data items are the raw values generated by the device.
+These may be scaled by the client program using the
+maximum values that the device can generate for each axis of motion
+that it reports. The maximum value for each axis is reported in
+the max_val member of the
+XAxisInfo
+structure, which is part of the information returned by the
+
+request.
+
+
+
+If the mode is
+Relative ,
+the data items are the relative values generated by the device.
+The client program must choose an initial
+position for the device and maintain a current position by
+accumulating these relative values.
+
+
+
+Consecutive calls to
+
+can return data of different modes, that is, if
+some client program has changed the mode of the device via an
+
+request.
+
+
+
+
+can generate
+BadDevice
+and
+BadMatch
+errors.
+
+
+
+
+To free the data returned by
+XGetDeviceMotionEvents ,
+use
+XFreeDeviceMotionEvents .
+
+
+
+
+
+
+ void XFreeDeviceMotionEvents
+ XDeviceTimeCoord *events
+
+
+
+
+
+
+ events
+
+
+
+Specifies the pointer to the
+XDeviceTimeCoord
+array returned by a previous call to
+XGetDeviceMotionEvents .
+
+
+
+
+
+
+
+
+
+frees the specified array of motion information.
+
+
+
+
+
+
+
+
+
+Appendix A
+
+
+
+
+
+
+The following information is contained in the <X11/extensions/XInput.h>
+and <X11/extensions/XI.h> header files:
+
+
+
+
+/* Definitions used by the library and client */
+
+#ifndef _XINPUT_H_
+#define _XINPUT_H_
+
+#ifndef _XLIB_H_
+#include <X11/Xlib.h>
+#endif
+
+#ifndef _XI_H_
+#include "XI.h"
+#endif
+
+#define _deviceKeyPress 0
+#define _deviceKeyRelease 1
+
+#define _deviceButtonPress 0
+#define _deviceButtonRelease 1
+
+#define _deviceMotionNotify 0
+
+#define _deviceFocusIn 0
+#define _deviceFocusOut 1
+
+#define _proximityIn 0
+#define _proximityOut 1
+
+#define _deviceStateNotify 0
+#define _deviceMappingNotify 1
+#define _changeDeviceNotify 2
+
+#define FindTypeAndClass(d, type, class, classid, offset) \
+ { int i; XInputClassInfo *ip; \
+ type = 0; class = 0; \
+ for (i=0, ip= ((XDevice *) d)->classes; \
+ i< ((XDevice *) d)->num_classes; \
+ i++, ip++) \
+ if (ip->input_class == classid) \
+ {type = ip->event_type_base + offset; \
+ class = ((XDevice *) d)->device_id << 8 | type;}}
+
+#define DeviceKeyPress(d, type, class) \
+ FindTypeAndClass(d, type, class, KeyClass, _deviceKeyPress)
+
+#define DeviceKeyRelease(d, type, class) \
+ FindTypeAndClass(d, type, class, KeyClass, _deviceKeyRelease)
+
+#define DeviceButtonPress(d, type, class) \
+ FindTypeAndClass(d, type, class, ButtonClass, _deviceButtonPress)
+
+#define DeviceButtonRelease(d, type, class) \
+ FindTypeAndClass(d, type, class, ButtonClass, _deviceButtonRelease)
+
+#define DeviceMotionNotify(d, type, class) \
+ FindTypeAndClass(d, type, class, ValuatorClass, _deviceMotionNotify)
+
+#define DeviceFocusIn(d, type, class) \
+ FindTypeAndClass(d, type, class, FocusClass, _deviceFocusIn)
+
+#define DeviceFocusOut(d, type, class) \
+ FindTypeAndClass(d, type, class, FocusClass, _deviceFocusOut)
+
+#define ProximityIn(d, type, class) \
+ FindTypeAndClass(d, type, class, ProximityClass, _proximityIn)
+
+#define ProximityOut(d, type, class) \
+ FindTypeAndClass(d, type, class, ProximityClass, _proximityOut)
+
+#define DeviceStateNotify(d, type, class) \
+ FindTypeAndClass(d, type, class, OtherClass, _deviceStateNotify)
+
+#define DeviceMappingNotify(d, type, class) \
+ FindTypeAndClass(d, type, class, OtherClass, _deviceMappingNotify)
+
+#define ChangeDeviceNotify(d, type, class) \
+ FindTypeAndClass(d, type, class, OtherClass, _changeDeviceNotify)
+
+#define DevicePointerMotionHint(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _devicePointerMotionHint;}
+
+#define DeviceButton1Motion(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceButton1Motion;}
+
+#define DeviceButton2Motion(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceButton2Motion;}
+
+#define DeviceButton3Motion(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceButton3Motion;}
+
+#define DeviceButton4Motion(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceButton4Motion;}
+
+#define DeviceButton5Motion(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceButton5Motion;}
+
+#define DeviceButtonMotion(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceButtonMotion;}
+
+#define DeviceOwnerGrabButton(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceOwnerGrabButton;}
+
+#define DeviceButtonPressGrab(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _deviceButtonGrab;}
+
+#define NoExtensionEvent(d, type, class) \
+ { class = ((XDevice *) d)->device_id << 8 | _noExtensionEvent;}
+
+#define BadDevice(dpy, error) _xibaddevice(dpy, &error)
+
+#define BadClass(dpy, error) _xibadclass(dpy, &error)
+
+#define BadEvent(dpy, error) _xibadevent(dpy, &error)
+
+#define BadMode(dpy, error) _xibadmode(dpy, &error)
+
+#define DeviceBusy(dpy, error) _xidevicebusy(dpy, &error)
+
+/***************************************************************
+ *
+ * DeviceKey events. These events are sent by input devices that
+ * support input class Keys.
+ * The location of the X pointer is reported in the coordinate
+ * fields of the x,y and x_root,y_root fields.
+ *
+ */
+
+typedef struct
+ {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed */
+ Bool send_event; /* true if from SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ XID deviceid;
+ Window root; /* root window event occured on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* x, y coordinates in event window */
+ int x_root; /* coordinates relative to root */
+ int y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ unsigned int keycode; /* detail */
+ Bool same_screen; /* same screen flag */
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+ } XDeviceKeyEvent;
+
+typedef XDeviceKeyEvent XDeviceKeyPressedEvent;
+typedef XDeviceKeyEvent XDeviceKeyReleasedEvent;
+
+/*******************************************************************
+ *
+ * DeviceButton events. These events are sent by extension devices
+ * that support input class Buttons.
+ *
+ */
+
+typedef struct {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ XID deviceid;
+ Window root; /* root window that the event occured on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* x, y coordinates in event window */
+ int x_root; /* coordinates relative to root */
+ int y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ unsigned int button; /* detail */
+ Bool same_screen; /* same screen flag */
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+ } XDeviceButtonEvent;
+
+typedef XDeviceButtonEvent XDeviceButtonPressedEvent;
+typedef XDeviceButtonEvent XDeviceButtonReleasedEvent;
+
+/*******************************************************************
+ *
+ * DeviceMotionNotify event. These events are sent by extension devices
+ * that support input class Valuators.
+ *
+ */
+
+typedef struct
+ {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ XID deviceid;
+ Window root; /* root window that the event occured on */
+ Window subwindow; /* child window */
+ Time time; /* milliseconds */
+ int x, y; /* x, y coordinates in event window */
+ int x_root; /* coordinates relative to root */
+ int y_root; /* coordinates relative to root */
+ unsigned int state; /* key or button mask */
+ char is_hint; /* detail */
+ Bool same_screen; /* same screen flag */
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+ } XDeviceMotionEvent;
+
+/*******************************************************************
+ *
+ * DeviceFocusChange events. These events are sent when the focus
+ * of an extension device that can be focused is changed.
+ *
+ */
+
+typedef struct
+ {
+ int type; /* of event */
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Window window; /* "event" window reported relative to */
+ XID deviceid;
+ int mode; /* NotifyNormal, NotifyGrab, NotifyUngrab */
+ int detail;
+ /*
+ * NotifyAncestor, NotifyVirtual, NotifyInferior,
+ * NotifyNonLinear,NotifyNonLinearVirtual, NotifyPointer,
+ * NotifyPointerRoot, NotifyDetailNone
+ */
+ Time time;
+ } XDeviceFocusChangeEvent;
+
+typedef XDeviceFocusChangeEvent XDeviceFocusInEvent;
+typedef XDeviceFocusChangeEvent XDeviceFocusOutEvent;
+
+/*******************************************************************
+ *
+ * ProximityNotify events. These events are sent by those absolute
+ * positioning devices that are capable of generating proximity information.
+ *
+ */
+
+typedef struct
+ {
+ int type; /* ProximityIn or ProximityOut */
+ 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 */
+ Window window;
+ XID deviceid;
+ Window root;
+ Window subwindow;
+ Time time;
+ int x, y;
+ int x_root, y_root;
+ unsigned int state;
+ Bool same_screen;
+ unsigned int device_state; /* device key or button mask */
+ unsigned char axes_count;
+ unsigned char first_axis;
+ int axis_data[6];
+ } XProximityNotifyEvent;
+typedef XProximityNotifyEvent XProximityInEvent;
+typedef XProximityNotifyEvent XProximityOutEvent;
+
+/*******************************************************************
+ *
+ * DeviceStateNotify events are generated on EnterWindow and FocusIn
+ * for those clients who have selected DeviceState.
+ *
+ */
+
+typedef struct
+ {
+ unsigned char class;
+ unsigned char length;
+ } XInputClass;
+
+typedef struct {
+ int type;
+ 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 */
+ Window window;
+ XID deviceid;
+ Time time;
+ int num_classes;
+ char data[64];
+} XDeviceStateNotifyEvent;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ unsigned char num_valuators;
+ unsigned char mode;
+ int valuators[6];
+} XValuatorStatus;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_keys;
+ char keys[32];
+} XKeyStatus;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_buttons;
+ char buttons[32];
+} XButtonStatus;
+
+/*******************************************************************
+ *
+ * DeviceMappingNotify event. This event is sent when the key mapping,
+ * modifier mapping, or button mapping of an extension device is changed.
+ *
+ */
+
+typedef struct {
+ int type;
+ 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 */
+ Window window; /* unused */
+ XID deviceid;
+ Time time;
+ int request; /* one of MappingModifier, MappingKeyboard,
+ MappingPointer */
+ int first_keycode;/* first keycode */
+ int count; /* defines range of change w. first_keycode*/
+} XDeviceMappingEvent;
+
+/*******************************************************************
+ *
+ * ChangeDeviceNotify event. This event is sent when an
+ * XChangeKeyboard or XChangePointer request is made.
+ *
+ */
+
+typedef struct {
+ int type;
+ 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 */
+ Window window; /* unused */
+ XID deviceid;
+ Time time;
+ int request; /* NewPointer or NewKeyboard */
+} XChangeDeviceNotifyEvent;
+
+/*******************************************************************
+ *
+ * Control structures for input devices that support input class
+ * Feedback. These are used by the XGetFeedbackControl and
+ * XChangeFeedbackControl functions.
+ *
+ */
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+} XFeedbackState;
+
+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];
+} XKbdFeedbackState;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int accelNum;
+ int accelDenom;
+ int threshold;
+} XPtrFeedbackState;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int resolution;
+ int minVal;
+ int maxVal;
+} XIntegerFeedbackState;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int max_symbols;
+ int num_syms_supported;
+ KeySym *syms_supported;
+} XStringFeedbackState;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int percent;
+ int pitch;
+ int duration;
+} XBellFeedbackState;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int led_values;
+ int led_mask;
+} XLedFeedbackState;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+} XFeedbackControl;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int accelNum;
+ int accelDenom;
+ int threshold;
+} XPtrFeedbackControl;
+
+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;
+} XKbdFeedbackControl;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int num_keysyms;
+ KeySym *syms_to_display;
+} XStringFeedbackControl;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int int_to_display;
+} XIntegerFeedbackControl;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int percent;
+ int pitch;
+ int duration;
+} XBellFeedbackControl;
+
+typedef struct {
+ XID class;
+ int length;
+ XID id;
+ int led_mask;
+ int led_values;
+} XLedFeedbackControl;
+
+/*******************************************************************
+ *
+ * Device control structures.
+ *
+ */
+
+typedef struct {
+ XID control;
+ int length;
+} XDeviceControl;
+
+typedef struct {
+ XID control;
+ int length;
+ int first_valuator;
+ int num_valuators;
+ int *resolutions;
+} XDeviceResolutionControl;
+
+typedef struct {
+ XID control;
+ int length;
+ int num_valuators;
+ int *resolutions;
+ int *min_resolutions;
+ int *max_resolutions;
+} XDeviceResolutionState;
+
+/*******************************************************************
+ *
+ * An array of XDeviceList structures is returned by the
+ * XListInputDevices function. Each entry contains information
+ * about one input device. Among that information is an array of
+ * pointers to structures that describe the characteristics of
+ * the input device.
+ *
+ */
+
+typedef struct _XAnyClassinfo *XAnyClassPtr;
+
+typedef struct _XAnyClassinfo {
+ XID class;
+ int length;
+ } XAnyClassInfo;
+
+typedef struct _XDeviceInfo *XDeviceInfoPtr;
+
+typedef struct _XDeviceInfo
+ {
+ XID id;
+ Atom type;
+ char *name;
+ int num_classes;
+ int use;
+ XAnyClassPtr inputclassinfo;
+ } XDeviceInfo;
+
+typedef struct _XKeyInfo *XKeyInfoPtr;
+
+typedef struct _XKeyInfo
+ {
+ XID class;
+ int length;
+ unsigned short min_keycode;
+ unsigned short max_keycode;
+ unsigned short num_keys;
+ } XKeyInfo;
+
+typedef struct _XButtonInfo *XButtonInfoPtr;
+
+typedef struct _XButtonInfo {
+ XID class;
+ int length;
+ short num_buttons;
+ } XButtonInfo;
+
+typedef struct _XAxisInfo *XAxisInfoPtr;
+
+typedef struct _XAxisInfo {
+ int resolution;
+ int min_value;
+ int max_value;
+ } XAxisInfo;
+
+typedef struct _XValuatorInfo *XValuatorInfoPtr;
+
+typedef struct _XValuatorInfo
+ {
+ XID class;
+ int length;
+ unsigned char num_axes;
+ unsigned char mode;
+ unsigned long motion_buffer;
+ XAxisInfoPtr axes;
+ } XValuatorInfo;
+
+
+/*******************************************************************
+ *
+ * An XDevice structure is returned by the XOpenDevice function.
+ * It contains an array of pointers to XInputClassInfo structures.
+ * Each contains information about a class of input supported by the
+ * device, including a pointer to an array of data for each type of event
+ * the device reports.
+ *
+ */
+
+
+typedef struct {
+ unsigned char input_class;
+ unsigned char event_type_base;
+} XInputClassInfo;
+
+typedef struct {
+ XID device_id;
+ int num_classes;
+ XInputClassInfo *classes;
+} XDevice;
+
+
+/*******************************************************************
+ *
+ * The following structure is used to return information for the
+ * XGetSelectedExtensionEvents function.
+ *
+ */
+
+typedef struct {
+ XEventClass event_type;
+ XID device;
+} XEventList;
+
+/*******************************************************************
+ *
+ * The following structure is used to return motion history data from
+ * an input device that supports the input class Valuators.
+ * This information is returned by the XGetDeviceMotionEvents function.
+ *
+ */
+
+typedef struct {
+ Time time;
+ int *data;
+} XDeviceTimeCoord;
+
+
+/*******************************************************************
+ *
+ * Device state structure.
+ * This is returned by the XQueryDeviceState request.
+ *
+ */
+
+typedef struct {
+ XID device_id;
+ int num_classes;
+ XInputClass *data;
+} XDeviceState;
+
+/*******************************************************************
+ *
+ * Note that the mode field is a bitfield that reports the Proximity
+ * status of the device as well as the mode. The mode field should
+ * be OR'd with the mask DeviceMode and compared with the values
+ * Absolute and Relative to determine the mode, and should be OR'd
+ * with the mask ProximityState and compared with the values InProximity
+ * and OutOfProximity to determine the proximity state.
+ *
+ */
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ unsigned char num_valuators;
+ unsigned char mode;
+ int *valuators;
+} XValuatorState;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_keys;
+ char keys[32];
+} XKeyState;
+
+typedef struct {
+ unsigned char class;
+ unsigned char length;
+ short num_buttons;
+ char buttons[32];
+} XButtonState;
+
+/*******************************************************************
+ *
+ * Function definitions.
+ *
+ */
+
+_XFUNCPROTOBEGIN
+
+extern int XChangeKeyboardDevice(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */
+#endif
+);
+
+extern int XChangePointerDevice(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int /* xaxis */,
+ int /* yaxis */
+#endif
+);
+
+extern int XGrabDevice(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ Window /* grab_window */,
+ Bool /* ownerEvents */,
+ int /* event count */,
+ XEventClass* /* event_list */,
+ int /* this_device_mode */,
+ int /* other_devices_mode */,
+ Time /* time */
+#endif
+);
+
+extern int XUngrabDevice(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ Time /* time */
+#endif
+);
+
+extern int XGrabDeviceKey(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ unsigned int /* key */,
+ unsigned int /* modifiers */,
+ XDevice* /* modifier_device */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ unsigned int /* event_count */,
+ XEventClass* /* event_list */,
+ int /* this_device_mode */,
+ int /* other_devices_mode */
+#endif
+);
+
+extern int XUngrabDeviceKey(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ unsigned int /* key */,
+ unsigned int /* modifiers */,
+ XDevice* /* modifier_dev */,
+ Window /* grab_window */
+#endif
+);
+
+extern int XGrabDeviceButton(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ unsigned int /* button */,
+ unsigned int /* modifiers */,
+ XDevice* /* modifier_device */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ unsigned int /* event_count */,
+ XEventClass* /* event_list */,
+ int /* this_device_mode */,
+ int /* other_devices_mode */
+#endif
+);
+
+extern int XUngrabDeviceButton(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ unsigned int /* button */,
+ unsigned int /* modifiers */,
+ XDevice* /* modifier_dev */,
+ Window /* grab_window */
+#endif
+);
+
+extern int XAllowDeviceEvents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int /* event_mode */,
+ Time /* time */
+#endif
+);
+
+extern int XGetDeviceFocus(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ Window* /* focus */,
+ int* /* revert_to */,
+ Time* /* time */
+#endif
+);
+
+extern int XSetDeviceFocus(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ Window /* focus */,
+ int /* revert_to */,
+ Time /* time */
+#endif
+);
+
+extern XFeedbackState *XGetFeedbackControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int* /* num_feedbacks */
+#endif
+);
+
+extern int XFreeFeedbackList(
+#if NeedFunctionPrototypes
+ XFeedbackState* /* list */
+#endif
+);
+
+extern int XChangeFeedbackControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ unsigned long /* mask */,
+ XFeedbackControl* /* f */
+#endif
+);
+
+extern int XDeviceBell(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ XID /* feedbackclass */,
+ XID /* feedbackid */,
+ int /* percent */
+#endif
+);
+
+extern KeySym *XGetDeviceKeyMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+#if NeedWidePrototypes
+ unsigned int /* first */,
+#else
+ KeyCode /* first */,
+#endif
+ int /* keycount */,
+ int* /* syms_per_code */
+#endif
+);
+
+extern int XChangeDeviceKeyMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int /* first */,
+ int /* syms_per_code */,
+ KeySym* /* keysyms */,
+ int /* count */
+#endif
+);
+
+extern XModifierKeymap *XGetDeviceModifierMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */
+#endif
+);
+
+extern int XSetDeviceModifierMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ XModifierKeymap* /* modmap */
+#endif
+);
+
+extern int XSetDeviceButtonMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ unsigned char* /* map[] */,
+ int /* nmap */
+#endif
+);
+
+extern int XGetDeviceButtonMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ unsigned char* /* map[] */,
+ unsigned int /* nmap */
+#endif
+);
+
+extern XDeviceState *XQueryDeviceState(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */
+#endif
+);
+
+extern int XFreeDeviceState(
+#if NeedFunctionPrototypes
+ XDeviceState* /* list */
+#endif
+);
+
+extern XExtensionVersion *XGetExtensionVersion(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ _Xconst char* /* name */
+#endif
+);
+
+extern XDeviceInfo *XListInputDevices(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* ndevices */
+#endif
+);
+
+extern int XFreeDeviceList(
+#if NeedFunctionPrototypes
+ XDeviceInfo* /* list */
+#endif
+);
+
+extern XDevice *XOpenDevice(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* id */
+#endif
+);
+
+extern int XCloseDevice(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */
+#endif
+);
+
+extern int XSetDeviceMode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int /* mode */
+#endif
+);
+
+extern int XSetDeviceValuators(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int* /* valuators */,
+ int /* first_valuator */,
+ int /* num_valuators */
+#endif
+);
+
+extern XDeviceControl *XGetDeviceControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int /* control */
+#endif
+);
+
+extern int XChangeDeviceControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ int /* control */,
+ XDeviceControl* /* d */
+#endif
+);
+
+extern int XSelectExtensionEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XEventClass* /* event_list */,
+ int /* count */
+#endif
+);
+
+extern int XGetSelectedExtensionEvents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int* /* this_client_count */,
+ XEventClass** /* this_client_list */,
+ int* /* all_clients_count */,
+ XEventClass** /* all_clients_list */
+#endif
+);
+
+extern int XChangeDeviceDontPropagateList(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* window */,
+ int /* count */,
+ XEventClass* /* events */,
+ int /* mode */
+#endif
+);
+
+extern XEventClass *XGetDeviceDontPropagateList(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* window */,
+ int* /* count */
+#endif
+);
+
+extern Status XSendExtensionEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ Window /* dest */,
+ Bool /* prop */,
+ int /* count */,
+ XEventClass* /* list */,
+ XEvent* /* event */
+#endif
+);
+
+extern XDeviceTimeCoord *XGetDeviceMotionEvents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XDevice* /* device */,
+ Time /* start */,
+ Time /* stop */,
+ int* /* nEvents */,
+ int* /* mode */,
+ int* /* axis_count */
+#endif
+);
+
+extern int XFreeDeviceMotionEvents(
+#if NeedFunctionPrototypes
+ XDeviceTimeCoord* /* events */
+#endif
+);
+
+extern int XFreeDeviceControl(
+#if NeedFunctionPrototypes
+ XDeviceControl* /* control */
+#endif
+);
+
+_XFUNCPROTOEND
+
+#endif /* _XINPUT_H_ */
+
+/* Definitions used by the server, library and client */
+
+#ifndef _XI_H_
+
+#define _XI_H_
+
+#define sz_xGetExtensionVersionReq 8
+#define sz_xGetExtensionVersionReply 32
+#define sz_xListInputDevicesReq 4
+#define sz_xListInputDevicesReply 32
+#define sz_xOpenDeviceReq 8
+#define sz_xOpenDeviceReply 32
+#define sz_xCloseDeviceReq 8
+#define sz_xSetDeviceModeReq 8
+#define sz_xSetDeviceModeReply 32
+#define sz_xSelectExtensionEventReq 12
+#define sz_xGetSelectedExtensionEventsReq 8
+#define sz_xGetSelectedExtensionEventsReply 32
+#define sz_xChangeDeviceDontPropagateListReq 12
+#define sz_xGetDeviceDontPropagateListReq 8
+#define sz_xGetDeviceDontPropagateListReply 32
+#define sz_xGetDeviceMotionEventsReq 16
+#define sz_xGetDeviceMotionEventsReply 32
+#define sz_xChangeKeyboardDeviceReq 8
+#define sz_xChangeKeyboardDeviceReply 32
+#define sz_xChangePointerDeviceReq 8
+#define sz_xChangePointerDeviceReply 32
+#define sz_xGrabDeviceReq 20
+#define sz_xGrabDeviceReply 32
+#define sz_xUngrabDeviceReq 12
+#define sz_xGrabDeviceKeyReq 20
+#define sz_xGrabDeviceKeyReply 32
+#define sz_xUngrabDeviceKeyReq 16
+#define sz_xGrabDeviceButtonReq 20
+#define sz_xGrabDeviceButtonReply 32
+#define sz_xUngrabDeviceButtonReq 16
+#define sz_xAllowDeviceEventsReq 12
+#define sz_xGetDeviceFocusReq 8
+#define sz_xGetDeviceFocusReply 32
+#define sz_xSetDeviceFocusReq 16
+#define sz_xGetFeedbackControlReq 8
+#define sz_xGetFeedbackControlReply 32
+#define sz_xChangeFeedbackControlReq 12
+#define sz_xGetDeviceKeyMappingReq 8
+#define sz_xGetDeviceKeyMappingReply 32
+#define sz_xChangeDeviceKeyMappingReq 8
+#define sz_xGetDeviceModifierMappingReq 8
+#define sz_xSetDeviceModifierMappingReq 8
+#define sz_xSetDeviceModifierMappingReply 32
+#define sz_xGetDeviceButtonMappingReq 8
+#define sz_xGetDeviceButtonMappingReply 32
+#define sz_xSetDeviceButtonMappingReq 8
+#define sz_xSetDeviceButtonMappingReply 32
+#define sz_xQueryDeviceStateReq 8
+#define sz_xQueryDeviceStateReply 32
+#define sz_xSendExtensionEventReq 16
+#define sz_xDeviceBellReq 8
+#define sz_xSetDeviceValuatorsReq 8
+#define sz_xSetDeviceValuatorsReply 32
+#define sz_xGetDeviceControlReq 8
+#define sz_xGetDeviceControlReply 32
+#define sz_xChangeDeviceControlReq 8
+#define sz_xChangeDeviceControlReply 32
+
+#define INAME "XInputExtension"
+
+#define XI_KEYBOARD "KEYBOARD"
+#define XI_MOUSE "MOUSE"
+#define XI_TABLET "TABLET"
+#define XI_TOUCHSCREEN "TOUCHSCREEN"
+#define XI_TOUCHPAD "TOUCHPAD"
+#define XI_BARCODE "BARCODE"
+#define XI_BUTTONBOX "BUTTONBOX"
+#define XI_KNOB_BOX "KNOB_BOX"
+#define XI_ONE_KNOB "ONE_KNOB"
+#define XI_NINE_KNOB "NINE_KNOB"
+#define XI_TRACKBALL "TRACKBALL"
+#define XI_QUADRATURE "QUADRATURE"
+#define XI_ID_MODULE "ID_MODULE"
+#define XI_SPACEBALL "SPACEBALL"
+#define XI_DATAGLOVE "DATAGLOVE"
+#define XI_EYETRACKER "EYETRACKER"
+#define XI_CURSORKEYS "CURSORKEYS"
+#define XI_FOOTMOUSE "FOOTMOUSE"
+
+#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 XI_Absent 0
+#define XI_Present 1
+
+#define XI_Initial_Release_Major 1
+#define XI_Initial_Release_Minor 0
+
+#define XI_Add_XDeviceBell_Major 1
+#define XI_Add_XDeviceBell_Minor 1
+
+#define XI_Add_XSetDeviceValuators_Major 1
+#define XI_Add_XSetDeviceValuators_Minor 2
+
+#define XI_Add_XChangeDeviceControl_Major 1
+#define XI_Add_XChangeDeviceControl_Minor 3
+
+#define DEVICE_RESOLUTION 1
+
+#define NoSuchExtension 1
+
+#define COUNT 0
+#define CREATE 1
+
+#define NewPointer 0
+#define NewKeyboard 1
+
+#define XPOINTER 0
+#define XKEYBOARD 1
+
+#define UseXKeyboard 0xFF
+
+#define IsXPointer 0
+#define IsXKeyboard 1
+#define IsXExtensionDevice 2
+
+#define AsyncThisDevice 0
+#define SyncThisDevice 1
+#define ReplayThisDevice 2
+#define AsyncOtherDevices 3
+#define AsyncAll 4
+#define SyncAll 5
+
+#define FollowKeyboard 3
+#define RevertToFollowKeyboard 3
+
+#define DvAccelNum (1L << 0)
+#define DvAccelDenom (1L << 1)
+#define DvThreshold (1L << 2)
+
+#define DvKeyClickPercent (1L<<0)
+#define DvPercent (1L<<1)
+#define DvPitch (1L<<2)
+#define DvDuration (1L<<3)
+#define DvLed (1L<<4)
+#define DvLedMode (1L<<5)
+#define DvKey (1L<<6)
+#define DvAutoRepeatMode (1L<<7)
+
+#define DvString (1L << 0)
+
+#define DvInteger (1L << 0)
+
+#define DeviceMode (1L << 0)
+#define Relative 0
+#define Absolute 1
+
+#define ProximityState (1L << 1)
+#define InProximity (0L << 1)
+#define OutOfProximity (1L << 1)
+
+#define AddToList 0
+#define DeleteFromList 1
+
+#define KeyClass 0
+#define ButtonClass 1
+#define ValuatorClass 2
+#define FeedbackClass 3
+#define ProximityClass 4
+#define FocusClass 5
+#define OtherClass 6
+
+#define KbdFeedbackClass 0
+#define PtrFeedbackClass 1
+#define StringFeedbackClass 2
+#define IntegerFeedbackClass 3
+#define LedFeedbackClass 4
+#define BellFeedbackClass 5
+
+#define _devicePointerMotionHint 0
+#define _deviceButton1Motion 1
+#define _deviceButton2Motion 2
+#define _deviceButton3Motion 3
+#define _deviceButton4Motion 4
+#define _deviceButton5Motion 5
+#define _deviceButtonMotion 6
+#define _deviceButtonGrab 7
+#define _deviceOwnerGrabButton 8
+#define _noExtensionEvent 9
+
+#define XI_BadDevice 0
+#define XI_BadEvent 1
+#define XI_BadMode 2
+#define XI_DeviceBusy 3
+#define XI_BadClass 4
+
+typedef unsigned long XEventClass;
+
+/*******************************************************************
+ *
+ * Extension version structure.
+ *
+ */
+
+typedef struct {
+ int present;
+ short major_version;
+ short minor_version;
+} XExtensionVersion;
+
+#endif /* _XI_H_ */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--- libxi-1.7.10.orig/.pc/applied-patches
+++ libxi-1.7.10/.pc/applied-patches
@@ -0,0 +1 @@
+0001-Documentation-Ids.patch
--- libxi-1.7.10.orig/ChangeLog
+++ libxi-1.7.10/ChangeLog
@@ -109,56 +109,6 @@
Signed-off-by: Peter Hutterer
Reviewed-by: Emil Velikov
-commit b87c312590877800b4e18a17a012b47839f5c06b
-Author: Peter Hutterer
-Date: Mon Jan 23 13:44:58 2017 +1000
-
- libXi 1.7.9
-
- Signed-off-by: Peter Hutterer
-
-commit 557b60798a9da49386f1034b133838332735de22
-Author: Emilio Pozuelo Monfort
-Date: Tue Dec 27 17:24:10 2016 +0100
-
- Fix possible free of uninitialized pointer
-
- If the _XReply() call fails, we'll try to free an uninitialized
- pointer.
-
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=849026
-
- Reported-by: Thomas Walker
- Signed-off-by: Emilio Pozuelo Monfort
- Reviewed-by: Julien Cristau
- Tested-by: Thomas Walker
- Signed-off-by: Julien Cristau
-
-commit 4c5c8d6246debc06a56120cff71bfdf1877884d0
-Author: Emilio Pozuelo Monfort
-Date: Tue Oct 25 21:31:19 2016 +0200
-
- Check that allocating a buffer succeeded
-
- Since we are going to write into the buffer, we should make sure the
- allocation didn't fail.
-
- Reported-by: Julien Cristau
- Signed-off-by: Emilio Pozuelo Monfort
- Signed-off-by: Peter Hutterer
-
-commit 7ac03c6c1907a39b5b42b17ad331295b8c85154d
-Author: Emilio Pozuelo Monfort
-Date: Tue Oct 25 21:31:18 2016 +0200
-
- Plug a memory leak
-
- Introduced in commit 19a9cd6.
-
- Reported-by: Julien Cristau
- Signed-off-by: Emilio Pozuelo Monfort
- Signed-off-by: Peter Hutterer
-
commit 1bdeb431c3cc9eec7e12fdd29a83237f2f228865
Author: Peter Hutterer
Date: Tue Oct 25 12:43:44 2016 +1000
@@ -1199,7 +1149,7 @@
Merge branch 'multitouch'
Conflicts:
- configure.ac
+ configure.ac
commit 82a631263ef4e6f46c1f33748089db8bf603b095
Author: Peter Hutterer
@@ -1404,7 +1354,7 @@
Merge branch 'smooth-scrolling'
Conflicts:
- src/XExtInt.c
+ src/XExtInt.c
commit 3ed1b463205295a5ebba7d570a4cb8dfade51a38
Author: Peter Hutterer
@@ -3220,7 +3170,7 @@
Merge branch 'master' into xi2
Conflicts:
- man/XI.xml
+ man/XI.xml
commit 8ea9ebcedcb99480a5774c7755329a2ca8fda07b
Author: Benjamin Close
@@ -4058,16 +4008,16 @@
src/XExtInt.c:xinput_extension_hooks field event_to_wire of type
XExtensionHooks that has the prototype Status (*event_to_wire)(
- Display* /* display */,
- XEvent* /* re */,
- xEvent* /* event */
+ Display* /* display */,
+ XEvent* /* re */,
+ xEvent* /* event */
);
does not match Status
_XiEventToWire(
- register Display *dpy, /* pointer to display structure */
- register XEvent *re, /* pointer to client event */
- register xEvent **event, /* wire protocol event */
- register int *count);
+ register Display *dpy, /* pointer to display structure */
+ register XEvent *re, /* pointer to client event */
+ register xEvent **event, /* wire protocol event */
+ register int *count);
Signed-off-by: Peter Hutterer
@@ -4086,9 +4036,9 @@
Conflicts:
- .gitignore
- man/XGrabDeviceKey.man
- man/XListInputDevices.man
+ .gitignore
+ man/XGrabDeviceKey.man
+ man/XListInputDevices.man
commit 7d0977bc02ce4f29c0ed335fcdcce4ed7c328259
Author: Peter Hutterer
--- libxi-1.7.10.orig/autogen.sh
+++ libxi-1.7.10/autogen.sh
@@ -0,0 +1,14 @@
+#! /bin/sh
+
+srcdir=`dirname $0`
+test -z "$srcdir" && srcdir=.
+
+ORIGDIR=`pwd`
+cd $srcdir
+
+autoreconf -v --install || exit 1
+cd $ORIGDIR || exit $?
+
+if test -z "$NOCONFIGURE"; then
+ $srcdir/configure "$@"
+fi
--- libxi-1.7.10.orig/debian/README.source
+++ libxi-1.7.10/debian/README.source
@@ -0,0 +1,49 @@
+------------------------------------------------------
+Quick Guide To Patching This Package For The Impatient
+------------------------------------------------------
+
+1. Make sure you have quilt installed
+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"
+ (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
+debian/patches and add the name of the patch to debian/patches/series.
+
+------------------------------------
+Guide To The X Strike Force Packages
+------------------------------------
+
+The X Strike Force team maintains X packages in git repositories on
+git.debian.org in the pkg-xorg subdirectory. Most upstream packages
+are actually maintained in git repositories as well, so they often
+just need to be pulled into git.debian.org in a "upstream-*" branch.
+Otherwise, the upstream sources are manually installed in the Debian
+git repository.
+
+The .orig.tar.gz upstream source file could be generated this
+"upstream-*" branch in the Debian git repository but it is actually
+copied from upstream tarballs directly.
+
+Due to X.org being highly modular, packaging all X.org applications
+as their own independent packages would have created too many Debian
+packages. For this reason, some X.org applications have been grouped
+into larger packages: xutils, xutils-dev, x11-apps, x11-session-utils,
+x11-utils, x11-xfs-utils, x11-xkb-utils, x11-xserver-utils.
+Most packages, including the X.org server itself and all libraries
+and drivers are, however maintained independently.
+
+The Debian packaging is added by creating the "debian-*" git branch
+which contains the aforementioned "upstream-*" branch plus the debian/
+repository files.
+When a patch has to be applied to the Debian package, two solutions
+are involved:
+* If the patch is available in one of the upstream branches, it
+ may be git'cherry-picked into the Debian repository. In this
+ case, it appears directly in the .diff.gz.
+* Otherwise, the patch is added to debian/patches/ which is managed
+ with quilt as documented in /usr/share/doc/quilt/README.source.
--- libxi-1.7.10.orig/debian/changelog
+++ libxi-1.7.10/debian/changelog
@@ -0,0 +1,506 @@
+libxi (2:1.7.10-0ubuntu1) eoan; urgency=medium
+
+ * New upstream version
+
+ -- Sebastien Bacher Sat, 24 Aug 2019 17:24:06 +0300
+
+libxi (2:1.7.9-1) unstable; urgency=medium
+
+ * New upstream release.
+
+ -- Emilio Pozuelo Monfort Mon, 23 Jan 2017 21:22:47 +0100
+
+libxi (2:1.7.8-2) unstable; urgency=medium
+
+ * Cherry-pick upstream commit 557b6079, don't free an uninitialized
+ buffer. Closes: #849026.
+
+ -- Emilio Pozuelo Monfort Thu, 29 Dec 2016 11:22:29 +0100
+
+libxi (2:1.7.8-1) unstable; urgency=medium
+
+ [ Andreas Boll ]
+ * New upstream release.
+ - Fixes CVE-2016-7945 and CVE-2016-7946 (Closes: #840440).
+ * Update d/upstream/signing-key.asc with Matthieu Herrb's key.
+ * Update a bunch of URLs in packaging to https.
+ * Bump Standards-Version to 3.9.8, no changes needed.
+
+ [ Emilio Pozuelo Monfort ]
+ * Acknowledge 2:1.7.6-1.1 NMU.
+ * Cherry-pick upstream commit 7ac03c6c to plug a memory leak in the
+ security fix.
+ * Cherry-pick upstream commit 4c5c8d62, check a buffer was allocated
+ before writing to it.
+ * Bump debhelper compat to 10.
+ + debhelper now calls dh-autoreconf automatically.
+ + debhelper now enables --parallel by default.
+ * Switch to -dbgsym packages.
+ * debhelper passes --disable-silent-rules to configure for us.
+ * Drop explicit build target. dh $@ can handle it.
+
+ -- Emilio Pozuelo Monfort Tue, 06 Dec 2016 00:50:24 +0100
+
+libxi (2:1.7.6-1.1) unstable; urgency=medium
+
+ * Non-maintainer upload.
+ * Mark libxi-dev as Multi-Arch: same. Closes: #689068.
+ * Explicitly specify documentation's anchor ids instead of generating
+ non-reproducible ones during the build (Francois Gouget).
+
+ -- Matthias Klose Thu, 03 Nov 2016 14:52:54 +0100
+
+libxi (2:1.7.6-1) unstable; urgency=medium
+
+ * New upstream release.
+ * Remove Drew and Cyril from Uploaders.
+ * Fix package descriptions: input hotplugging has been implemented years ago
+ (closes: #782987). Thanks, Paul Wise!
+
+ -- Julien Cristau Sun, 24 Jan 2016 14:15:17 +0100
+
+libxi (2:1.7.5-1) unstable; urgency=medium
+
+ [ Andreas Boll ]
+ * New upstream release.
+ * Switch to dh with the autoreconf and quilt addons.
+ * Fix lintian error: pre-depends-directly-on-multiarch-support libxi6.
+ * Let uscan verify tarball signatures.
+ * Fix Vcs-* fields.
+ * Remove obsolete XC- prefix from Package-Type field.
+ * Add upstream url.
+ * Bump standards version to 3.9.6.
+
+ [ Julien Cristau ]
+ * Delete obsolete debian/xsfbs.
+
+ -- Julien Cristau Tue, 13 Oct 2015 12:29:20 +0200
+
+libxi (2:1.7.4-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Maarten Lankhorst Mon, 21 Jul 2014 09:57:26 +0200
+
+libxi (2:1.7.2-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Julien Cristau Mon, 12 Aug 2013 18:46:14 +0200
+
+libxi (2:1.7.1.901-1) unstable; urgency=low
+
+ * New upstream release candidate.
+
+ [ Timo Aaltonen ]
+ * control: Bump policy to 3.9.4, no changes.
+ * control: Bump x11proto-input-dev build-dep to 2.2.99.1.
+ * libxi6.symbols: Added new symbols.
+ * rules: Bump shlibs.
+ * control: Add libfixes-dev to build-deps and libxi-dev Depends.
+
+ [ Julien Cristau ]
+ * Use dpkg-buildflags.
+ * Disable silent build rules.
+ * Bump debhelper compat level to 7.
+ * Simplify installing manpages.
+ * Fix clean rule for config.h.in.
+ * Use dh_prep instead of dh_clean -k.
+
+ -- Julien Cristau Sun, 30 Jun 2013 15:51:02 +0200
+
+libxi (2:1.6.1-1) unstable; urgency=low
+
+ [ Julien Cristau ]
+ * Don't require (fake)root for debian/rules clean.
+
+ [ Cyril Brulebois ]
+ * New upstream release.
+
+ -- Cyril Brulebois Sun, 20 May 2012 17:00:03 +0200
+
+libxi (2:1.6.0-1) unstable; urgency=low
+
+ [ Chase Douglas ]
+ * New upstream release
+ - Fix bus error on MIPS N32 (closes: #636920)
+ * Bump build deps on x11proto-input-dev
+ * Bump lintian standards version to 3.9.3
+
+ [ Julien Cristau ]
+ * Pull some more changes from upstream master:
+ - Fix wrong button label and mask copy on OS X (fixes regression in the
+ patch for bug#636920)
+ - Move version comparison into a helper function
+ - Set the RawEvent sourceid (#34240)
+ * Upload to unstable.
+
+ -- Julien Cristau Mon, 16 Apr 2012 19:32:32 +0200
+
+libxi (2:1.5.99.2-1) experimental; urgency=low
+
+ * New upstream release candidate:
+ - With XI 2.2 support, needed for multitouch.
+ * Fix changelog entry for 2:1.4.99.1-1:
+ - With XI 2.1 support, no multitouch yet.
+ * Bump x11proto-input-dev and libx11-dev build-deps.
+ * Update libxi6.symbols with new symbols and bump shlibs.
+
+ -- Cyril Brulebois Thu, 22 Dec 2011 14:19:35 +0100
+
+libxi (2:1.5.0-1) experimental; urgency=low
+
+ * New upstream release.
+
+ -- Cyril Brulebois Wed, 21 Dec 2011 10:12:07 +0100
+
+libxi (2:1.4.99.1-1) experimental; urgency=low
+
+ * New upstream release candidate:
+ - With XI 2.1 support.
+ * Update build dependencies accordingly:
+ - Bump xutils-dev, x11proto-input-dev, xorg-sgml-doctools.
+ - Add xsltproc.
+ * Update libxi-dev.install: specs/ and docs/ have been merged.
+ * Don't install *.db yet.
+ * Add -c4 to dh_makeshlibs.
+
+ -- Cyril Brulebois Thu, 15 Dec 2011 15:05:46 +0100
+
+libxi (2:1.4.3-3) unstable; urgency=low
+
+ * Team upload.
+ * Don't ship debug symbols for the udeb in libxi6-dbg.
+ * Add build-{arch,indep} debian/rules targets.
+
+ -- Julien Cristau Sun, 12 Jun 2011 00:20:23 +0200
+
+libxi (2:1.4.3-2) unstable; urgency=low
+
+ * Team upload.
+
+ [ Steve Langasek ]
+ * Build for multiarch.
+
+ [ Julien Cristau ]
+ * Remove David Nusinow from Uploaders.
+
+ -- Julien Cristau Sat, 11 Jun 2011 16:14:32 +0200
+
+libxi (2:1.4.3-1) unstable; urgency=low
+
+ * New upstream release.
+ * Add a comment to the series file so that it isn't eaten by
+ dpkg-source.
+ * Bump Standards-Version (no changes).
+
+ -- Cyril Brulebois Thu, 09 Jun 2011 12:08:59 +0200
+
+libxi (2:1.4.2-1) unstable; urgency=low
+
+ [ Julien Cristau ]
+ * Bump Standards-Version to 3.9.1 (no changes).
+
+ [ Cyril Brulebois ]
+ * New upstream release.
+
+ -- Cyril Brulebois Sun, 27 Mar 2011 06:36:41 +0200
+
+libxi (2:1.4.1-1) unstable; urgency=low
+
+ * New upstream release.
+ * Use xorg-sgml-doctool's copy of xorg.css.
+ * Upload to unstable.
+
+ -- Julien Cristau Tue, 08 Feb 2011 00:04:32 +0100
+
+libxi (2:1.4.0-1) experimental; urgency=low
+
+ * New upstream release.
+ * Update debian/copyright from upstream COPYING.
+ * Bump xutils-dev build-dep for new macros.
+ * Pass --with-xmlto and --without-fop to configure.
+ * Add xmlto, xorg-sgml-doctools, and w3m build-dep accordingly.
+ * Switch dh_install from --list-missing to --fail-missing for added
+ safety.
+ * Get rid of *.xml files before running dh_install.
+ * Ship *.html, *.txt, *.css in libxi-dev.
+
+ -- Cyril Brulebois Fri, 14 Jan 2011 06:22:37 +0100
+
+libxi (2:1.3-6) unstable; urgency=medium
+
+ * WireToEvent: Set display member of all events as well (cherry-pick from
+ upstream).
+
+ -- Julien Cristau Fri, 17 Dec 2010 17:00:44 +0100
+
+libxi (2:1.3-5) unstable; urgency=low
+
+ * Cherry-picked fixes from upstream:
+ - man: fix types for XGetSelectedExtensionEvents
+ - Initialize extension with the right number of events (obsoletes our
+ quilt patch)
+ - Don't unlock the Display twice
+ - Fix usage of uninitialized value
+ - Fix memory leak in XIGetSelectedEvents
+ - Always unlock display correctly
+ - man: improve readability of XAllowDeviceEvents
+ - man: fix typo in XIQueryDevice doc (closes: #598964)
+ - Fix typo when converting raw events from the wire
+ - man: XGetDeviceProperty(3) has no parameter 'pending'
+
+ -- Julien Cristau Thu, 18 Nov 2010 17:31:04 +0100
+
+libxi (2:1.3-4) unstable; urgency=low
+
+ * Add udeb needed for the graphical installer: libxi6-udeb.
+ * Version/Bump some B-D to make sure the udeb gets its dependencies on
+ the (recently-added) udebs rather than on the libraries:
+ - libx11-dev
+ - libxext-dev
+ * Add myself to Uploaders.
+
+ -- Cyril Brulebois Thu, 11 Mar 2010 22:49:49 +0100
+
+libxi (2:1.3-3) unstable; urgency=low
+
+ [ Julien Cristau ]
+ * Rename the build directory to not include DEB_BUILD_GNU_TYPE for no
+ good reason. Thanks, Colin Watson!
+ * Remove myself from Uploaders
+ * Update patch from 2:1.3-2 to not crash if an app (like, say, anything
+ using Qt3) calls libXi functions but the extension isn't available
+ (closes: #568323). Thanks, Roman Mamedov!
+
+ [ Brice Goglin ]
+ * Remove Jamey Sharp and Josh Triplett from Uploaders, closes: #568276.
+
+ [ Cyril Brulebois ]
+ * Bump Standards-Version from 3.8.3 to 3.8.4 (no changes needed).
+ * Upload to unstable.
+
+ -- Cyril Brulebois Wed, 03 Mar 2010 22:14:43 +0100
+
+libxi (2:1.3-2) unstable; urgency=low
+
+ * Initialize extension with the right number of events. This should fix
+ issues when libXi announces more events than the X server will actually
+ send for that extension, and thus smashes Xlib's event vector (closes:
+ #515734, #515946). Patch by Peter Hutterer, analysis by Nathan Kidd.
+ * Upload to unstable.
+
+ -- Julien Cristau Wed, 06 Jan 2010 16:23:44 +0000
+
+libxi (2:1.3-1) experimental; urgency=low
+
+ * Bump Standards-Version to 3.8.3.
+ * Add build-deps on xmlto and asciidoc to build the manpages.
+ * New upstream release.
+
+ -- Julien Cristau Sat, 21 Nov 2009 18:39:28 +0100
+
+libxi (2:1.2.99.4-1) experimental; urgency=low
+
+ [ Timo Aaltonen ]
+ * Add README.source from xsfbs. Bump Standards-Version to 3.8.1.
+
+ [ Julien Cristau ]
+ * Move libxi6-dbg to section 'debug'.
+ * Drop libxi-dev pre-dependency on x11-common, only needed for upgrades from
+ sarge.
+ * New upstream release candidate.
+ * XInput.h moved here from x11proto-input-dev; add Replaces.
+ * Also remove config.h.in in clean.
+ * Bump shlibs and update symbols.
+
+ -- Julien Cristau Tue, 29 Sep 2009 14:24:21 +0200
+
+libxi (2:1.2.1-2) unstable; urgency=low
+
+ * Fix typo in debian/rules, which made us build with make -j if
+ DEB_BUILD_OPTIONS didn't ask for it. Thanks to Samuel Thibault for
+ reporting the problem!
+
+ -- Julien Cristau Mon, 16 Mar 2009 15:27:45 +0100
+
+libxi (2:1.2.1-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Julien Cristau Thu, 12 Mar 2009 16:00:29 +0100
+
+libxi (2:1.2.0-2) unstable; urgency=low
+
+ * Add symbols file.
+ * Upload to unstable.
+
+ -- Julien Cristau Mon, 16 Feb 2009 19:53:01 +0100
+
+libxi (2:1.2.0-1) experimental; urgency=low
+
+ [ Timo Aaltonen ]
+ * New upstream release.
+ * debian/control:
+ - Bump x11proto-input-dev build-dep to 1.5.
+ * debian/rules:
+ - Bump the shlibs for libxi6.
+
+ [ Julien Cristau ]
+ * Drop -1 debian revisions from build-deps.
+ * Bump Standards-Version to 3.7.3.
+ * Drop the XS- prefix from Vcs-* control fields.
+ * libxi6{,-dbg} don't need to depend on x11-common.
+ * Wrap build-deps in debian/control.
+ * Build-depend on automake and libtool, run autoreconf on build, and allow
+ parallel builds.
+ * Bump libxi-dev's dependency on x11proto-input-dev to 1.5 as well.
+
+ [ Brice Goglin ]
+ * Add a link to www.X.org in the long description.
+
+ -- Julien Cristau Fri, 19 Dec 2008 15:55:22 +0100
+
+libxi (2:1.1.4-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Julien Cristau Mon, 17 Nov 2008 03:16:48 +0100
+
+libxi (2:1.1.3-1) unstable; urgency=low
+
+ * Add upstream URL to debian/copyright.
+ * New upstream release.
+
+ -- Julien Cristau Thu, 06 Sep 2007 01:45:30 +0200
+
+libxi (2:1.1.2-1) unstable; urgency=low
+
+ * New upstream release
+ + fixes locking bugs (closes: #429147).
+ * Add myself to Uploaders and remove Branden and Fabio with their
+ permission.
+ * Use ${binary:Version} instead of ${Source-Version}.
+ * Add a XS-Vcs-Browser header.
+
+ -- Julien Cristau Wed, 01 Aug 2007 05:07:05 +0200
+
+libxi (2:1.1.1-1) unstable; urgency=low
+
+ * New upstream release.
+
+ -- Julien Cristau Fri, 06 Jul 2007 03:52:46 +0200
+
+libxi (2:1.1.0-2) experimental; urgency=low
+
+ * Pull fixes from upstream git.
+ + remove patch 00_upstream_002_XiCheckExtInit_unlockdisplay.diff applied
+ upstream.
+ * Bump epoch to 2 so ubuntu can sync this package.
+
+ -- Julien Cristau Mon, 5 Mar 2007 17:24:20 +0100
+
+libxi (1:1.1.0-1) experimental; urgency=low
+
+ * Adjust Section values to what the override says.
+ * Update location of upstream repository from CVS to git in the long
+ descriptions.
+ * New upstream release.
+ + Drop patches applied upstream
+ + Bump build-dependency on x11proto-input-dev to >= 1.4.
+ * Install the upstream changelog.
+ * Add XS-Vcs-Git header in debian/control.
+
+ -- Julien Cristau Fri, 9 Feb 2007 12:34:51 +0100
+
+libxi (1:1.0.1-4) unstable; urgency=low
+
+ * libXi: Various Display locking correctness issues (Closes: #400442)
+ * Add Josh and myself to Uploaders.
+
+ -- Jamey Sharp Mon, 27 Nov 2006 15:07:34 -0800
+
+libxi (1:1.0.1-3) unstable; urgency=low
+
+ * Bring X11R7.1 into unstable. Still closes #377204.
+ * dbg package has priority extra.
+
+ -- Drew Parsons Sat, 26 Aug 2006 20:46:35 +1000
+
+libxi (1:1.0.1-2) experimental; urgency=low
+
+ * Patch 10_manpage_section.diff sets the man page section according
+ to the definition given by xutils macros. Set Build-Depends:
+ xutils-dev to prove the point. Install man pages using
+ dh_installman. Closes: #377204.
+
+ -- Drew Parsons Fri, 11 Aug 2006 15:03:27 +1000
+
+libxi (1:1.0.1-1) experimental; urgency=low
+
+ * New upstream version (X11R7.1).
+ - applies patch 01_manpage_location.diff.
+ * libxi provides no header files, so don't try to install usr/include/X11/*
+ * Exclude .la from dh_install.
+
+ -- Drew Parsons Thu, 10 Aug 2006 03:00:53 +1000
+
+libxi (1:1.0.0-6) UNRELEASED; urgency=low
+
+ * Test for obj-$(DEB_BUILD_GNU_TYPE) before creating it during build;
+ idempotency fix.
+ * Run dh_install w/ --list-missing.
+ * Drop duplicate x11-common dep in -dev package.
+ * Bump standards version to 3.7.2.0.
+ * Version x11-common pre-dep in -dev package to 1:7.0.0 to match
+ the rest of Debian.
+ * Bump debhelper compat to 5.
+ * Fix dh_strip call to skip the -dbg package.
+
+ -- Andres Salomon Mon, 17 Jul 2006 01:21:03 -0400
+
+libxi (1:1.0.0-5) unstable; urgency=low
+
+ * Reorder makeshlib command in rules file so that ldconfig is run
+ properly. Thanks Drew Parsons and Steve Langasek.
+ * Add quilt to build-depends
+
+ -- David Nusinow Wed, 19 Apr 2006 00:36:48 -0400
+
+libxi (1:1.0.0-4) unstable; urgency=low
+
+ * Remove references to xss in -dev and -dbg package descriptions. Thanks
+ Josh Triplett. (closes: #362059)
+
+ -- David Nusinow Tue, 11 Apr 2006 20:26:26 -0400
+
+libxi (1:1.0.0-3) unstable; urgency=low
+
+ * Upload to unstable
+
+ -- David Nusinow Thu, 23 Mar 2006 22:44:42 -0500
+
+libxi (1:1.0.0-2) experimental; urgency=low
+
+ * Backport manpage location fix
+
+ -- David Nusinow Thu, 9 Mar 2006 23:22:36 -0500
+
+libxi (1:1.0.0-1) experimental; urgency=low
+
+ * First modular upload to Debian
+ * Install manpages in libxi-dev. Thanks Julien Cristau.
+
+ -- David Nusinow Thu, 29 Dec 2005 20:53:15 -0500
+
+libxi (1:1.3.0-2) breezy; urgency=low
+
+ * Bump libx11-dev and libxext-dev Build-Deps to avoid _XOPEN_SOURCE.
+
+ -- Daniel Stone Sat, 23 Jul 2005 00:28:53 +1000
+
+libxi (1:1.3.0-1) breezy; urgency=low
+
+ * First libxi release.
+
+ -- Daniel Stone Mon, 16 May 2005 22:10:17 +1000
--- libxi-1.7.10.orig/debian/compat
+++ libxi-1.7.10/debian/compat
@@ -0,0 +1 @@
+10
--- libxi-1.7.10.orig/debian/control
+++ libxi-1.7.10/debian/control
@@ -0,0 +1,86 @@
+Source: libxi
+Section: x11
+Priority: optional
+Maintainer: Ubuntu Developers
+XSBC-Original-Maintainer: Debian X Strike Force
+Build-Depends:
+ debhelper (>= 10),
+ quilt,
+ x11proto-core-dev (>= 7.0.13),
+ x11proto-xext-dev (>= 7.0.3),
+ x11proto-input-dev (>= 2.2.99.1),
+ libx11-dev (>= 2:1.4.99.1),
+ libxext-dev (>= 2:1.1.1-3),
+ libxfixes-dev (>= 5),
+ xmlto,
+ asciidoc (>= 8.4.5),
+ pkg-config,
+ quilt,
+ xutils-dev (>= 1:7.6+2),
+# specs
+ xmlto,
+ xorg-sgml-doctools (>= 1:1.8),
+ xsltproc,
+ w3m,
+Standards-Version: 3.9.8
+Vcs-Git: https://anonscm.debian.org/git/pkg-xorg/lib/libxi.git
+Vcs-Browser: https://anonscm.debian.org/cgit/pkg-xorg/lib/libxi.git
+Homepage: https://www.x.org/
+
+Package: libxi6
+Section: libs
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
+Description: X11 Input extension library
+ libXi provides an X Window System client interface to the XINPUT
+ extension to the X protocol.
+ .
+ The Input extension allows setup and configuration of multiple input devices,
+ and hotplugging of input devices (to be added and removed on the fly).
+ .
+ More information about X.Org can be found at:
+
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXi
+
+Package: libxi6-udeb
+Package-Type: udeb
+Section: debian-installer
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: X11 Input extension library
+ This is a udeb, or a microdeb, for the debian-installer.
+
+Package: libxi-dev
+Section: libdevel
+Architecture: any
+Multi-Arch: same
+Depends:
+ ${shlibs:Depends},
+ ${misc:Depends},
+ libxi6 (= ${binary:Version}),
+ libx11-dev,
+ libxext-dev,
+ libxfixes-dev,
+ x11proto-input-dev (>= 2.1.99.6),
+ xorg-sgml-doctools (>= 1:1.5),
+Replaces:
+ x11proto-input-dev (<< 1.9.99)
+Description: X11 Input extension library (development headers)
+ libXi provides an X Window System client interface to the XINPUT
+ extension to the X protocol.
+ .
+ The Input extension allows setup and configuration of multiple input devices,
+ and hotplugging of input devices (to be added and removed on the fly).
+ .
+ This package contains the development headers for the library found in
+ libxi6. Non-developers likely have little use for this package.
+ .
+ More information about X.Org can be found at:
+
+ .
+ This module can be found at
+ git://anongit.freedesktop.org/git/xorg/lib/libXi
--- libxi-1.7.10.orig/debian/copyright
+++ libxi-1.7.10/debian/copyright
@@ -0,0 +1,87 @@
+This package was downloaded from
+https://xorg.freedesktop.org/releases/individual/lib/
+
+Copyright 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group 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 Open Group.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+EVENT SHALL HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
+USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
+
+Copyright 2008 Peter Hutterer
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of the author shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from the author.
+
+Copyright © 2009 Red Hat, Inc.
+
+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.
--- libxi-1.7.10.orig/debian/libxi-dev.install
+++ libxi-1.7.10/debian/libxi-dev.install
@@ -0,0 +1,7 @@
+usr/lib/*/libXi.a
+usr/lib/*/libXi.so
+usr/lib/*/pkgconfig/xi.pc
+usr/include/X11/extensions/
+usr/share/doc/libXi/*.html usr/share/doc/libxi-dev
+usr/share/doc/libXi/*.txt usr/share/doc/libxi-dev
+usr/share/man/man3
--- libxi-1.7.10.orig/debian/libxi6-udeb.install
+++ libxi-1.7.10/debian/libxi6-udeb.install
@@ -0,0 +1 @@
+usr/lib/*/libXi.so.6* usr/lib
--- libxi-1.7.10.orig/debian/libxi6.install
+++ libxi-1.7.10/debian/libxi6.install
@@ -0,0 +1 @@
+usr/lib/*/libXi.so.6*
--- libxi-1.7.10.orig/debian/libxi6.symbols
+++ libxi-1.7.10/debian/libxi6.symbols
@@ -0,0 +1,85 @@
+libXi.so.6 libxi6 #MINVER#
+ XAllowDeviceEvents@Base 0
+ XChangeDeviceControl@Base 0
+ XChangeDeviceDontPropagateList@Base 0
+ XChangeDeviceKeyMapping@Base 0
+ XChangeDeviceProperty@Base 2:1.2.0
+ XChangeFeedbackControl@Base 0
+ XChangeKeyboardDevice@Base 0
+ XChangePointerDevice@Base 0
+ XCloseDevice@Base 0
+ XDeleteDeviceProperty@Base 2:1.2.0
+ XDeviceBell@Base 0
+ XFreeDeviceControl@Base 0
+ XFreeDeviceList@Base 0
+ XFreeDeviceMotionEvents@Base 0
+ XFreeDeviceState@Base 0
+ XFreeFeedbackList@Base 0
+ XGetDeviceButtonMapping@Base 0
+ XGetDeviceControl@Base 0
+ XGetDeviceDontPropagateList@Base 0
+ XGetDeviceFocus@Base 0
+ XGetDeviceKeyMapping@Base 0
+ XGetDeviceModifierMapping@Base 0
+ XGetDeviceMotionEvents@Base 0
+ XGetDeviceProperty@Base 2:1.2.0
+ XGetExtensionVersion@Base 0
+ XGetFeedbackControl@Base 0
+ XGetSelectedExtensionEvents@Base 0
+ XGrabDevice@Base 0
+ XIAllowEvents@Base 2:1.2.99.4
+ XIAllowTouchEvents@Base 2:1.5.99.2
+ XIBarrierReleasePointer@Base 2:1.6.99.1
+ XIBarrierReleasePointers@Base 2:1.6.99.1
+ XIChangeHierarchy@Base 2:1.2.99.4
+ XIChangeProperty@Base 2:1.2.99.4
+ XIDefineCursor@Base 2:1.2.99.4
+ XIDeleteProperty@Base 2:1.2.99.4
+ XIFreeDeviceInfo@Base 2:1.2.99.4
+ XIGetClientPointer@Base 2:1.2.99.4
+ XIGetFocus@Base 2:1.2.99.4
+ XIGetProperty@Base 2:1.2.99.4
+ XIGetSelectedEvents@Base 2:1.2.99.4
+ XIGrabButton@Base 2:1.2.99.4
+ XIGrabDevice@Base 2:1.2.99.4
+ XIGrabEnter@Base 2:1.2.99.4
+ XIGrabFocusIn@Base 2:1.2.99.4
+ XIGrabKeycode@Base 2:1.2.99.4
+ XIGrabTouchBegin@Base 2:1.5.99.2
+ XIListProperties@Base 2:1.2.99.4
+ XIQueryDevice@Base 2:1.2.99.4
+ XIQueryPointer@Base 2:1.2.99.4
+ XIQueryVersion@Base 2:1.2.99.4
+ XISelectEvents@Base 2:1.2.99.4
+ XISetClientPointer@Base 2:1.2.99.4
+ XISetFocus@Base 2:1.2.99.4
+ XIUndefineCursor@Base 2:1.2.99.4
+ XIUngrabButton@Base 2:1.2.99.4
+ XIUngrabDevice@Base 2:1.2.99.4
+ XIUngrabEnter@Base 2:1.2.99.4
+ XIUngrabFocusIn@Base 2:1.2.99.4
+ XIUngrabKeycode@Base 2:1.2.99.4
+ XIUngrabTouchBegin@Base 2:1.5.99.2
+ XIWarpPointer@Base 2:1.2.99.4
+ XGrabDeviceButton@Base 0
+ XGrabDeviceKey@Base 0
+ XListDeviceProperties@Base 2:1.2.0
+ XListInputDevices@Base 0
+ XOpenDevice@Base 0
+ XQueryDeviceState@Base 0
+ XSelectExtensionEvent@Base 0
+ XSendExtensionEvent@Base 0
+ XSetDeviceButtonMapping@Base 0
+ XSetDeviceFocus@Base 0
+ XSetDeviceMode@Base 0
+ XSetDeviceModifierMapping@Base 0
+ XSetDeviceValuators@Base 0
+ XUngrabDevice@Base 0
+ XUngrabDeviceButton@Base 0
+ XUngrabDeviceKey@Base 0
+ _XiGetDevicePresenceNotifyEvent@Base 2:1.1.2
+ _xibadclass@Base 0
+ _xibaddevice@Base 0
+ _xibadevent@Base 0
+ _xibadmode@Base 0
+ _xidevicebusy@Base 0
--- libxi-1.7.10.orig/debian/patches/0001-Documentation-Ids.patch
+++ libxi-1.7.10/debian/patches/0001-Documentation-Ids.patch
@@ -0,0 +1,37 @@
+
+Add explicit ids to the documentation chapters and sections so they are
+identical no matter which architecture (or day or asciidoc version) the
+packages are built on. This is necessary for multi-arch compatibility.
+
+Author: Francois Gouget
+
+diff -u libXi-1.7.4.orig/specs/inputlib.xml libXi-1.7.4/specs/inputlib.xml
+--- libXi-1.7.4.orig/specs/inputlib.xml 2011-12-20 01:28:44.000000000 +0100
++++ libXi-1.7.4/specs/inputlib.xml 2015-02-10 16:22:13.817236191 +0100
+@@ -26,7 +26,7 @@
+ Ardent Computer
+
+
+-
++
+
+ 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
+@@ -36,7 +36,7 @@
+
+
+
+-
++
+
+ Copyright © 1989, 1990, 1991, 1992 X Consortium
+
+diff -u libXi-1.7.4.orig/specs/library.xml libXi-1.7.4/specs/library.xml
+--- libXi-1.7.4.orig/specs/library.xml 2011-12-20 01:28:44.000000000 +0100
++++ libXi-1.7.4/specs/library.xml 2015-02-10 16:17:31.518591542 +0100
+@@ -1,4 +1,4 @@
+-Input Extension
++Input Extension
+
+ Overview
+
--- libxi-1.7.10.orig/debian/patches/series
+++ libxi-1.7.10/debian/patches/series
@@ -0,0 +1 @@
+0001-Documentation-Ids.patch
--- libxi-1.7.10.orig/debian/rules
+++ libxi-1.7.10/debian/rules
@@ -0,0 +1,29 @@
+#!/usr/bin/make -f
+# debian/rules for the Debian libxi package.
+# Copyright © 2004 Scott James Remnant
+# Copyright © 2005 Daniel Stone
+# Copyright © 2005 David Nusinow
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# set this to the name of the main shlib's binary package
+PACKAGE = libxi6
+
+%:
+ dh $@ --with quilt --builddirectory=build/
+
+override_dh_auto_configure:
+ dh_auto_configure -- \
+ --with-xmlto \
+ --without-fop
+
+override_dh_install:
+ dh_install --fail-missing --exclude=libXi.la --exclude .db --exclude .xml
+
+override_dh_strip:
+ dh_strip -p$(PACKAGE) --dbgsym-migration="$(PACKAGE)-dbg (<< 2:1.7.8-1~)"
+ dh_strip -N$(PACKAGE)
+
+override_dh_makeshlibs:
+ dh_makeshlibs -V'libxi6 (>= 2:1.6.99.1)' --add-udeb=$(PACKAGE)-udeb -- -c4
--- libxi-1.7.10.orig/debian/upstream/signing-key.asc
+++ libxi-1.7.10/debian/upstream/signing-key.asc
@@ -0,0 +1,87 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQGiBD8b0wYRBACph9kRJmP+4+JGsCgFlFoy4vFO0DCG+jmkQN0n1wdInt/N/UtA
+sZToO72AUmfmYizA+IEbzBrx0UnUo3w3BDmHxUWf/akZiPUz9AA/YFY4xC3MY2OK
+VN2Jz6YSce4zJ5jd2ZRobHm4HuIf/8yqSCcsv7FNfrLaTNIFRs5gYYsqZwCgwmkp
+RSLRc8WAnHrTWNQDaEFM2rUEAKTjrTjMN8+KGd0BxNX7HiTSqQP++nXNwAYs1oWB
+Yt82YHj9SvRCqCzD1pzJQivYnlNoWDza1VeMnfdAvkdia8z4lYbO/RunXZJvra3Z
+VDm+izq+uwUAyvFuEYnNz09VSqwXKT6+XW0Xtz2vHq52r6DS6mK8cGJHZ5OhrRjq
+UEYxA/9STh+QfA98xtNoRcf52E/46r7IpCj440oRVc9lMfxQZrLGQNqp7sPdIhGQ
+CCo2NUII5hkhdAG71kpbfSXU4Sh32p1cU1KYCAkDFfb49bKuAs+Pff8v6FGZxTdd
+AinPZr4BbsYJatk818aTCnu0+s7L8jL5GPfeyuyEMKwzVBx2mLQpUGV0ZXIgSHV0
+dGVyZXIgKFdoby1UKSA8b2ZmaWNlQHdoby10Lm5ldD6IWQQTEQIAGQUCPxvTBgQL
+BwMCAxUCAwMWAgECHgECF4AACgkQ4jt+cLRn8L/0RACfWo3KTMUg+uPRqA6RXxk0
+4CWjXaMAoJeIxOpZLB3RBltPnSi7PyVQIkHFuQENBD8b0wgQBACTnqOYOWYVR8O1
+D73J6nbdAeZCbXrUkyXIuyqBOdKmX/0QJmSs7Wfsa+hPfDhj6ai0Gs2C8Qg/0Pzk
+86b4p9DLkf0M6RaYjUtCJBpS59xrsV6nz6xZzQa4RRdf1YJmw2tia1MMXzxbwQU2
+bKpYEm8NsGaBURMGd02EvsMN2wI2uwADBQP/e9MjVr/85XDzAlUBN8HwYW5szTyP
+8ZVcQOqOmNebkTWGLvkPrBdXmxpzrWjxPolO1WcWQjUL0bN/rbdqefT65iVHJHJZ
+/cpTtgGlCPhL5JTA50ltd0I13CABYWLFmswonXES/6tcglf4rr3Nri2sOrY5HggP
+ipEzOo5vdKOow/qIRgQYEQIABgUCPxvTCAAKCRDiO35wtGfwv68jAKCDvL2gkrg1
+4NfV7rNc057K1nL2GgCeKApWRgGVzaOkAp0P5tQulaDD6zM=
+=7uBX
+-----END PGP PUBLIC KEY BLOCK-----
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBFeKY50BEADAX0lod3IVceb/IWJn3kTAcO2P7PWlcBiyUDaq5b2kFkliKleZ
+ec4LoCHakQBlkRBMPNwOOxvADNk3tLQjBDpbYr6lQIrN+AxMGkXBhJ82T3bsDvlj
+3Z1wRJ1zVA7eMIktsk0FAoJxV1y7e3sBKcP0eTlXqXvR2djhi+FW+ueJDAJIFSkb
+uFirgwtX5t8nt8jCmIl75KNUKOakoENY3hLWtr16W8fO1JGkEhghI2mXcz664KTd
+MPZp6JH0/8UHTHzmATOCTqNxoDtMTi2l5059Lh/nhmso9moTYqyKmaJP2rnZUr62
+97sRMG4WcxaYfWpPyO3MCmDyGeh4sW0OC06PpED3i9xMzf/kMkMdY4ZIFcLRcPtf
+LIJhw+lc/GE1Rqe961IB5xCgnZezB7ZIL+ZlOAMwKGkq7lLbcZr2QZn84lpABKF0
+AvxECoJ4etmIcdbDVmsw18AhA3u9sr98hS5IXDyeos3Xwz6Abml8aPrhqhkKvo+J
+Kcq9FNYHg0RRlos0TqocjDzGnUjEYrmIopLcwIu2SnsNSJTygZGtqrpT+2sGEqvm
+k6Oyk95QCa580zqldvxe3CG0vrAfPvoG7irllM68TS4JcqqDHTq6eupUv9ZdIzXf
+eyTHa5cytGahgVtUcui1lzqcCBkqwN8TKl+0wCcEnxRasHJy3A2Gp+AG3wARAQAB
+tCJNYXR0aGlldSBIZXJyYiA8bWF0dGhpZXVAaGVycmIuZXU+iQI+BBMBAgAoBQJX
+imOdAhsDBQkDwmcABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBoc5PuN9Eo
++PF1EACldzZPNYaC9H5E9sMn9pMsJTucBYVUy74Aw6MWAiAzRpxb9DmySmC2oEYW
+JJkwDTwv6M0Na0ed6zD79GKtAalORz2GppZpS7uoINClElWoM5TCYph6linyv9Wj
+OTlcbpX0Jqw0tdHNI2UOEjvBP3vW9kVYpEhfnHET8Ncp55j1hzoqxOhGIBE/67zc
+cLAenONAvA3YN3tHTGaOaFv+vuCFRJx9FpKbGHmdUPd3MtLqtaA4EQvDvDEholEI
+eWrjmdXJibSet6Amc5AIdFaQevZiADjjMh8MINw/6OEy9OB4s+z1RzgOrHgLiIZm
+dlP6WrNjXQwl2gmNPhctGaSHM+j2+3gckNGlI4LQYxNtKvI4iv/CoHDYmwgrcrZO
+TwFHfqt0LwqjpsU203Hw609oWYcxLeGZdITBjDz20UcfsmKQDqrBq3P1FuC5GBW3
+5bEa3wAhyE+/WKhJ94bXiHmpKsp50va3bEe17uQcYd8+E8L53aR7XP87qaHx//Mu
++OQa5Wc2d1OFHf1Mi62nbzr7pws/Mf7OSf/tnhRthuwtlfYnsUVo8usUKL/xStqo
+Ul4kc/Q81AlyaZfr7dbxsQWm2q3ksLaMaAxnk0p+kMXVzXZ9GKNOgUOJdbahORs5
+RU2f44xzfNavb63u3McADtaXskl+KHB4uDbGbGESVhm5PULk37QnTWF0dGhpZXUg
+SGVycmIgPG1hdHRoaWV1LmhlcnJiQGxhYXMuZnI+iQI+BBMBAgAoBQJXlJ63AhsD
+BQkDwmcABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRBoc5PuN9Eo+PKID/wM
+II+2d11clp1X7eZgkxkAHUhI2W3NSesuFnjkkQRKQoVMokDdeSOkBhMJuWoFfbZk
+jYs2VHU9029rDqcoDSqGwo2IffvrXXJ4SjOTjlvXS1lr/H2VdWRbq8ImnDwSsoiD
+dWB3dZyqzf7ABKZ7ccA+NMSs6NxeEN/0+0sTJ386Zp480ByNX0uPqYSq5lX/VEke
+nI8r02u2ZfuykhGkT0sM013VprfYLa+6HvF+QT9KfP220mqRbonaDkYvCxwjCMzd
+rUmvyqw3VsooUpg/W/PmDNeShSuOxebaGnFyGTNvTarElCBdynFD01dqOecOqfY8
+gy+PJ1aF1qjmf+RQD/SZq+gvgyXqyBhJy7zgJnzzNWzDlUIw0ZOLyZxzFR7lRV79
+2mrGgczlQr5rLAgBy2pgwsCmP7nFx50r4ft2juugnQixoOBU/YfhBplM76EROaCc
+MTs5nPEqzJ9p4SNkPcK8AroR2Ka3+f7t+XOoHpx/XhJOBYlPaUmoFkWKr0Y8BWWh
+1nJxyFKrSNbwUgam8ypZzwzbI1vDiX8Ol6NpEeOLwzFNT0pyTdC9UN93M1VIyKWC
+1vaeMogUREKT6SmDjRn3fISktZ0IGVf2AnFMhtgZ46TJO4BZgDdZAjTkZc/lP0yF
+Nl6MpGwnaymmL50ckT77OdlfIcXFwvNPFwWlFPlcyrkCDQRXimOdARAA4otssvZm
+sKg+g0bVyJHhn/YOHLYMih+Xf07xJHyalH0UCGnGdHZwl0B97G950SwQ7yVXtGa9
+CAPe97clE6dPD6jaumQ13BHavXM+ThgjCe8V56ayYcdzqFkxlCx0Uocoa63G0/cE
+TiOqeqhNZs8JY+D7l83jCa4lU/1pLusbkCpCQ7d5/FFLz7QSihzJWp+UTsjbNik5
+spaseEMGFRKUcB3SZ/l1dTgc0wBQ1hlvLX+h4/sG0iUs1pVpo5ORC+bUfWRokl96
+uj5QZz5rY21FaNSP1rB1HKHNkwhxifBCHQMhYGTXvD7GH+JNyF2TdRmo7eBCfAPJ
+aP3mX9t2SkCipdSsUs+Uuyib9MLA71ApW90AGiRm6HtOCxR0c3+qQRNIdFVm8mnM
+hCxXRexf6Z2wZdXXy6uY0LVRgI0o31NPJPk8l2Hnb/kHGxjyUFzEWh65J/eA368d
+4m8uF+Rr7WWlpQjwgWHU12kGThEVFFBFh2gmeIjYZdDDVhCi2mQ6lGSV2Pt7pZYL
+/PPChWLBqrVBkIUQ0GV22nRYvGdaIv2LVPu8PggbPs/wwh35nJ3rUQyJF55CFV5y
+WIWAWXfRYTKG9jkt+ncjZLEBxDO26zzO/MjIVPZxGyYryXEOgr6xp38xbyX9FpjL
+KBaIueLWEyphVjBb1uUpDGx+UDYe9vbJjPUAEQEAAYkCJQQYAQIADwUCV4pjnQIb
+DAUJA8JnAAAKCRBoc5PuN9Eo+D8dEACa60Q3ta6BWyHG0SOgfYGHE15LodACVHNI
+N6Ou+JtmLarMW/AvPclNC25mxZV0ywLbun4CnJ9qYbt/Kx7djn48mrNa0rKN8Q+V
+K5RvQA1kD890yzwu5jH6r5BQ8VBcfsPvsvatgbquzFn+NNiH9U4xRf/9BSY2Zk3G
+yA15xG0T9zoklOMg8MWbeRaJPkDELyaHPWerbO7rebynePENSFPz3o3g+K9WcCM2
+xkEL571SmT4z3Mp/p0pwemWBCP2WoKCnSjAGiiHpCFru3SlZhRIvNJyK5jeS/IU6
+d5qeTBse6TXzp6Q4xkzACIN66P5SG/YY3/ONbfs6wB3lIkvVC9n7jEXjMK1T0fK8
+9DBDjzvAkJcKLLuIljjkMhRWSCED74sn+MlaWm0xMeo276EnaVILNcrHecSr8+eX
+pVXSWEJ1+ErzZladJC+CrqUm0QljPV8Smtmk9MvOLHZ4qL4bI4Hu7MywuGNrLSol
+qO0pAT1AjaYTRuH2MhZ6mJe/EtSl0EHXEkcDteE4jbYj3lwVhA1c/So0CdayImmD
+/0tdqUfekw4va8PpbQ0wroL0XUvf3wl6HOhFhahWSqqb1fVr2slVttkaMb8M4MPt
+Ka2m4qiiuGYivPIAVapSEA4DYc+krVqVXV/yDd3T7XcNtnClVo+rmOn5WiGq24am
+79+hF4bWyw==
+=WW1Z
+-----END PGP PUBLIC KEY BLOCK-----
--- libxi-1.7.10.orig/debian/watch
+++ libxi-1.7.10/debian/watch
@@ -0,0 +1,4 @@
+#git=git://anongit.freedesktop.org/xorg/lib/libXi
+version=3
+opts=pgpsigurlmangle=s/$/.sig/ \
+https://xorg.freedesktop.org/releases/individual/lib/ libXi-(.*)\.tar\.gz
--- libxi-1.7.10.orig/man/.gitignore
+++ libxi-1.7.10/man/.gitignore
@@ -0,0 +1,2 @@
+# Add & Override for this directory and it's subdirectories
+*.man
--- libxi-1.7.10.orig/specs/.gitignore
+++ libxi-1.7.10/specs/.gitignore
@@ -0,0 +1,5 @@
+*.html
+*.ps
+*.pdf
+*.txt
+*.db
--- libxi-1.7.10.orig/specs/inputlib.xml
+++ libxi-1.7.10/specs/inputlib.xml
@@ -26,7 +26,7 @@
Ardent Computer
-
+
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
@@ -36,7 +36,7 @@
-
+
Copyright © 1989, 1990, 1991, 1992 X Consortium
--- libxi-1.7.10.orig/specs/library.xml
+++ libxi-1.7.10/specs/library.xml
@@ -1,4 +1,4 @@
-Input Extension
+Input Extension
Overview