--- 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