summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaetan Nadon <memsize@videotron.ca>2010-09-09 15:39:07 -0400
committerGaetan Nadon <memsize@videotron.ca>2010-09-12 13:13:32 -0400
commit2f7229674a2da3b9d4397fe99df25f9b795eb86e (patch)
tree44f23edd7f524467d7b823852f89aca4049084de
parentb607108c265330454769f5dc6f3cef791c48bd38 (diff)
Move X Input protocol specs to lib/libXi and proto/inputproto
Following the DocBook conversion Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com> Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
-rw-r--r--Makefile.am4
-rw-r--r--specs/Xi/encoding.ms2016
-rw-r--r--specs/Xi/library.ms6313
-rw-r--r--specs/Xi/porting.ms990
-rw-r--r--specs/Xi/protocol.txt4
5 files changed, 0 insertions, 9327 deletions
diff --git a/Makefile.am b/Makefile.am
index 3014ccb..1098fd3 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -49,10 +49,6 @@ EXTRA_DIST = \
specs/Xext/lbx.mif \
specs/Xext/xtest1.info \
specs/Xext/xtest1.mm \
- specs/Xi/encoding.ms \
- specs/Xi/library.ms \
- specs/Xi/porting.ms \
- specs/Xi/protocol.txt \
specs/XKB/Proto/dflttrns.fm5 \
specs/XKB/Proto/encoding.fm5 \
specs/XKB/Proto/keysyms.fm5 \
diff --git a/specs/Xi/encoding.ms b/specs/Xi/encoding.ms
deleted file mode 100644
index f056a51..0000000
--- a/specs/Xi/encoding.ms
+++ /dev/null
@@ -1,2016 +0,0 @@
-.\" $Xorg: encoding.ms,v 1.3 2000/08/17 19:42:37 cpqbld Exp $
-\&
-.sp 1
-.XS
-Appendix A \- Input Extension Protocol Encoding
-.XE
-.ce 2
-.ps 11
-.nr PS 11
-.ps +2
-\fBAppendix A\fP
-
-\fBInput Extension Protocol Encoding\fP
-.ps
-.sp 2
-.LP
-.ps 9
-.nr PS 9
-.vs 10
-.nr VS 10
-.\"The sections in this appendix correspond to their number counterparts
-.\"in the protocol document.
-.ps +2
-\fBSyntactic Conventions\fP
-.ps -3
-.LP
-All numbers are in decimal,
-unless prefixed with #x, in which case they are in hexadecimal (base 16).
-.LP
-The general syntax used to describe requests, replies, errors, events, and
-compound types is:
-.LP
-.DS I
-\fBNameofThing\fP
- encode-form
- ...
- encode-form
-.DE
-Each encode-form describes a single component.
-.LP
-For components described in the protocol as:
-.LP
-.DS I
-name: TYPE
-.DE
-the encode-form is:
-.LP
-.DS I
-.TA 1i 1.5i 2.5i
-.ta 1i 1.5i 2.5i
-N TYPE name
-.DE
-N is the number of bytes occupied in the data stream,
-and TYPE is the interpretation of those bytes.
-For example,
-.LP
-.DS I
-.TA 1i 1.5i
-.ta 1i 1.5i
-depth: CARD8
-.DE
-becomes:
-.LP
-.DS I
-.TA 1i 1.5i 2.5i
-.ta 1i 1.5i 2.5i
-1 CARD8 depth
-.DE
-For components with a static numeric value the encode-form is:
-.LP
-.DS I
-.TA 1i 1.5i 2.5i
-.ta 1i 1.5i 2.5i
-N value name
-.DE
-The value is always interpreted as an N-byte unsigned integer.
-For example,
-the first two bytes of a Window error are always zero (indicating an
-error in general) and three (indicating the Window error in particular):
-.LP
-.DS I
-.TA 1i 1.5i 2.5i
-.ta 1i 1.5i 2.5i
-1 0 Error
-1 3 code
-.DE
-For components described in the protocol as:
-.LP
-.DS I
-name: \fB{Name1, ..., NameI}\fP
-.DE
-.LP
-the encode-form is:
-.LP
-.DS I
-.TA 1i 1.5i 2.5i
-.ta 1i 1.5i 2.5i
-N name
- value1 Name1
- ...
- valueI NameI
-.DE
-The value is always interpreted as an N-byte unsigned integer.
-Note that the size of N is sometimes larger than that strictly required
-to encode the values.
-For example:
-.LP
-.DS I
-class: \fB{InputOutput, InputOnly, CopyFromParent}\fP
-.DE
-.LP
-becomes:
-.LP
-.DS I
-.TA 1i 1.5i 2.5i 3i
-.ta 1i 1.5i 2.5i 3i
-2 class
- 0 CopyFromParent
- 1 InputOutput
- 2 InputOnly
-.DE
-For components described in the protocol as:
-.LP
-.DS I
-NAME: TYPE or \fBAlternative1 ... or AlternativeI\fP
-.DE
-.LP
-the encode-form is:
-.LP
-.DS I
-.TA 1i 1.5i 2i 2.5i 3i
-.ta 1i 1.5i 2i 2.5i 3i
-N TYPE NAME
- value1 Alternative1
- ...
- valueI AlternativeI
-.DE
-The alternative values are guaranteed not to conflict with the encoding
-of TYPE.
-For example:
-.LP
-.DS
-destination: WINDOW or \fBPointerWindow\fP or \fBInputFocus\fP
-.DE
-.LP
-becomes:
-.LP
-.DS I
-.TA 1i 1.5i 2.5i
-.ta 1i 1.5i 2.5i
-4 WINDOW destination
- 0 PointerWindow
- 1 InputFocus
-.DE
-For components described in the protocol as:
-.LP
-.DS I
-.TA 1i 1.5i
-.ta 1i 1.5i
-value-mask: BITMASK
-.DE
-the encode-form is:
-.LP
-.DS I
-.TA 1i 1.5i 2i 2.5i
-.ta 1i 1.5i 2i 2.5i
-N BITMASK value-mask
- mask1 mask-name1
- ...
- maskI mask-nameI
-.DE
-The individual bits in the mask are specified and named,
-and N is 2 or 4.
-The most-significant bit in a BITMASK is reserved for use in defining
-chained (multiword) bitmasks, as extensions augment existing core requests.
-The precise interpretation of this bit is not yet defined here,
-although a probable mechanism is that a 1-bit indicates that another N bytes
-of bitmask follows, with bits within the overall mask still interpreted
-from least-significant to most-significant with an N-byte unit, with N-byte units
-interpreted in stream order, and with the overall mask being byte-swapped
-in individual N-byte units.
-.LP
-For LISTofVALUE encodings, the request is followed by a section of the form:
-.LP
-.DS I
-.TA 1i 1.5i
-.ta 1i 1.5i
-VALUEs
- encode-form
- ...
- encode-form
-.DE
-listing an encode-form for each VALUE.
-The NAME in each encode-form keys to the corresponding BITMASK bit.
-The encoding of a VALUE always occupies four bytes,
-but the number of bytes specified in the encoding-form indicates how
-many of the least-significant bytes are actually used;
-the remaining bytes are unused and their values do not matter.
-.LP
-In various cases, the number of bytes occupied by a component will be specified
-by a lowercase single-letter variable name instead of a specific numeric
-value, and often some other component will have its value specified as a
-simple numeric expression involving these variables.
-Components specified with such expressions are always interpreted
-as unsigned integers.
-The scope of such variables is always just the enclosing request, reply,
-error, event, or compound type structure.
-For example:
-.LP
-.DS I
-.TA 1i 1.5i 2i 2.5i
-.ta 1i 1.5i 2i 2.5i
-2 3+n request length
-4n LISTofPOINT points
-.DE
-For unused bytes (the values of the bytes are undefined and do not matter),
-the encode-form is:
-.LP
-.DS I
-.TA 1i 1.5i 2i 2.5i
-.ta 1i 1.5i 2i 2.5i
-N unused
-.DE
-If the number of unused bytes is variable, the encode-form typically is:
-.LP
-.DS I
-.TA 1i 1.5i 2i 2.5i
-.ta 1i 1.5i 2i 2.5i
-p unused, p=pad(E)
-.DE
-where E is some expression,
-and pad(E) is the number of bytes needed to round E up to a multiple of four.
-.LP
-.DS I
-.TA 1i 1.5i 2i 2.5i
-.ta 1i 1.5i 2i 2.5i
-pad(E) = (4 - (E mod 4)) mod 4
-.DE
-.ps +2
-\fBCommon Types\fP
-.ps
-.LP
-LISTofFOO
-.IP
-In this document the LISTof notation strictly means some number of repetitions
-of the FOO encoding;
-the actual length of the list is encoded elsewhere.
-.LP
-SETofFOO
-.IP
-A set is always represented by a bitmask, with a 1-bit indicating presence in
-the set.
-.LP
-BITMASK: CARD32
-.LP
-WINDOW: CARD32
-.LP
-BYTE: 8-bit value
-.LP
-INT8: 8-bit signed integer
-.LP
-INT16: 16-bit signed integer
-.LP
-INT32: 32-bit signed integer
-.LP
-CARD8: 8-bit unsigned integer
-.LP
-CARD16: 16-bit unsigned integer
-.LP
-CARD32: 32-bit unsigned integer
-.LP
-TIMESTAMP: CARD32
-.LP
-EVENTCLASS: CARD32
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-INPUTCLASS
- 0 KeyClass
- 1 ButtonClass
- 2 ValuatorClass
- 3 FeedbackClass
- 4 ProximityClass
- 5 FocusClass
- 6 OtherClass
-.DE
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-INPUTCLASS
- 0 KbdFeedbackClass
- 1 PtrFeedbackClass
- 2 StringFeedbackClass
- 3 IntegerFeedbackClass
- 4 LedFeedbackClass
- 5 BellFeedbackClass
-.DE
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-INPUTINFO
- 0 KEYINFO
- 1 BUTTONINFO
- 2 VALUATORINFO
-.DE
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-DEVICEMODE
- 0 Relative
- 1 Absolute
-.DE
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-PROXIMITYSTATE
- 0 InProximity
- 1 OutOfProximity
-.DE
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-BOOL
- 0 False
- 1 True
-.DE
-.LP
-KEYSYM: CARD32
-.LP
-KEYCODE: CARD8
-.LP
-BUTTON: CARD8
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-SETofKEYBUTMASK
- #x0001 Shift
- #x0002 Lock
- #x0004 Control
- #x0008 Mod1
- #x0010 Mod2
- #x0020 Mod3
- #x0040 Mod4
- #x0080 Mod5
- #x0100 Button1
- #x0200 Button2
- #x0400 Button3
- #x0800 Button4
- #x1000 Button5
- #xe000 unused but must be zero
-.DE
-.LP
-.DS 0
-.TA .75i 1.75i
-.ta .75i 1.75i
-SETofKEYMASK
- encodings are the same as for SETofKEYBUTMASK, except with
- #xff00 unused but must be zero
-.DE
-.LP
-STRING8: LISTofCARD8
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-STR
- 1 n length of name in bytes
- n STRING8 name
-.DE
-.ps +2
-\fBErrors\fP
-.ps
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Request
- 1 0 Error
- 1 1 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Value
- 1 0 Error
- 1 2 code
- 2 CARD16 sequence number
- 4 <32-bits> bad value
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Window
- 1 0 Error
- 1 3 code
- 2 CARD16 sequence number
- 4 CARD32 bad resource id
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Match
- 1 0 Error
- 1 8 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Access
- 1 0 Error
- 1 10 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Alloc
- 1 0 Error
- 1 11 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Name
- 1 0 Error
- 1 15 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Device
- 1 0 Error
- 1 CARD8 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Event
- 1 0 Error
- 1 CARD8 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Mode
- 1 0 Error
- 1 CARD8 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-Class
- 1 0 Error
- 1 CARD8 code
- 2 CARD16 sequence number
- 4 unused
- 2 CARD16 minor opcode
- 1 CARD8 major opcode
- 21 unused
-.DE
-.ps +2
-Keyboards
-.ps
-.LP
-KEYCODE values are always greater than 7 (and less than 256).
-.LP
-KEYSYM values with the bit #x10000000 set are reserved as vendor-specific.
-.LP
-The names and encodings of the standard KEYSYM values are contained in
-.\"Appendix B, Keysym Encoding.
-appendix F.
-.LP
-.ps +2
-Pointers
-.ps
-.LP
-BUTTON values are numbered starting with one.
-.LP
-.ps +2
-Requests
-.ps
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetExtensionVersion
- 1 CARD8 input extension opcode
- 1 1 GetExtensionVersion opcode
- 2 2+(n+p)/4 request length
- 2 n length of name
- 2 unused
- n STRING8 name
- p unused, p=pad(n)
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 1 GetExtensionVersion opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 2 CARD16 major version
- 2 CARD16 minor version
- 1 BOOL present
- 19 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ListInputDevices
- 1 CARD8 input extension opcode
- 1 2 ListInputDevices opcode
- 2 1 request length
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 2 ListInputDevices opcode
- 2 CARD16 sequence number
- 4 (n+p)/4 reply length
- 1 CARD8 number of input devices
- 23 unused
- n LISTofDEVICEINFO info for each input device
- p unused, p=pad(n)
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- DEVICEINFO
- 4 CARD32 device type
- 1 CARD8 device id
- 1 CARD8 number of input classes this device reports
- 1 CARD8 device use
- 0 IsXPointer
- 1 IsXKeyboard
- 2 IsXExtensionDevice
- 1 unused
- n LISTofINPUTINFO input info for each input class
- m STR name
- p unused, p=pad(m)
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- INPUTINFO KEYINFO or BUTTONINFO or VALUATORINFO
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- KEYINFO
- 1 0 class id
- 1 8 length
- 1 KEYCODE minimum keycode
- 1 KEYCODE maximum keycode
- 2 CARD16 number of keys
- 2 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-BUTTONINFO
- 1 1 class id
- 1 4 length
- 2 CARD16 number of buttons
-.DE
-.LP
-.DS 0
-.TA .2i .75i 2.0i 3.0i
-.ta .2i .75i 2.0i 3.0i
-VALUATORINFO
- 1 2 class id
- 1 8+12n length
- 1 n number of axes
- 1 SETofDEVICEMODE mode
- 4 CARD32 size of motion buffer
- 12n LISTofAXISINFO valuator limits
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-AXISINFO
- 4 CARD32 resolution
- 4 CARD32 minimum value
- 4 CARD32 maximum value
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-OpenDevice
- 1 CARD8 input extension opcode
- 1 3 OpenDevice opcode
- 2 2 request length
- 1 CARD8 device id
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 3.5i
-.ta .2i .5i 1.5i 3.5i
- =>
- 1 1 Reply
- 1 3 OpenDevice opcode
- 2 CARD16 sequence number
- 4 (n+p)/4 reply length
- 1 CARD8 number of input classes
- 23 unused
- n LISTofINPUTCLASSINFO input class information
- p unused, p=pad(n)
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- INPUTCLASSINFO
- 1 CARD8 input class id
- 0 KEY
- 1 BUTTON
- 2 VALUATOR
- 3 FEEDBACK
- 4 PROXIMITY
- 5 FOCUS
- 6 OTHER
- 1 CARD8 event type base code for this class
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-CloseDevice
- 1 CARD8 input extension opcode
- 1 4 CloseDevice opcode
- 2 2 request length
- 1 CARD8 device id
- 3 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-SetDeviceMode
- 1 CARD8 input extension opcode
- 1 5 SetDeviceMode opcode
- 2 2 request length
- 1 CARD8 device id
- 1 CARD8 mode
- 2 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 3.5i
-.ta .2i .5i 1.5i 3.5i
- =>
- 1 1 Reply
- 1 5 SetDeviceMode opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 CARD8 status
- 0 Success
- 1 AlreadyGrabbed
- 3 + first_error DeviceBusy
- 23 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-SelectExtensionEvent
- 1 CARD8 input extension opcode
- 1 6 SelectExtensionEvent opcode
- 2 3+n request length
- 4 Window event window
- 2 CARD16 count
- 2 unused
- 4n LISTofEVENTCLASS desired events
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetSelectedExtensionEvents
- 1 CARD8 input extension opcode
- 1 7 GetSelectedExtensionEvents opcode
- 2 2 request length
- 4 Window event window
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 7 GetSelecteExtensionEvents opcode
- 2 CARD16 sequence number
- 4 n + m reply length
- 2 n this client count
- 2 m all clients count
- 20 unused
- 4n LISTofEVENTCLASS this client list
- 4m LISTofEVENTCLASS all clients list
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ChangeDeviceDontPropagateList
- 1 CARD8 input extension opcode
- 1 8 ChangeDeviceDontPropagateList opcode
- 2 3+n request length
- 4 Window event window
- 2 n count of events
- 1 mode
- 0 AddToList
- 1 DeleteFromList
- 1 unused
- 4n LISTofEVENTCLASS desired events
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetDeviceDontPropagateList
- 1 CARD8 input extension opcode
- 1 9 GetDeviceDontPropagateList opcode
- 2 2 request length
- 4 Window event window
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 9 GetDeviceDontPropagateList opcode
- 2 CARD16 sequence number
- 4 n reply length
- 2 n count of events
- 22 unused
- 4n LISTofEVENTCLASS don't propagate list
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetDeviceMotionEvents
- 1 CARD8 input extension opcode
- 1 10 GetDeviceMotionEvents opcode
- 2 4 request length
- 4 TIMESTAMP start
- 0 CurrentTime
- 4 TIMESTAMP stop
- 0 CurrentTime
- 1 CARD8 device id
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 3.5i
-.ta .2i .5i 1.5i 3.5i
- =>
- 1 1 Reply
- 1 10 GetDeviceMotionEvents opcode
- 2 CARD16 sequence number
- 4 (m+1)n reply length
- 4 n number of DEVICETIMECOORDs in events
- 1 m number of valuators per event
- 1 CARD8 mode of the device
- 0 Absolute
- 1 Relative
- 18 unused
- (4m+4)n LISTofDEVICETIMECOORD events
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- DEVICETIMECOORD
- 4 TIMESTAMP time
- 4m LISTofINT32 valuators
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ChangeKeyboardDevice
- 1 CARD8 input extension opcode
- 1 11 ChangeKeyboardDevice opcode
- 2 2 request length
- 1 CARD8 device id
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 11 ChangeKeyboardDevice opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 status
- 0 Success
- 1 AlreadyGrabbed
- 2 DeviceFrozen
- 23 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ChangePointerDevice
- 1 CARD8 input extension opcode
- 1 12 ChangePointerDevice opcode
- 2 2 request length
- 1 CARD8 x-axis
- 1 CARD8 y-axis
- 1 CARD8 device id
- 1 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 12 ChangePointerDevice opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 status
- 0 Success
- 1 AlreadyGrabbed
- 2 DeviceFrozen
- 23 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GrabDevice
- 1 CARD8 input extension opcode
- 1 13 GrabDevice opcode
- 2 5+n request length
- 4 WINDOW grab-window
- 4 TIMESTAMP time
- 0 CurrentTime
- 2 n count of events
- 1 this-device-mode
- 0 Synchronous
- 1 Asynchronous
- 1 other-devices-mode
- 0 Synchronous
- 1 Asynchronous
- 1 BOOL owner-events
- 1 CARD8 device id
- 2 unused
- 4n LISTofEVENTCLASS event list
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 13 GrabDevice opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 status
- 0 Success
- 1 AlreadyGrabbed
- 2 InvalidTime
- 3 NotViewable
- 4 Frozen
- 23 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-UngrabDevice
- 1 CARD8 input extension opcode
- 1 14 UngrabDevice opcode
- 2 3 request length
- 4 TIMESTAMP time
- 0 CurrentTime
- 1 CARD8 device id
- 3 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GrabDeviceKey
- 1 CARD8 input extension opcode
- 1 15 GrabDeviceKey opcode
- 2 5+n request length
- 4 WINDOW grab-window
- 2 n count of events
- 2 SETofKEYMASK modifiers
- #x8000 AnyModifier
- 1 CARD8 modifier device
- #x0FF UseXKeyboard
- 1 CARD8 grabbed device
- 1 KEYCODE key
- 0 AnyKey
- 1 this-device-mode
- 0 Synchronous
- 1 Asynchronous
- 1 other-devices-mode
- 0 Synchronous
- 1 Asynchronous
- 1 BOOL owner-events
- 2 unused
- 4n LISTofEVENTCLASS event list
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-UngrabDeviceKey
- 1 CARD8 input extension opcode
- 1 16 UngrabDeviceKey opcode
- 2 4 request length
- 4 WINDOW grab-window
- 2 SETofKEYMASK modifiers
- #x8000 AnyModifier
- 1 CARD8 modifier device
- #x0FF UseXKeyboard
- 1 KEYCODE key
- 0 AnyKey
- 1 CARD8 grabbed device
- 3 unused
-
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GrabDeviceButton
- 1 CARD8 input extension opcode
- 1 17 GrabDeviceButton opcode
- 2 5+n request length
- 4 WINDOW grab-window
- 1 CARD8 grabbed device
- 1 CARD8 modifier device
- #x0FF UseXKeyboard
- 2 n count of desired events
- 2 SETofKEYMASK modifiers
- 1 this-device-mode
- 0 Synchronous
- 1 Asynchronous
- 1 other-device-mode
- 0 Synchronous
- 1 Asynchronous
- 1 BUTTON button
- 0 AnyButton
- 1 BOOL owner-events
- #x8000 AnyModifier
- 2 unused
- 4n LISTofEVENTCLASS event list
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-UngrabDeviceButton
- 1 CARD8 input extension opcode
- 1 18 UngrabDeviceButton opcode
- 2 4 request length
- 4 WINDOW grab-window
- 2 SETofKEYMASK modifiers
- #x8000 AnyModifier
- 1 CARD8 modifier device
- #x0FF UseXKeyboard
- 1 BUTTON button
- 0 AnyButton
- 1 CARD8 grabbed device
- 3 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-AllowDeviceEvents
- 1 CARD8 input extension opcode
- 1 19 AllowDeviceEvents opcode
- 2 3 request length
- 4 TIMESTAMP time
- 0 CurrentTime
- 1 mode
- 0 AsyncThisDevice
- 1 SyncThisDevice
- 2 ReplayThisDevice
- 3 AsyncOtherDevices
- 4 AsyncAll
- 5 SyncAll
- 1 CARD8 device id
- 2 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetDeviceFocus
- 1 CARD8 input extension opcode
- 1 20 GetDeviceFocus opcode
- 2 2 request length
- 1 CARD8 device
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 20 GetDeviceFocus opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 4 WINDOW focus
- 0 None
- 1 PointerRoot
- 3 FollowKeyboard
- 4 TIMESTAMP focus time
- 1 revert-to
- 0 None
- 1 PointerRoot
- 2 Parent
- 3 FollowKeyboard
- 15 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-SetDeviceFocus
- 1 CARD8 input extension opcode
- 1 21 SetDeviceFocus opcode
- 2 4 request length
- 4 WINDOW focus
- 0 None
- 1 PointerRoot
- 3 FollowKeyboard
- 4 TIMESTAMP time
- 0 CurrentTime
- 1 revert-to
- 0 None
- 1 PointerRoot
- 2 Parent
- 3 FollowKeyboard
- 1 CARD8 device
- 2 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetFeedbackControl
- 1 CARD8 input extension opcode
- 1 22 GetFeedbackControl opcode
- 2 2 request length
- 1 CARD8 device id
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 22 GetFeedbackControl opcode
- 2 CARD16 sequence number
- 4 m/4 reply length
- 2 n number of feedbacks supported
- 22 unused
- m LISTofFEEDBACKSTATE feedbacks
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- FEEDBACKSTATE KBDFEEDBACKSTATE, PTRFEEDBACKSTATE, INTEGERFEEDBACKSTATE,
- STRINGFEEDBACKSTATE, BELLFEEDBACKSTATE, or LEDFEEDBACKSTATE
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- KBDFEEDBACKSTATE
- 1 0 feedback class id
- 1 CARD8 id of this feedback
- 2 20 length
- 2 CARD16 pitch
- 2 CARD16 duration
- 4 CARD32 led_mask
- 4 CARD32 led_values
- 1 global_auto_repeat
- 0 Off
- 1 On
- 1 CARD8 click
- 1 CARD8 percent
- 1 unused
- 32 LISTofCARD8 auto_repeats
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- PTRFEEDBACKSTATE
- 1 0 feedback class id
- 1 CARD8 id of this feedback
- 2 12 length
- 2 unused
- 2 CARD16 acceleration-numerator
- 2 CARD16 acceleration-denominator
- 2 CARD16 threshold
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- INTEGERFEEDBACKSTATE
- 1 0 feedback class id
- 1 CARD8 id of this feedback
- 2 16 length
- 4 CARD32 resolution
- 4 INT32 minimum value
- 4 INT32 maximum value
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- STRINGFEEDBACKSTATE
- 1 1 feedback class id
- 1 CARD8 id of this feedback
- 2 4n+8 length
- 2 CARD16 max_symbols
- 2 n number of keysyms supported
- 4n LISTofKEYSYM key symbols supported
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- BELLFEEDBACKSTATE
- 1 1 feedback class id
- 1 CARD8 id of this feedback
- 2 12 length
- 1 CARD8 percent
- 3 unused
- 2 CARD16 pitch
- 2 CARD16 duration
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- LEDFEEDBACKSTATE
- 1 1 feedback class id
- 1 CARD8 id of this feedback
- 2 12 length
- 4 CARD32 led_mask
- 4 BITMASK led_values
- #x0001 On
- #x0002 Off
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ChangeFeedbackControl
- 1 CARD8 input extension opcode
- 1 23 ChangeFeedbackControl opcode
- 2 3+n/4 request length
- 4 BITMASK value-mask (has n bits set to 1)
- #x0001 keyclick-percent
- #x0002 bell-percent
- #x0004 bell-pitch
- #x0008 bell-duration
- #x0010 led
- #x0020 led-mode
- #x0040 key
- #x0080 auto-repeat-mode
- #x0001 string
- #x0001 integer
- #x0001 acceleration-numerator
- #x0002 acceleration-denominator
- #x0004 acceleration-threshold
- 1 CARD8 device id
- 1 CARD8 feedback class id
- 2 unused
- n FEEDBACKCLASS
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- FEEDBACKCLASS KBDFEEDBACKCTL, PTRFEEDBACKCTL, INTEGERFEEDBACKCTL,
- STRINGFEEDBACKCTL, BELLFEEDBACKCTL, or LEDFEEDBACKCTL
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- KBDFEEDBACKCTL
- 1 0 feedback class id
- 1 CARD8 id of this feedback
- 2 20 length
- 1 KEYCODE key
- 1 auto-repeat-mode
- 0 Off
- 1 On
- 2 Default
- 1 INT8 key-click-percent
- 1 INT8 bell-percent
- 2 INT16 bell-pitch
- 2 INT16 bell-duration
- 4 CARD32 led_mask
- 4 CARD32 led_values
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- PTRFEEDBACKCTL
- 1 1 feedback class id
- 1 CARD8 id of this feedback
- 2 12 length
- 2 unused
- 2 INT16 numerator
- 2 INT16 denominator
- 2 INT16 threshold
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- STRINGCTL
- 1 2 feedback class id
- 1 CARD8 id of this feedback
- 2 4n+8 length
- 2 unused
- 2 n number of keysyms to display
- 4n LISTofKEYSYM list of key symbols to display
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- INTEGERCTL
- 1 3 feedback class id
- 1 CARD8 id of this feedback
- 2 8 length
- 4 INT32 integer to display
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- LEDCTL
- 1 4 feedback class id
- 1 CARD8 id of this feedback
- 2 12 length
- 4 CARD32 led_mask
- 4 BITMASK led_values
- #x0001 On
- #x0002 Off
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- BELLCTL
- 1 5 feedback class id
- 1 CARD8 id of this feedback
- 2 8 length
- 1 INT8 percent
- 3 unused
- 2 INT16 pitch
- 2 INT16 duration
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetDeviceKeyMapping
- 1 CARD8 input extension opcode
- 1 24 GetDeviceKeyMapping opcode
- 2 2 request length
- 1 CARD8 device
- 1 KEYCODE first-keycode
- 1 CARD8 count
- 1 unused
-.DE
-.DS 0
-.TA .2i .75i 2.0i 3.0i
-.ta .2i .75i 2.0i 3.0i
- =>
- 1 1 Reply
- 1 24 GetDeviceKeyMapping opcode
- 2 CARD16 sequence number
- 4 nm reply length (m = count field from the request)
- 1 n keysyms-per-keycode
- 23 unused
- 4nm LISTofKEYSYM keysyms
-.DE
-.LP
-.DS 0
-.TA .2i .75i 2.0i 3.0i
-.ta .2i .75i 2.0i 3.0i
-ChangeDeviceKeyMapping
- 1 CARD8 input extension opcode
- 1 25 ChangeDeviceKeyMapping opcode
- 2 2+nm request length
- 1 CARD8 device
- 1 KEYCODE first-keycode
- 1 m keysyms-per-keycode
- 1 n keycode-count
- 4nm LISTofKEYSYM keysyms
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetDeviceModifierMapping
- 1 CARD8 input extension opcode
- 1 26 GetDeviceModifierMapping opcode
- 2 2 request length
- 1 CARD8 device
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 26 GetDeviceModifierMapping opcode
- 2 CARD16 sequence number
- 4 2n reply length
- 1 n keycodes-per-modifier
- 23 unused
- 8n LISTofKEYCODE keycodes
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-SetDeviceModifierMapping
- 1 CARD8 input extension opcode
- 1 27 SetDeviceModifier opcode
- 2 2+2n request length
- 1 CARD8 device
- 1 n keycodes-per-modifier
- 2 unused
- 8n LISTofKEYCODE keycodes
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 27 SetDeviceModifierMapping opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 status
- 0 Success
- 1 Busy
- 2 Failed
- 23 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetDeviceButtonMapping
- 1 CARD8 input extension opcode
- 1 28 GetDeviceButtonMapping opcode
- 2 2 request length
- 1 CARD8 device
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 28 GetDeviceButtonMapping opcode
- 2 CARD16 sequence number
- 4 (n+p)/4 reply length
- 1 n number of elements in map list
- 23 unused
- n LISTofCARD8 map
- p unused, p=pad(n)
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-SetDeviceButtonMapping
- 1 CARD8 input extension opcode
- 1 29 SetDeviceButtonMapping opcode
- 2 2+(n+p)/4 request length
- 1 CARD8 device
- 1 n length of map
- 2 unused
- n LISTofCARD8 map
- p unused, p=pad(n)
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 29 SetDeviceButtonMapping opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 status
- 0 Success
- 1 Busy
- 23 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-QueryDeviceState
- 1 CARD8 input extension opcode
- 1 30 QueryDeviceState opcode
- 2 2 request length
- 1 CARD8 device
- 3 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- =>
- 1 1 Reply
- 1 30 QueryDeviceState opcode
- 2 CARD16 sequence number
- 4 m/4 reply length
- 1 n number of input classes
- 23 unused
- m LISTofINPUTSTATE
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- INPUTSTATE KEYSTATE or BUTTONSTATE or VALUATORSTATE
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- KEYSTATE
- 1 CARD8 key input class id
- 1 36 length
- 1 CARD8 num_keys
- 1 unused
- 32 LISTofCARD8 status of keys
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- BUTTONSTATE
- 1 CARD8 button input class id
- 1 36 length
- 1 CARD8 num_buttons
- 1 unused
- 32 LISTofCARD8 status of buttons
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
- VALUATORSTATE
- 1 CARD8 valuator input class id
- 1 4n + 4 length
- 1 n number of valuators
- 1 mode
- #x01 DeviceMode (0 = Relative, 1 = Absolute)
- #x02 ProximityState (0 = InProximity, 1 = OutOfProximity)
- 4n LISTofCARD32 status of valuators
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-SendExtensionEvent
- 1 CARD8 input extension opcode
- 1 31 SendExtensionEvent opcode
- 2 4 + 8n + m request length
- 4 WINDOW destination
- 1 CARD8 device
- 1 BOOL propagate
- 2 CARD16 eventclass count
- 1 CARD8 num_events
- 3 unused
- 32n LISTofEVENTS events to send
- 4m LISTofEVENTCLASS desired events
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceBell
- 1 CARD8 input extension opcode
- 1 32 DeviceBell opcode
- 2 2 request length
- 1 CARD8 device id
- 1 CARD8 feedback id
- 1 CARD8 feedback class
- 1 INT8 percent
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-SetDeviceValuators
- 1 CARD8 input extension opcode
- 1 33 SetDeviceValuators opcode
- 2 2 + n request length
- 1 CARD8 device id
- 1 CARD8 first valuator
- 1 n number of valuators
- 1 unused
- 4n LISTofINT32 valuator values to set
-.DE
-.DS 0
-.TA .2i .5i 1.5i 3.5i
-.ta .2i .5i 1.5i 3.5i
- =>
- 1 1 Reply
- 1 33 SetDeviceValuators opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 CARD8 status
- 0 Success
- 1 AlreadyGrabbed
- 23 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-GetDeviceControl
- 1 CARD8 input extension opcode
- 1 34 GetDeviceControl opcode
- 2 2 request length
- 2 CARD16 device control type
- 1 CARD8 device id
- 1 unused
-.DE
-.DS 0
-.TA .2i .5i 1.5i 3.5i
-.ta .2i .5i 1.5i 3.5i
- =>
- 1 1 Reply
- 1 34 GetDeviceControl opcode
- 2 CARD16 sequence number
- 4 n/4 reply length
- 1 CARD8 status
- 0 Success
- 1 AlreadyGrabbed
- 3 + first_error DeviceBusy
- 23 unused
- n DEVICESTATE
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DEVICESTATE DEVICERESOLUTIONSTATE
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DEVICERESOLUTIONSTATE
- 2 0 control type
- 2 8 + 12n length
- 4 n num_valuators
- 4n LISTOfCARD32 resolution values
- 4n LISTOfCARD32 resolution min_values
- 4n LISTOfCARD32 resolution max_values
-.DE
-.LP
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ChangeDeviceControl
- 1 CARD8 input extension opcode
- 1 35 ChangeDeviceControl opcode
- 2 2+n/4 request length
- 2 CARD16 control type
- 1 CARD8 device id
- 1 unused
- n DEVICECONTROL
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DEVICECONTROL DEVICERESOLUTIONCTL
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DEVICERESOLUTIONCTL
- 2 1 control type
- 2 8 + 4n length
- 1 CARD8 first_valuator
- 1 n num_valuators
- 2 unused
- 4n LISTOfCARD32 resolution values
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 3.5i
-.ta .2i .5i 1.5i 3.5i
- =>
- 1 1 Reply
- 1 35 ChangeDeviceControl opcode
- 2 CARD16 sequence number
- 4 0 reply length
- 1 CARD8 status
- 0 Success
- 1 AlreadyGrabbed
- 3 + first_error DeviceBusy
- 23 unused
-.DE
-.ps +2
-Events
-.ps
-.LP
-DeviceKeyPress, DeviceKeyRelease, DeviceButtonPress, DeviceButtonRelease,
-ProximityIn, ProximityOut, and DeviceStateNotify events may be followed by
-zero or more DeviceValuator events. DeviceMotionNotify events will be
-followed by one or more DeviceValuator events.
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceValuator
- 1 CARD8 code
- 1 CARD8 device id
- 2 CARD16 sequence number
- 2 SETofKEYBUTMASK state
- 1 n number of valuators this device reports
- 1 m number of first valuator in this event
- 24 LISTofINT32 valuators
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceKeyPress
- 1 CARD8 code
- 1 KEYCODE detail
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW root
- 4 WINDOW event
- 4 WINDOW child
- 0 None
- 2 INT16 root-x
- 2 INT16 root-y
- 2 INT16 event-x
- 2 INT16 event-y
- 2 SETofKEYBUTMASK state
- 1 BOOL same-screen
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceKeyRelease
- 1 CARD8 code
- 1 KEYCODE detail
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW root
- 4 WINDOW event
- 4 WINDOW child
- 0 None
- 2 INT16 root-x
- 2 INT16 root-y
- 2 INT16 event-x
- 2 INT16 event-y
- 2 SETofKEYBUTMASK state
- 1 BOOL same-screen
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceButtonPress
- 1 CARD8 code
- 1 BUTTON detail
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW root
- 4 WINDOW event
- 4 WINDOW child
- 0 None
- 2 INT16 root-x
- 2 INT16 root-y
- 2 INT16 event-x
- 2 INT16 event-y
- 2 SETofKEYBUTMASK state
- 1 BOOL same-screen
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceButtonRelease
- 1 CARD8 code
- 1 BUTTON detail
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW root
- 4 WINDOW event
- 4 WINDOW child
- 0 None
- 2 INT16 root-x
- 2 INT16 root-y
- 2 INT16 event-x
- 2 INT16 event-y
- 2 SETofKEYBUTMASK state
- 1 BOOL same-screen
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceMotionNotify
- 1 CARD8 code
- 1 detail
- 0 Normal
- 1 Hint
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW root
- 4 WINDOW event
- 4 WINDOW child
- 0 None
- 2 INT16 root-x
- 2 INT16 root-y
- 2 INT16 event-x
- 2 INT16 event-y
- 2 SETofKEYBUTMASK state
- 1 BOOL same-screen
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
-.DE
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceFocusIn
- 1 CARD8 code
- 1 detail
- 0 Ancestor
- 1 Virtual
- 2 Inferior
- 3 Nonlinear
- 4 NonlinearVirtual
- 5 Pointer
- 6 PointerRoot
- 7 None
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW event
- 1 mode
- 0 Normal
- 1 Grab
- 2 Ungrab
- 3 WhileGrabbed
- 1 CARD8 device id
- 18 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceFocusOut
- 1 CARD8 code
- 1 detail
- 0 Ancestor
- 1 Virtual
- 2 Inferior
- 3 Nonlinear
- 4 NonlinearVirtual
- 5 Pointer
- 6 PointerRoot
- 7 None
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW event
- 1 mode
- 0 Normal
- 1 Grab
- 2 Ungrab
- 3 WhileGrabbed
- 1 CARD8 device id
- 18 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ProximityIn
- 1 CARD8 code
- 1 unused
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW root
- 4 WINDOW event
- 4 WINDOW child
- 0 None
- 2 INT16 root-x
- 2 INT16 root-y
- 2 INT16 event-x
- 2 INT16 event-y
- 2 SETofKEYBUTMASK state
- 1 BOOL same-screen
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ProximityOut
- 1 CARD8 code
- 1 unused
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 4 WINDOW root
- 4 WINDOW event
- 4 WINDOW child
- 0 None
- 2 INT16 root-x
- 2 INT16 root-y
- 2 INT16 event-x
- 2 INT16 event-y
- 2 SETofKEYBUTMASK state
- 1 BOOL same-screen
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
-.DE
-.LP
-DeviceStateNotify events may be immediately followed by zero or one
-DeviceKeyStateNotify and/ or zero or more DeviceValuator events.
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceStateNotify
- 1 CARD8 code
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 1 CARD8 num_keys
- 1 CARD8 num_buttons
- 1 CARD8 num_valuators
- 1 CARD8 valuator mode and input classes reported
- #x01 reporting keys
- #x02 reporting buttons
- #x04 reporting valuators
- #x40 device mode (0 = Relative, 1 = Absolute)
- #x80 proximity state (0 = InProximity, 1 = OutOfProximity)
- 4 LISTofCARD8 first 32 keys (if reported)
- 4 LISTofCARD8 first 32 buttons (if reported)
- 12 LISTofCARD32 first 3 valuators (if reported)
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceKeyStateNotify
- 1 CARD8 code
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
- 2 CARD16 sequence number
- 28 LISTofCARD8 state of keys 33-255
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceButtonStateNotify
- 1 CARD8 code
- 1 CARD8 device id
- #x80 MORE_EVENTS follow
- 2 CARD16 sequence number
- 28 LISTofCARD8 state of buttons 33-255
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceValuator
- 1 CARD8 code
- 1 CARD8 device id
- 2 CARD16 sequence number
- 2 SETofKEYBUTMASK state
- 1 n number of valuators this device reports
- 1 n number of first valuator in this event
- 24 LISTofINT32 valuators
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-DeviceMappingNotify
- 1 CARD8 code
- 1 CARD8 device id
- 2 CARD16 sequence number
- 1 request
- 0 MappingModifier
- 1 MappingKeyboard
- 2 MappingPointer
- 1 KEYCODE first-keycode
- 1 CARD8 count
- 1 unused
- 4 TIMESTAMP time
- 20 unused
-.DE
-.LP
-.DS 0
-.TA .2i .5i 1.5i 2.5i
-.ta .2i .5i 1.5i 2.5i
-ChangeDeviceNotify
- 1 CARD8 code
- 1 CARD8 id of device specified on change request
- 2 CARD16 sequence number
- 4 TIMESTAMP time
- 1 request
- 0 NewPointer
- 1 NewKeyboard
- 23 unused
-.DE
-.\" print Table of Contents
-.if o .bp \" blank page to make count even
-.bp 1
-.af PN i
-.PX
diff --git a/specs/Xi/library.ms b/specs/Xi/library.ms
deleted file mode 100644
index ef745ad..0000000
--- a/specs/Xi/library.ms
+++ /dev/null
@@ -1,6313 +0,0 @@
-.\" $Xorg: library.ms,v 1.3 2000/08/17 19:42:38 cpqbld Exp $
-.\" $XdotOrg: xc/doc/specs/Xi/library.ms,v 1.2 2004/04/23 18:42:18 eich Exp $
-.\" Input Extension now coded to macros.t
-.\" edited for DP edits and code consistency w/ core protocol/xlib 4/5/96
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-.ps 11
-.nr PS 11
-\0
-.sp 10
-.ce 500
-.ps 20
-\fBX Input Device Extension Library
-.ps 12
-.sp 2
-X Consortium Standard
-.sp 1
-X Version 11, Release 6.8
-.sp 16
-.ps 15
-\fBMark Patrick\0\0\0\0Ardent Computer
-.sp 1
-\fBGeorge Sachs\0\0\0\0Hewlett-Packard
-.ps 12
-.ce 0
-.bp
-\0
-.sp 10
-.fi
-.LP
-Copyright \(co 1989, 1990, 1991 by Hewlett-Packard Company, Ardent Computer.
-.LP
-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.
-.sp 5
-Copyright (c) 1989, 1990, 1991, 1992 X Consortium
-.LP
-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:
-.LP
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-.LP
-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.
-.LP
-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.
-.sp 3
-\fIX Window System\fP is a trademark of The Open Group.
-.ps
-.vs
-.bp 1
-.EH '\fBX Input Extension Library\fP''\fBX11, Release 6.8\fP'
-.OH '\fBX Input Extension Library\fP''\fBX11, Release 6.8\fP'
-.EF ''\fB\\\\n(PN\fP''
-.OF ''\fB\\\\n(PN\fP''
-.\" Force the heading counter for level 1 to one
-.\"
-.\"
-.\"
-.\" Print table of contents to level 4 headings
-.\"
-.\"
-.\" Page eject for each level 1 heading
-.\"
-.\"
-.\" Define Ch to contain the chapter string.
-.\"
-.ds Ch Input Extension Overview
-.\"
-.\"
-.\" Pull in the layout macro package.
-.\"
-.\"
-.tr ~
-.NH 1
-Input Extension Overview
-.XS
-\*(SN Input Extension Overview
-.XE
-.LP
-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.
-.NH 2
-Design Approach
-.XS
-\*(SN Design Approach
-.XE
-.LP
-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 \fIn\fP\^-dimensional motion data as well as other data that
-is not currently reportable via the core input events.
-.NH 2
-Core Input Devices
-.XS
-\*(SN Core Input Devices
-.XE
-.LP
-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.
-.LP
-The X keyboard is used to generate input that client programs can detect.
-.LP
-The X keyboard and X pointer are referred to in this document as
-the \fIcore devices\fP, and the input
-events they generate
-.Pn ( KeyPress ,
-.PN KeyRelease ,
-.PN ButtonPress ,
-.PN ButtonRelease ,
-and
-.PN MotionNotify )
-are known as the \fIcore input events\fP. All other
-input devices are referred to as \fIextension input devices\fP, and the
-input events they generate are referred to as \fIextension input events\fP\^.
-.NT
-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.''
-.NE
-.LP
-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.
-.NH 2
-Extension Input Devices
-.XS
-\*(SN Extension Input Devices
-.XE
-.LP
-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
-.Pn ( DeviceKeyPress ,
-.PN DeviceKeyRelease ,
-.PN DeviceButtonPress ,
-.PN DeviceButtonRelease ,
-.PN DeviceMotionNotify ,
-and so on) and contain
-a device identifier so that events of the same type coming from different
-input devices can be distinguished.
-.LP
-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.
-.LP
-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).
-.LP
-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 \fIinput device classes\fP. Server implementors may add new
-classes of input devices without changing the protocol requests.
-.LP
-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.
-.NH 3
-Input Device Classes
-.XS
-\*(SN Input Device Classes
-.XE
-.LP
-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:
-.IP "\s-1KEY\s+1" 1i
-The device reports key events.
-.IP "\s-1BUTTON\s+1" 1i
-The device reports button events.
-.IP "\s-1VALUATOR\s+1" 1i
-The device reports valuator data in motion events.
-.IP "\s-1PROXIMITY\s+1" 1i
-The device reports proximity events.
-.IP "\s-1FOCUS\s+1" 1i
-The device can be focused.
-.IP "\s-1FEEDBACK\s+1" 1i
-The device supports feedbacks.
-.LP
-Additional classes may be added in the future.
-Functions that support multiple input classes, such as the
-.PN XListInputDevices
-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.
-.NH 2
-Using Extension Input Devices
-.XS
-\*(SN Using Extension Input Devices
-.XE
-.LP
-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:
-.IP \(bu 5
-.PN XListInputDevices
-\- 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
-.PN XListInputDevices
-request, see the section entitled ``Listing Available Devices.''
-.IP \(bu 5
-.PN XOpenDevice
-\- requests that the server open the device for access by this client.
-This request returns an
-.PN XDevice
-structure that is used
-by most other input extension requests to identify the specified device.
-For a description of the
-.PN XOpenDevice
-request, see the section entitled ``Enabling and Disabling Extension Devices.''
-.IP \(bu 5
-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,
-.PN DeviceKeyPress .
-For a description of these macros,
-see the section entitled ``Selecting Extension Device Events.''
-.IP \(bu 5
-.PN XSelectExtensionEvent
-\- selects the desired events from the server.
-For a description of the
-.PN XSelextExtensionEvent
-request, see the section entitled ``Selecting Extension Device Events.''
-.IP \(bu 5
-.PN XNextEvent
-\- receives the next available event. This is the core
-.PN XNextEvent
-function provided by the standard X libarary.
-.LP
-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.
-.NH 1
-Library Extension Requests
-.XS
-\*(SN Library Extension Requests
-.XE
-.LP
-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 \fB<X11/extensions/XI.h>\fP and \fB<X11/extensions/XInput.h>\fP,
-which are attached to this document as
-Appendix A.
-.LP
-The library will return \fBNoSuchExtension\fP if an extension request
-is made to a server that does not support the input extension.
-.LP
-Input extension requests cannot be used to access the X keyboard and
-X pointer devices.
-.NH 2
-Window Manager Functions
-.XS
-\*(SN Window Manager Functions
-.XE
-.LP
-This section discusses the following X Input Extension Window Manager topics:
-.IP \(bu 5
-Changing the core devices
-.IP \(bu 5
-Event synchronization and core grabs
-.IP \(bu 5
-Extension active grabs
-.IP \(bu 5
-Passively grabbing a key
-.IP \(bu 5
-Passively grabbing a button
-.IP \(bu 5
-Thawing a device
-.IP \(bu 5
-Controlling device focus
-.IP \(bu 5
-Controlling device feedback
-.IP \(bu 5
-Ringing a bell on an input device
-.IP \(bu 5
-Controlling device encoding
-.IP \(bu 5
-Controlling button mapping
-.IP \(bu 5
-Obtaining the state of a device
-.NH 3
-Changing the Core Devices
-.XS
-\*(SN Changing the Core Devices
-.XE
-.LP
-These functions are provided to change which physical device is used
-as the X pointer or X keyboard.
-.NT
-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
-.PN ChangeDeviceNotify
-event generated by these requests.
-.NE
-.LP
-These functions change the X keyboard or X pointer device and generate an
-.PN XChangeDeviceNotify
-event and a
-.PN 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.
-.LP
-These requests fail and return
-.PN AlreadyGrabbed
-if either the specified
-device or the core device it would replace are grabbed by some other client.
-They fail and return
-.PN GrabFrozen
-if either device is frozen by the active grab of another client.
-.LP
-These requests fail with a
-.PN BadDevice
-error if the specified device is invalid, has not previously been opened via
-.PN XOpenDevice ,
-or is
-not supported as a core device by the server implementation.
-.LP
-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
-.PN 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
-.PN XCloseDevice
-request to close the new core device will fail with a
-.PN BadDevice
-error.
-.sp
-.LP
-To change which physical device is used as the X keyboard, use the
-.PN XChangeKeyboardDevice
-function.
-The specified device must support input class
-.PN Keys
-(as reported in the
-.PN ListInputDevices
-request) or the request will fail with a
-.PN BadMatch
-error.
-.LP
-.sM
-.FD 0
-int XChangeKeyboardDevice\^(\^\fIdisplay\fP\^, \fIdevice\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.LP
-.eM
-If no error occurs,
-.PN XChangeKeyboardDevice
-returns
-.PN Success .
-A
-.PN ChangeDeviceNotify
-event with the request field set to
-.PN NewKeyboard
-is sent to all clients selecting that event.
-A
-.PN MappingNotify
-event with the request field set to
-.PN 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.
-.LP
-.PN XChangeKeyboardDevice
-can generate
-.PN AlreadyGrabbed ,
-.PN BadDevice ,
-.PN BadMatch ,
-and
-.PN GrabFrozen
-errors.
-.sp
-.LP
-To change which physical device is used as the X pointer,
-use the
-.PN XChangePointerDevice
-function.
-The specified device must support input class
-.PN Valuators
-(as reported in the
-.PN XListInputDevices
-request) and report at least two axes of motion,
-or the request will fail with a
-.PN 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.
-.LP
-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
-.PN BadDevice
-error.
-.sM
-.FD 0
-int XChangePointerDevice\^(\^\fIdisplay\fP\^, \fIdevice\fP\^, \fIxaxis\fP\^, \fIyaxis\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fIxaxis\fP\^;
-.br
- int \fIyaxis\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIxaxis\fP 1i
-Specifies the zero-based index of the axis to be used as the x-axis of the
-pointer device.
-.IP \fIyaxis\fP 1i
-Specifies the zero-based index of the axis to be used as the y-axis of the
-pointer device.
-.LP
-.eM
-If no error occurs,
-.PN XChangePointerDevice
-returns
-.PN Success .
-A
-.PN ChangeDeviceNotify
-event with the request field set to
-.PN NewPointer
-is sent to all clients selecting that event.
-A
-.PN MappingNotify
-event with the request field set to
-.PN MappingPointer
-is sent to all clients.
-The requested device becomes the X pointer, and the old pointer becomes
-available as an extension input device.
-.LP
-.PN XChangePointerDevice
-can generate
-.PN AlreadyGrabbed ,
-.PN BadDevice ,
-.PN BadMatch ,
-and
-.PN GrabFrozen
-errors.
-.NH 3
-Event Synchronization and Core Grabs
-.XS
-\*(SN Event Synchronization and Core Grabs
-.XE
-.LP
-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.
-.LP
-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
-.PN XGrabPointer
-and
-.PN XGrabButton
-requests, pointer_mode controls synchronization of the pointer device,
-and keyboard_mode controls the synchronization of all other input devices.
-For the
-.PN XGrabKeyboard
-and
-.PN 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.
-.NH 3
-Extension Active Grabs
-.XS
-\*(SN Extension Active Grabs
-.XE
-.LP
-Active grabs of
-extension devices are supported via the
-.PN XGrabDevice
-function in the same way that core devices are grabbed using the core
-.PN XGrabKeyboard
-function, except that an extension input device
-is passed as a function parameter.
-The
-.PN XUngrabDevice
-function allows a previous active grab for an extension device to be released.
-.LP
-Passive grabs of buttons and keys on extension devices are supported
-via the
-.PN XGrabDeviceButton
-and
-.PN XGrabDeviceKey
-functions.
-These passive grabs are released via the
-.PN XUngrabDeviceKey
-and
-.PN XUngrabDeviceButton
-functions.
-.sp
-.LP
-To grab an extension device, use the
-.PN XGrabDevice
-function.
-The device must have previously been opened using the
-.PN XOpenDevice
-function.
-.sM
-.FD 0
-int XGrabDevice\^(\^\fIdisplay\fP\^, \fIdevice\fP\^, \fIgrab_window\fP\^, \fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^,
-.br
- \fIthis_device_mode\fP\^, \fIother_device_mode\fP\^, \fItime\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- Window \fIgrab_window\fP\^;
-.br
- Bool \fIowner_events\fP\^;
-.br
- int \fIevent_count\fP\^;
-.br
- XEventClass *\fIevent_list\fP\^;
-.br
- int \fIthis_device_mode\fP\^;
-.br
- int \fIother_device_mode\fP\^;
-.br
- Time \fItime\fP\^;
-.FN
-.IP "\fIdisplay\fP" 1i
-Specifies the connection to the X server.
-.IP "\fIdevice\fP" 1i
-Specifies the desired device.
-.IP "\fIgrab_window\fP" 1i
-Specifies the ID of a window associated with the device specified above.
-.IP "\fIowner_events\fP" 1i
-Specifies a boolean value of either
-.PN True
-or
-.PN False .
-.IP "\fIevent_count\fP" 1i
-Specifies the number of elements in the event_list array.
-.IP "\fIevent_list\fP" 1i
-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.
-.IP "\fIthis_device_mode\fP" 1i
-Controls further processing of events from this device. You can pass one
-of these constants:
-.PN GrabModeSync
-or
-.PN GrabModeAsync .
-.IP "\fIother_device_mode\fP" 1i
-Controls further processing of events from all other devices. You can pass one
-of these constants:
-.PN GrabModeSync
-or
-.PN GrabModeAsync .
-.IP "\fItime\fP" 1i
-Specifies the time. This may be either a timestamp expressed in
-milliseconds or
-.PN CurrentTime .
-.LP
-.eM
-.PN XGrabDevice
-actively grabs an extension input device and generates
-.PN DeviceFocusIn
-and
-.PN 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.
-.LP
-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
-.PN 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
-.PN 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.
-.LP
-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.
-.IP \(bu 5
-If the this_device_mode argument is
-.PN 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
-.PN 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
-.PN XAllowDeviceEvents
-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.
-.IP \(bu 5
-If the other_device_mode is
-.PN GrabModeAsync ,
-event processing from other input devices is unaffected
-by activation of the grab.
-If other_device_mode is
-.PN 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
-.PN XAllowEvents
-or
-.PN XAllowDeviceEvents
-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.
-.LP
-.PN XGrabDevice
-fails on the following conditions:
-.IP \(bu 5
-If the device is actively grabbed by some other client, it returns
-.PN AlreadyGrabbed .
-.IP \(bu 5
-If grab_window is not viewable, it returns
-.PN GrabNotViewable .
-.IP \(bu 5
-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
-.PN GrabInvalidTime .
-Otherwise,
-the last-grab-time for the specified device is set
-to the specified time and
-.PN CurrentTime
-is replaced by the current X server time.
-.IP \(bu 5
-If the device is frozen by an active grab of another client, it returns
-.PN GrabFrozen .
-.LP
-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.
-.LP
-.PN XGrabDevice
-can generate
-.PN BadClass ,
-.PN BadDevice ,
-.PN BadValue ,
-and
-.PN BadWindow
-errors.
-.sp
-.LP
-To release a grab of an extension device, use the
-.PN XUngrabDevice
-function.
-.LP
-.sM
-.FD 0
-int XUngrabDevice(\fIdisplay\fP\^, \fIdevice\fP\^, \fItime\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- Time \fItime\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fItime\fP 1i
-Specifies the time. This may be either a timestamp expressed in
-milliseconds, or
-.PN CurrentTime .
-.LP
-.eM
-.PN XUngrabDevice
-allows a client to release an extension input device and any
-queued events if this client has it grabbed from either
-.PN XGrabDevice
-or
-.PN XGrabDeviceKey .
-If any other devices are frozen by the grab,
-.PN XUngrabDevice
-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
-.PN DeviceFocusIn
-and
-.PN DeviceFocusOut
-events. The X server automatically performs an
-.PN XUngrabDevice
-if the event window for an active device grab becomes not viewable
-or if the client terminates without releasing the grab.
-.LP
-.PN XUngrabDevice
-can generate
-.PN BadDevice
-errors.
-.NH 3
-Passively Grabbing a Key
-.XS
-\*(SN Passively Grabbing a Key
-.XE
-.LP
-To passively grab a single key on an extension device, use
-.PN XGrabDeviceKey .
-That device must have previously been opened using the
-.PN XOpenDevice
-function, or the request will fail with a
-.PN BadDevice
-error.
-If the specified device does not support input class
-.PN Keys ,
-the request will fail with a
-.PN BadMatch
-error.
-.sM
-.FD 0
-int XGrabDeviceKey(\fIdisplay\fP\^, \fIdevice\fP\^, \fIkeycode\fP\^, \
-\fImodifiers\fP\^, \fImodifier_device\fP\^, \fIgrab_window\fP\^,
-.br
- \fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \
-\fIthis_device_mode\fP\^, \fIother_device_mode\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fIkeycode\fP\^;
-.br
- unsigned int \fImodifiers\fP\^;
-.br
- XDevice *\fImodifier_device\fP\^;
-.br
- Window \fIgrab_window\fP\^;
-.br
- Bool \fIowner_events\fP\^;
-.br
- int \fIevent_count\fP\^;
-.br
- XEventClass *\fIevent_list\fP\^;
-.br
- int \fIthis_device_mode\fP\^;
-.br
- int \fIother_device_mode\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIkeycode\fP 1i
-Specifies the keycode of the key that is to be grabbed. You can pass
-either the keycode or
-.PN AnyKey .
-.IP \fImodifiers\fP 1i
-Specifies the set of keymasks. This mask is the bitwise inclusive OR
-of these keymask bits:
-.PN ShiftMask ,
-.PN LockMask ,
-.PN ControlMask ,
-.PN Mod1Mask ,
-.PN Mod2Mask ,
-.PN Mod3Mask ,
-.PN Mod4Mask ,
-and
-.PN Mod5Mask .
-.IP
-You can also pass
-.PN AnyModifier ,
-which is equivalent to issuing the grab key request
-for all possible modifier combinations (including the combination
-of no modifiers).
-.IP \fImodifier_device\fP 1i
-Specifies the device whose modifiers are to be used. If NULL is
-specified, the core X keyboard is used as the modifier_device.
-.IP \fIgrab_window\fP 1i
-Specifies the ID of a window associated with the device specified above.
-.IP \fIowner_events\fP 1i
-Specifies a boolean value of either
-.PN True
-or
-.PN False .
-.IP \fIevent_count\fP 1i
-Specifies the number of elements in the event_list array.
-.IP \fIevent_list\fP 1i
-Specifies a pointer to a list of event classes that indicate which events
-the client wishes to receive.
-.IP \fIthis_device_mode\fP 1i
-Controls further processing of events from this device.
-You can pass one of these constants:
-.PN GrabModeSync
-or
-.PN GrabModeAsync .
-.IP \fIother_device_mode\fP 1i
-Controls further processing of events from all other devices.
-You can pass one of these constants:
-.PN GrabModeSync
-or
-.PN GrabModeAsync .
-.LP
-.eM
-.PN XGrabDeviceKey
-is analogous to the core
-.PN XGrabKey
-function. It creates an
-explicit passive grab for a key on an extension device.
-The
-.PN XGrabDeviceKey
-function establishes a passive grab on a device.
-Consequently, in the future,
-.IP \(bu 5
-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),
-.IP \(bu 5
-AND no other modifier keys logically are down,
-.IP \(bu 5
-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,
-.IP \(bu 5
-AND a passive grab on the same device and key combination does not exist on any
-ancestor of the grab window,
-.IP \(bu 5
-THEN the device is actively grabbed, as for
-.PN XGrabDevice ,
-the last-device-grab time is set to the time at which the key was pressed
-(as transmitted in the
-.PN DeviceKeyPress
-event), and the
-.PN DeviceKeyPress
-event is reported.
-.LP
-The interpretation of the remaining arguments is as for
-.PN 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).
-.LP
-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.
-.LP
-A modifier of
-.PN 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
-.PN 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
-.PN XListInputDevices
-function.
-If it is not within that range,
-.PN XGrabDeviceKey
-generates a
-.PN BadValue
-error.
-.LP
-.PN XGrabDeviceKey
-generates a
-.PN BadAccess
-error if some other client has issued a
-.PN XGrabDeviceKey
-with the same device and key combination on the same window.
-When using
-.PN AnyModifier
-or
-.PN AnyKey ,
-the request fails completely and the X server generates a
-.PN BadAccess
-error, and no grabs are established if there is a conflicting grab
-for any combination.
-.LP
-.PN XGrabDeviceKey
-returns
-.PN Success
-upon successful completion of the request.
-.LP
-.PN XGrabDeviceKey
-can generate
-.PN BadAccess ,
-.PN BadClass ,
-.PN BadDevice ,
-.PN BadMatch ,
-.PN BadValue ,
-and
-.PN BadWindow
-errors.
-.sp
-.LP
-To release a passive grab of a single key on an extension device, use
-.PN XUngrabDeviceKey .
-.sM
-.FD 0
-int XUngrabDeviceKey(\fIdisplay\fP\^, \fIdevice\fP\^, \fIkeycode\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP\^, \fIungrab_window\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fIkeycode\fP\^;
-.br
- unsigned int \fImodifiers\fP\^;
-.br
- XDevice *\fImodifier_device\fP\^;
-.br
- Window \fIungrab_window\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIkeycode\fP 1i
-Specifies the keycode of the key that is to be ungrabbed. You can pass
-either the keycode or
-.PN AnyKey .
-.IP \fImodifiers\fP 1i
-Specifies the set of keymasks. This mask is the bitwise inclusive OR
-of these keymask bits:
-.PN ShiftMask ,
-.PN LockMask ,
-.PN ControlMask ,
-.PN Mod1Mask ,
-.PN Mod2Mask ,
-.PN Mod3Mask ,
-.PN Mod4Mask ,
-and
-.PN Mod5Mask .
-.IP
-You can also pass
-.PN AnyModifier ,
-which is equivalent to issuing the ungrab key
-request for all possible modifier combinations (including the combination
-of no modifiers).
-.IP \fImodifier_device\fP 1.5i
-Specifies the device whose modifiers are to be used. If NULL is
-specified, the core X keyboard is used as the modifier_device.
-.IP \fIungrab_window\fP 1.5i
-Specifies the ID of a window associated with the device specified above.
-.LP
-.eM
-.PN XUngrabDeviceKey
-is analogous to the core
-.PN XUngrabKey
-function. It releases an explicit passive grab for a key
-on an extension input device.
-.LP
-.PN XUngrabDeviceKey
-can generate
-.PN BadAlloc ,
-.PN BadDevice ,
-.PN BadMatch ,
-.PN BadValue ,
-and
-.PN BadWindow
-errors.
-.NH 3
-Passively Grabbing a Button
-.XS
-\*(SN Passively Grabbing a Button
-.XE
-.LP
-To establish a passive grab for a single button on an extension device, use
-.PN XGrabDeviceButton .
-The specified device must have previously been opened using the
-.PN XOpenDevice
-function, or the request will fail with a
-.PN BadDevice
-error. If the specified device does not support input class
-.PN Buttons ,
-the request will fail with a
-.PN BadMatch
-error.
-.sM
-.FD 0
-int XGrabDeviceButton(\fIdisplay\fP\^, \fIdevice\fP\^, \fIbutton\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP \^, \fIgrab_window\fP\^,
-.br
- \fIowner_events\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \
-\fIthis_device_mode\fP\^, \fIother_device_mode\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- unsigned int \fIbutton\fP\^;
-.br
- unsigned int \fImodifiers\fP\^;
-.br
- XDevice *\fImodifier_device\fP \^;
-.br
- Window \fIgrab_window\fP\^;
-.br
- Bool \fIowner_events\fP\^;
-.br
- int \fIevent_count\fP\^;
-.br
- XEventClass *\fIevent_list\fP\^;
-.br
- int \fIthis_device_mode\fP\^;
-.br
- int \fIother_device_mode\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIbutton\fP 1i
-Specifies the code of the button that is to be grabbed. You can pass
-either the button or
-.PN AnyButton .
-.IP \fImodifiers\fP 1i
-Specifies the set of keymasks. This mask is the bitwise inclusive OR
-of these keymask bits:
-.PN ShiftMask ,
-.PN LockMask ,
-.PN ControlMask ,
-.PN Mod1Mask ,
-.PN Mod2Mask ,
-.PN Mod3Mask ,
-.PN Mod4Mask ,
-and
-.PN Mod5Mask .
-.IP
-You can also pass
-.PN AnyModifier ,
-which is equivalent to issuing the grab request
-for all possible modifier combinations (including the combination
-of no modifiers).
-.IP \fImodifier_device\fP 1i
-Specifies the device whose modifiers are to be used. If NULL is
-specified, the core X keyboard is used as the modifier_device.
-.IP \fIgrab_window\fP 1i
-Specifies the ID of a window associated with the device specified above.
-.IP \fIowner_events\fP 1i
-Specifies a boolean value of either
-.PN True
-or
-.PN False .
-.IP \fIevent_count\fP 1i
-Specifies the number of elements in the event_list array.
-.IP \fIevent_list\fP 1i
-Specifies a list of event classes that indicates which device events are to be
-reported to the client.
-.IP \fIthis_device_mode\fP 1i
-Controls further processing of events from this device. You can pass one
-of these constants:
-.PN GrabModeSync
-or
-.PN GrabModeAsync .
-.IP \fIother_device_mode\fP 1i
-Controls further processing of events from all other devices. You can pass one
-of these constants:
-.PN GrabModeSync
-or
-.PN GrabModeAsync .
-.LP
-.eM
-.PN XGrabDeviceButton
-is analogous to the core
-.PN 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
-.PN XOpenDevice
-function.
-.LP
-The
-.PN XGrabDeviceButton
-function establishes a passive grab on a device.
-Consequently, in the future,
-.IP \(bu 5
-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),
-.IP \(bu 5
-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,
-.IP \(bu 5
-AND a passive grab on the same device and button/key combination does not
-exist on any ancestor of the grab window,
-.IP \(bu 5
-THEN the device is actively grabbed, as for
-.PN XGrabDevice ,
-the last-grab time is set to the time at which the button was pressed
-(as transmitted in the
-.PN DeviceButtonPress
-event), and the
-.PN DeviceButtonPress
-event is reported.
-.LP
-The interpretation of the remaining arguments is as for
-.PN 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).
-.LP
-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.
-.LP
-A modifier of
-.PN 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
-.PN 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.
-.LP
-.PN XGrabDeviceButton
-generates a
-.PN BadAccess
-error if some other client has issued a
-.PN XGrabDeviceButton
-with the same device and button combination on the same window.
-When using
-.PN AnyModifier
-or
-.PN AnyButton ,
-the request fails completely and the X server generates a
-.PN BadAccess
-error and no grabs are
-established if there is a conflicting grab for any combination.
-.LP
-.PN XGrabDeviceButton
-can generate
-.PN BadAccess ,
-.PN BadClass ,
-.PN BadDevice ,
-.PN BadMatch ,
-.PN BadValue ,
-and
-.PN BadWindow
-errors.
-.sp
-.LP
-To release a passive grab of a button on an extension device, use
-.PN XUngrabDeviceButton .
-.sM
-.FD 0
-int XUngrabDeviceButton(\fIdisplay\fP\^, \fIdevice\fP\^, \fIbutton\fP\^, \fImodifiers\fP\^, \fImodifier_device\fP\^, \fIungrab_window\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- unsigned int \fIbutton\fP\^;
-.br
- unsigned int \fImodifiers\fP\^;
-.br
- XDevice *\fImodifier_device\fP\^;
-.br
- Window \fIungrab_window\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIbutton\fP 1i
-Specifies the code of the button that is to be ungrabbed. You can pass
-either a button or
-.PN AnyButton .
-.IP \fImodifiers\fP 1i
-Specifies the set of keymasks. This mask is the bitwise inclusive OR
-of these keymask bits:
-.PN ShiftMask ,
-.PN LockMask ,
-.PN ControlMask ,
-.PN Mod1Mask ,
-.PN Mod2Mask ,
-.PN Mod3Mask ,
-.PN Mod4Mask ,
-and
-.PN Mod5Mask .
-.IP
-You can also pass
-.PN AnyModifier ,
-which is equivalent to issuing the ungrab key
-request for all possible modifier combinations (including the combination
-of no modifiers).
-.IP \fImodifier_device\fP 1i
-Specifies the device whose modifiers are to be used. If NULL is
-specified, the core X keyboard is used as the modifier_device.
-.IP \fIungrab_window\fP 1i
-Specifies the ID of a window associated with the device specified above.
-.LP
-.eM
-.PN XUngrabDeviceButton
-is analogous to the core
-.PN XUngrabButton
-function. It releases an explicit passive grab for a button
-on an extension device.
-That device must have previously been opened using the
-.PN XOpenDevice
-function, or a
-.PN BadDevice
-error will result.
-.LP
-A modifier of
-.PN AnyModifier
-is equivalent to issuing the request for all
-possible modifier combinations (including the combination of no
-modifiers).
-.LP
-.PN XUngrabDeviceButton
-can generate
-.PN BadAlloc ,
-.PN BadDevice ,
-.PN BadMatch ,
-.PN BadValue ,
-and
-.PN BadWindow
-errors.
-.NH 3
-Thawing a Device
-.XS
-\*(SN Thawing a Device
-.XE
-.LP
-To allow further events to be processed when a device has been frozen, use
-.PN XAllowDeviceEvents .
-.sM
-.FD 0
-int XAllowDeviceEvents(\fIdisplay\fP\^, \fIdevice\fP\^, \fIevent_mode\fP\^, \fItime\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fIevent_mode\fP\^;
-.br
- Time \fItime\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIevent_mode\fP 1i
-Specifies the event mode. You can pass one of these constants:
-.PN AsyncThisDevice ,
-.PN SyncThisDevice ,
-.PN AsyncOtherDevices ,
-.PN ReplayThisDevice ,
-.PN AsyncAll ,
-or
-.PN SyncAll .
-.IP \fItime\fP 1i
-Specifies the time. This may be either a timestamp expressed in
-milliseconds, or
-.PN CurrentTime .
-.LP
-.eM
-.PN XAllowDeviceEvents
-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:
-.IP \(bu 5
-.PN AsyncThisDevice
-.IP
-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,
-.PN AsyncThisDevice
-thaws for all.
-.PN AsyncThisDevice
-has no effect if the specified device is not frozen by the
-client, but the device need not be grabbed by the client.
-.IP \(bu 5
-.PN SyncThisDevice
-.IP
-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.
-.PN SyncThisDevice
-has no effect if the specified device is not frozen by the client
-or is not grabbed by the client.
-.IP \(bu 5
-.PN ReplayThisDevice
-.IP
-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
-.PN GrabDeviceButton
-or from a previous
-.PN AllowDeviceEvents
-with mode
-.PN SyncThisDevice ,
-but not from a
-.PN 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.
-.IP \(bu 5
-.PN AsyncOtherDevices
-.IP
-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,
-.PN AsyncOtherDevices
-``thaws'' for all.
-.PN AsyncOtherDevices
-has no effect if the devices are not frozen by the client,
-but those devices need not be grabbed by the client.
-.IP \(bu 5
-.PN SyncAll
-.IP
-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).
-.PN 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,
-.PN SyncAll
-"thaws" for both (but a subsequent freeze for
-.PN SyncAll
-will freeze each device only once).
-.IP \(bu 5
-.PN AsyncAll
-.IP
-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,
-.PN AsyncAll
-``thaws ''for all.
-If any device is frozen twice by the client on behalf of two separate grabs,
-.PN AsyncAll
-``thaws'' for both.
-.PN AsyncAll
-has no effect unless all devices are frozen by the client.
-.LP
-.PN AsyncThisDevice ,
-.PN SyncThisDevice ,
-and
-.PN ReplayThisDevice
-have no effect on the processing of events from the remaining devices.
-.PN AsyncOtherDevices
-has no effect on the processing of events from the specified device.
-When the event_mode is
-.PN SyncAll
-or
-.PN AsyncAll ,
-the device parameter is ignored.
-.LP
-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.
-.LP
-.PN XAllowDeviceEvents
-can generate
-.PN BadDevice
-and
-.PN BadValue
-errors.
-.NH 3
-Controlling Device Focus
-.XS
-\*(SN Controlling Device Focus
-.XE
-.LP
-The current focus window for an extension input device can be
-determined using the
-.PN XGetDeviceFocus
-function.
-Extension devices are focused using the
-.PN XSetDeviceFocus
-function in the same way that the keyboard is focused using the core
-.PN XSetInputFocus
-function, except that a device ID is passed as
-a function parameter. One additional focus state,
-.PN FollowKeyboard ,
-is provided for extension devices.
-.LP
-To get the current focus state, revert state,
-and focus time of an extension device, use
-.PN XGetDeviceFocus .
-.sM
-.FD 0
-int XGetDeviceFocus(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfocus_return\fP\^, \
-\fIrevert_to_return\fP\^, \fIfocus_time_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- Window *\fIfocus_return\fP\^;
-.br
- int *\fIrevert_to_return\fP\^;
-.br
- Time *\fIfocus_time_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIfocus_return\fP 1i
-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
-.PN None ,
-.PN PointerRoot ,
-or
-.PN FollowKeyboard .
-.IP \fIrevert_to_return\fP 1i
-Specifies the address of a variable into which the server can
-return the current revert_to status for the device.
-.IP \fIfocus_time_return\fP 1i
-Specifies the address of a variable into which the server can
-return the focus time last set for the device.
-.LP
-.eM
-.PN XGetDeviceFocus
-returns the focus state, the revert-to state,
-and the last-focus-time for an extension input device.
-.LP
-.PN XGetDeviceFocus
-can generate
-.PN BadDevice
-and
-.PN BadMatch
-errors.
-.sp
-.LP
-To set the focus of an extension device, use
-.PN XSetDeviceFocus .
-.sM
-.FD 0
-int XSetDeviceFocus(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfocus\fP\^, \
-\fIrevert_to\fP\^, \fItime\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- Window \fIfocus\fP\^;
-.br
- int \fIrevert_to\fP\^;
-.br
- Time \fItime\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIfocus\fP 1i
-Specifies the ID of the window to which the device's focus should be set.
-This may be a window ID, or
-.PN PointerRoot ,
-.PN FollowKeyboard ,
-or
-.PN None .
-.IP \fIrevert_to\fP 1i
-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:
-.PN RevertToParent ,
-.PN RevertToPointerRoot ,
-.PN RevertToNone ,
-or
-.PN RevertToFollowKeyboard .
-.IP \fItime\fP 1i
-Specifies the time. You can pass either a timestamp, expressed in
-milliseconds, or
-.PN CurrentTime .
-.LP
-.eM
-.PN XSetDeviceFocus
-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
-.PN DeviceFocusIn
-and
-.PN DeviceFocusOut
-events.
-.LP
-The action taken by the server when this function is requested depends
-on the value of the focus argument:
-.IP \(bu 5
-If the focus argument is
-.PN 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.
-.IP \(bu 5
-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.
-.IP \(bu 5
-If the focus argument is
-.PN 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.
-.IP \(bu 5
-If the focus argument is
-.PN FollowKeyboard ,
-the focus window is dynamically taken to be the same as the focus
-of the X keyboard at each input event.
-.LP
-The specified focus window must be viewable at the time
-.PN XSetDeviceFocus
-is called. Otherwise, it generates a
-.PN BadMatch
-error.
-If the focus window later becomes not viewable,
-the X server evaluates the revert_to argument
-to determine the new focus window.
-.IP \(bu 5
-If the revert_to argument is
-.PN RevertToParent ,
-the focus reverts to the parent (or the closest viewable ancestor),
-and the new revert_to value is taken to be
-.PN RevertToNone .
-.IP \(bu 5
-If the revert_to argument is
-.PN RevertToPointerRoot ,
-.PN RevertToFollowKeyboard ,
-or
-.PN RevertToNone ,
-the focus reverts to that value.
-.LP
-When the focus reverts,
-the X server generates
-.PN DeviceFocusIn
-and
-.PN DeviceFocusOut
-events, but the last-focus-change time is not affected.
-.LP
-.PN XSetDeviceFocus
-can generate
-.PN BadDevice ,
-.PN BadMatch ,
-.PN BadValue ,
-and
-.PN BadWindow
-errors.
-.NH 3
-Controlling Device Feedback
-.XS
-\*(SN Controlling Device Feedback
-.XE
-.LP
-To determine the current feedback settings of an extension input device, use
-.PN XGetFeedbackControl .
-.sM
-.FD 0
-XFeedbackState * XGetFeedbackControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fInum_feedbacks_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int *\fInum_feedbacks_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fInum_feedbacks_return\fP 1i
-Returns the number of feedbacks supported by the device.
-.LP
-.eM
-.PN XGetFeedbackControl
-returns a list of
-.PN FeedbackState
-structures that describe the feedbacks supported by the specified device.
-There is an
-.PN XFeedbackState
-structure for each class of feedback. These are of
-variable length, but the first three members are common to all.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
-} XFeedbackState;
-.De
-.LP
-.eM
-The common members are as follows:
-.IP \(bu 5
-The class member identifies the class of feedback.
-It may be compared to constants defined in the file
-.Pn < X11/extensions/XI.h >.
-Currently defined feedback constants include:
-.PN KbdFeedbackClass ,
-.PN PtrFeedbackClass ,
-.PN StringFeedbackClass ,
-.PN IntegerFeedbackClass ,
-.PN LedFeedbackClass ,
-and
-.PN BellFeedbackClass .
-.IP \(bu 5
-The length member specifies the length of the
-.PN FeedbackState
-structure and can be used by clients to traverse the list.
-.IP \(bu 5
-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.
-.sp
-.LP
-Those feedbacks equivalent to those
-supported by the core keyboard are reported in class
-.PN KbdFeedback
-using the
-.PN XKbdFeedbackState
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-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;
-.De
-.LP
-.eM
-The additional members of the
-.PN XKbdFeedbackState
-structure report the current state of the feedback:
-.IP \(bu 5
-The click member specifies the key-click volume and has a value in the range
-0 (off) to 100 (loud).
-.IP \(bu 5
-The percent member specifies the bell volume and has a value in the range
-0 (off) to 100 (loud).
-.IP \(bu 5
-The pitch member specifies the bell pitch in Hz. The range of the value is
-implementation-dependent.
-.IP \(bu 5
-The duration member specifies the duration in milliseconds of the bell.
-.IP \(bu 5
-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.
-.IP \(bu 5
-The global_auto_repeat member has a value of
-.PN AutoRepeatModeOn
-or
-.PN AutoRepeatModeOff .
-.IP \(bu 5
-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.
-.sp
-.LP
-Those feedbacks equivalent to those
-supported by the core pointer are reported in class
-.PN PtrFeedback
-using the
-.PN XPtrFeedbackState
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int accelNum;
- int accelDenom;
- int threshold;
-} XPtrFeedbackState;
-.De
-.LP
-.eM
-The additional members of the
-.PN XPtrFeedbackState
-structure report the current state of the feedback:
-.IP \(bu 5
-The accelNum member returns the numerator for the acceleration multiplier.
-.IP \(bu 5
-The accelDenom member returns the denominator for the acceleration multiplier.
-.IP \(bu 5
-The accelDenom member returns the threshold for the acceleration.
-.sp
-.LP
-Integer feedbacks are those capable of displaying integer numbers
-and reported via the
-.PN XIntegerFeedbackState
-structure.
-The minimum and maximum values that they can display are reported.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int resolution;
- int minVal;
- int maxVal;
-} XIntegerFeedbackState;
-.De
-.LP
-.eM
-The additional members of the
-.PN XIntegerFeedbackState
-structure report the capabilities of the feedback:
-.IP \(bu 5
-The resolution member specifies the number of digits that the feedback
-can display.
-.IP \(bu 5
-The minVal member specifies the minimum value that the feedback can display.
-.IP \(bu 5
-The maxVal specifies the maximum value that the feedback can display.
-.sp
-.LP
-String feedbacks are those that can display character information
-and are reported via the
-.PN XStringFeedbackState
-structure.
-Clients set these feedbacks by passing a list of
-.PN KeySyms
-to be displayed.
-The
-.PN XGetFeedbackControl
-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
-.PN XStringFeedbackState
-structure is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int max_symbols;
- int num_syms_supported;
- KeySym *syms_supported;
-} XStringFeedbackState;
-.De
-.LP
-.eM
-The additional members of the
-.PN XStringFeedbackState
-structure report the capabilities of the feedback:
-.IP \(bu 5
-The max_symbols member specifies the maximum number of symbols
-that can be displayed.
-.IP \(bu 5
-The syms_supported member is a pointer to the list of supported symbols.
-.IP \(bu 5
-The num_syms_supported member specifies the length of the list of supported symbols.
-.sp
-.LP
-Bell feedbacks are those that can generate a sound
-and are reported via the
-.PN XBellFeedbackState
-structure.
-Some implementations may support a bell as part of a
-.PN KbdFeedback
-feedback. Class
-.PN 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
-.PN XKbdFeedbackState
-structure.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int percent;
- int pitch;
- int duration;
-} XBellFeedbackState;
-.De
-.LP
-.eM
-Led feedbacks are those that can generate a light and are reported via the
-.PN 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
-.PN KbdFeedback
-feedback.
-Class
-.PN LedFeedback
-is provided for implementations that do not choose to do
-so and for devices that support multiple led feedbacks.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- Mask led_values;
- Mask led_mask;
-} XLedFeedbackState;
-.De
-.LP
-.eM
-.PN XGetFeedbackControl
-can generate
-.PN BadDevice
-and
-.PN BadMatch
-errors.
-.sp
-.LP
-To free the information returned by the
-.PN XGetFeedbackControl
-function, use
-.PN XFreeFeedbackList .
-.sM
-.FD 0
-void XFreeFeedbackList(\fIlist\fP\^)
-.br
- XFeedbackState *\fIlist\fP\^;
-.FN
-.IP \fIlist\fP 1i
-Specifies the pointer to the
-.PN XFeedbackState
-structure returned by
-a previous call to
-.PN XGetFeedbackControl .
-.LP
-.eM
-.PN XFreeFeedbackList
-frees the list of feedback control information.
-.sp
-.LP
-To change the settings of a feedback on an extension device, use
-.PN XChangeFeedbackControl .
-This function modifies the current control values of the specified feedback
-using information passed in the appropriate
-.PN XFeedbackControl
-structure for the feedback.
-Which values are modified depends on the valuemask passed.
-.sM
-.FD 0
-int XChangeFeedbackControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fIvaluemask\fP\^, \
-\fIvalue\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- unsigned long \fIvaluemask\fP\^;
-.br
- XFeedbackControl *\fIvalue\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIvaluemask\fP 1i
-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.
-.IP \fIvalue\fP 1i
-Specifies a pointer to the
-.PN XFeedbackControl
-structure.
-.LP
-.eM
-.PN XChangeFeedbackControl
-controls the device characteristics described by the
-.PN XFeedbackControl
-structure.
-There is an
-.PN 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:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
-} XFeedbackControl;
-.De
-.LP
-.eM
-Feedback class
-.PN KbdFeedback
-controls feedbacks equivalent to those provided by the core keyboard using the
-.PN KbdFeedbackControl
-structure, which is defined as follows:.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-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;
-.De
-.LP
-.eM
-This class controls the device characteristics described by the
-.PN XKbdFeedbackControl
-structure. These include the key_click_percent,
-global_auto_repeat, and individual key auto-repeat. Valid modes
-are
-.PN AutoRepeatModeOn ,
-.PN AutoRepeatModeOff ,
-and
-.PN AutoRepeatModeDefault .
-.LP
-Valid masks are as follows:
-.sM
-.LP
-.TS
-lw(.5i) lw(2.5i) lw(.8i).
-T{
-#define
-T} T{
-.PN DvKeyClickPercent
-T} T{
-(1L << 0)
-T}
-T{
-#define
-T} T{
-.PN DvPercent
-T} T{
-(1L << 1)
-T}
-T{
-#define
-T} T{
-.PN DvPitch
-T} T{
-(1L << 2)
-T}
-T{
-#define
-T} T{
-.PN DvDuration
-T} T{
-(1L << 3)
-T}
-T{
-#define
-T} T{
-.PN DvLed
-T} T{
-(1L << 4)
-T}
-T{
-#define
-T} T{
-.PN DvLedMode
-T} T{
-(1L << 5)
-T}
-T{
-#define
-T} T{
-.PN DvKey
-T} T{
-(1L << 6)
-T}
-T{
-#define
-T} T{
-.PN DvAutoRepeatMode
-T} T{
-(1L << 7)
-T}
-.TE
-.eM
-.LP
-Feedback class
-.PN PtrFeedback
-controls feedbacks equivalent to those provided by the core pointer using the
-.PN PtrFeedbackControl
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int accelNum;
- int accelDenom;
- int threshold;
-} XPtrFeedbackControl;
-.De
-.LP
-.eM
-Which values are modified depends on the valuemask passed.
-.LP
-Valid masks are as follows:
-.sM
-.LP
-.TS
-lw(.5i) lw(2.5i) lw(.8i).
-T{
-#define
-T} T{
-.PN DvAccelnum
-T} T{
-(1L << 0)
-T}
-T{
-#define
-T} T{
-.PN DvAccelDenom
-T} T{
-(1L << 1)
-T}
-T{
-#define
-T} T{
-.PN DvThreshold
-T} T{
-(1L << 2)
-T}
-.TE
-.LP
-.eM
-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
-.PN BadValue
-error, as does a zero value
-for the accelDenominator field.
-.LP
-This request fails with a
-.PN 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
-.PN Relative
-to
-.PN Absolute
-by an
-.PN XSetDeviceMode
-request, valuator control values
-will be ignored by the server while the device is in that mode.
-.LP
-Feedback class
-.PN IntegerFeedback
-controls integer feedbacks displayed on input devices and are
-reported via the
-.PN IntegerFeedbackControl
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int int_to_display;
-} XIntegerFeedbackControl;
-.De
-.LP
-.eM
-Valid masks are as follows:
-.sM
-.LP
-.TS
-lw(.5i) lw(2.5i) lw(.8i).
-T{
-#define
-T} T{
-.PN DvInteger
-T} T{
-(1L << 0)
-T}
-.TE
-.LP
-.eM
-Feedback class
-.PN StringFeedback
-controls string feedbacks displayed on input devices
-and reported via the
-.PN StringFeedbackControl
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int num_keysyms;
- KeySym *syms_to_display;
-} XStringFeedbackControl;
-.De
-.LP
-.eM
-Valid masks are as follows:
-.sM
-.LP
-.TS
-lw(.5i) lw(2.5i) lw(.8i).
-T{
-#define
-T} T{
-.PN DvString
-T} T{
-(1L << 0)
-T}
-.TE
-.LP
-.eM
-Feedback class
-.PN BellFeedback
-controls a bell on an input device and is reported via the
-.PN BellFeedbackControl
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int percent;
- int pitch;
- int duration;
-} XBellFeedbackControl;
-.De
-.LP
-.eM
-Valid masks are as follows:
-.sM
-.LP
-.TS
-lw(.5i) lw(2.5i) lw(.8i).
-T{
-#define
-T} T{
-.PN DvPercent
-T} T{
-(1L << 1)
-T}
-T{
-#define
-T} T{
-.PN DvPitch
-T} T{
-(1L << 2)
-T}
-T{
-#define
-T} T{
-.PN DvDuration
-T} T{
-(1L << 3)
-T}
-.TE
-.LP
-.eM
-Feedback class
-.PN LedFeedback
-controls lights on an input device and are reported via the
-.PN LedFeedbackControl
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID class;
- int length;
- XID id;
- int led_mask;
- int led_values;
-} XLedFeedbackControl;
-.De
-.LP
-.eM
-Valid masks are as follows:
-.sM
-.LP
-.TS
-lw(.5i) lw(2.5i) lw(.8i).
-T{
-#define
-T} T{
-.PN DvLed
-T} T{
-(1L << 4)
-T}
-T{
-#define
-T} T{
-.PN DvLedMode
-T} T{
-(1L << 5)
-T}
-.TE
-.LP
-.eM
-.PN XChangeFeedbackControl
-can generate
-.PN BadDevice ,
-.PN BadFeedBack ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.NH 3
-Ringing a Bell on an Input Device
-.XS
-\*(SN Ringing a Bell on an Input Device
-.XE
-.LP
-To ring a bell on an extension input device, use
-.PN XDeviceBell .
-.sM
-.FD 0
-int XDeviceBell(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfeedbackclass\fP\^, \
-\fIfeedbackid\fP\^, \fIpercent\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- XID \fIfeedbackclass\fP\^, \fIfeedbackid\fP\^;
-.br
- int \fIpercent\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIfeedbackclass\fP 1i
-Specifies the feedbackclass. Valid values are
-.PN KbdFeedbackClass
-and
-.PN BellFeedbackClass .
-.IP \fIfeedbackid\fP 1i
-Specifies the ID of the feedback that has the bell.
-.IP \fIpercent\fP 1i
-Specifies the volume in the range -100 (quiet) to 100 percent (loud).
-.LP
-.eM
-.PN XDeviceBell
-is analogous to the core
-.PN 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
-.PN BadValue
-error results.
-The volume at which the bell rings when the percent argument is nonnegative is:
-.LP
-.DS
- base - [(base * percent) / 100] + percent
-.DE
-.LP
-The volume at which the bell rings
-when the percent argument is negative is:
-.LP
-.DS
- base + [(base * percent) / 100]
-.DE
-.LP
-To change the base volume of the bell, use
-.PN XChangeFeedbackControl .
-.LP
-.PN XDeviceBell
-can generate
-.PN BadDevice
-and
-.PN BadValue
-errors.
-.NH 3
-Controlling Device Encoding
-.XS
-\*(SN Controlling Device Encoding
-.XE
-.LP
-To get the key mapping of an extension device that supports input class
-.PN Keys ,
-use
-.PN XGetDeviceKeyMapping .
-.sM
-.FD 0
-KeySym * XGetDeviceKeyMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfirst_keycode_wanted\fP\^, \fIkeycode_count\fP\^,
-.br
- \fIkeysyms_per_keycode_return\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- KeyCode \fIfirst_keycode_wanted\fP\^;
-.br
- int \fIkeycode_count\fP\^;
-.br
- int *\fIkeysyms_per_keycode_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIfirst_keycode_wanted\fP 1i
-Specifies the first keycode that is to be returned.
-.IP \fIkeycode_count\fP 1i
-Specifies the number of keycodes that are to be returned.
-.IP \fIkeysyms_per_keycode_return\fP 1i
-Returns the number of keysyms per keycode.
-.LP
-.eM
-.PN XGetDeviceKeyMapping
-is analogous to the core
-.PN XGetKeyboardMapping
-function.
-It returns the symbols for the specified number of keycodes for the
-specified extension device.
-.LP
-.PN XGetDeviceKeyMapping
-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
-.PN XListInputDevices
-request (else a
-.PN BadValue
-error results). The following value:
-.DS
-first_keycode_wanted + keycode_count \- 1
-.DE
-.LP
-must be less than or equal to max-keycode as returned
-by the
-.PN XListInputDevices
-request (else a
-.PN BadValue
-error results).
-.LP
-The number of elements in the keysyms list is as follows:
-.DS
-keycode_count * keysyms_per_keycode_return
-.DE
-And KEYSYM number N (counting from zero) for keycode K has an index
-(counting from zero), in keysyms, of the following:
-.DS
-(K \- first_keycode_wanted) * keysyms_per_keycode_return + N
-.DE
-.LP
-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
-.PN NoSymbol
-is used to fill in unused elements for individual keycodes.
-.LP
-To free the data returned by this function, use
-.PN XFree .
-.LP
-If the specified device has not first been opened by this client via
-.PN XOpenDevice ,
-this request will fail with a
-.PN BadDevice
-error.
-If that device does not support input class
-.PN Keys ,
-this request will fail with a
-.PN BadMatch
-error.
-.LP
-.PN XGetDeviceKeyMapping
-can generate
-.PN BadDevice ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.sp
-.LP
-To change the keyboard mapping of an extension device that supports input class
-.PN Keys ,
-use
-.PN XChangeDeviceKeyMapping .
-.sM
-.FD )
-int
-XChangeDeviceKeyMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fIfirst_keycode\fP\^, \
-\fIkeysyms_per_keycode\fP\^, \fIkeysyms\fP\^,
-.br
- \fInum_codes\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fIfirst_keycode\fP\^;
-.br
- int \fIkeysyms_per_keycode\fP\^;
-.br
- KeySym *\fIkeysyms\fP\^;
-.br
- int \fInum_codes\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIfirst_keycode\fP 1i
-Specifies the first keycode that is to be changed.
-.IP \fIkeysyms_per_keycode\fP 1i
-Specifies the keysyms that are to be used.
-.IP \fIkeysyms\fP 1i
-Specifies a pointer to an array of keysyms.
-.IP \fInum_codes\fP 1i
-Specifies the number of keycodes that are to be changed.
-.LP
-.eM
-.PN XChangeDeviceKeyMapping
-is analogous to the core
-.PN XChangeKeyboardMapping
-function.
-It defines the symbols for the specified number of keycodes for the
-specified extension keyboard device.
-.LP
-If the specified device has not first been opened by this client via
-.PN XOpenDevice ,
-this request will fail with a
-.PN BadDevice
-error.
-If the specified device does not support input class
-.PN Keys ,
-this request will fail with a
-.PN BadMatch
-error.
-.LP
-The number of elements in the keysyms list must be a multiple of
-keysyms_per_keycode. Otherwise,
-.PN XChangeDeviceKeyMapping
-generates a
-.PN BadLength
-error.
-The specified first_keycode must be greater than or equal to
-the min_keycode value returned by the
-.PN ListInputDevices
-request, or this request will fail with a
-.PN BadValue
-error. In addition, if the following expression is not less than
-the max_keycode value returned by the
-.PN ListInputDevices
-request, the request will fail with a
-.PN BadValue
-error:
-.DS
- first_keycode + (num_codes / keysyms_per_keycode) - 1
-.DE
-.LP
-.PN XChangeDeviceKeyMapping
-can generate
-.PN BadAlloc ,
-.PN BadDevice ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.sp
-.LP
-To obtain the keycodes that are used as modifiers on an
-extension device that supports input class
-.PN Keys ,
-use
-.PN XGetDeviceModifierMapping .
-.sM
-.FD 0
-XModifierKeymap * XGetDeviceModifierMapping(\fIdisplay\fP\^, \fIdevice\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.LP
-.eM
-.PN XGetDeviceModifierMapping
-is analogous to the core
-.PN XGetModifierMapping
-function.
-The
-.PN XGetDeviceModifierMapping
-function returns a newly created
-.PN XModifierKeymap
-structure that contains the keys being used as
-modifiers for the specified device.
-The structure should be freed after use with
-.PN XFreeModifierMapping .
-If only zero values appear in the set for any modifier,
-that modifier is disabled.
-.LP
-.PN XGetDeviceModifierMapping
-can generate
-.PN BadDevice
-and
-.PN BadMatch
-errors.
-.sp
-.LP
-To set which keycodes are to be used as modifiers for an extension device, use
-.PN XSetDeviceModifierMapping .
-.sM
-.FD 0
-int XSetDeviceModifierMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fImodmap\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- XModifierKeymap *\fImodmap\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fImodmap\fP 1i
-Specifies a pointer to the
-.PN XModifierKeymap
-structure.
-.LP
-.eM
-.PN XSetDeviceModifierMapping
-is analogous to the core
-.PN XSetModifierMapping
-function.
-The
-.PN XSetDeviceModifierMapping
-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,
-.PN XSetDeviceModifierMapping
-generates a
-.PN BadValue
-error.
-There are eight modifiers, and the modifiermap member of the
-.PN XModifierKeymap
-structure contains eight sets of max_keypermod
-keycodes, one for each modifier in the order
-.PN Shift ,
-.PN Lock ,
-.PN Control ,
-.PN Mod1 ,
-.PN Mod2 ,
-.PN Mod3 ,
-.PN Mod4 ,
-and
-.PN 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
-.PN XListInputDevices
-function.
-Otherwise,
-.PN XSetModifierMapping
-generates a
-.PN BadValue
-error.
-No keycode may appear twice in the entire map.
-Otherwise, it generates a
-.PN BadValue
-error.
-.LP
-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
-.PN 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
-.PN MappingBusy ,
-and none of the modifiers are changed.
-.PN XSetModifierMapping
-generates a
-.PN DeviceMappingNotify
-event on a
-.PN MappingSuccess
-status.
-.LP
-.PN XSetDeviceModifierMapping
-can generate
-.PN BadAlloc ,
-.PN BadDevice ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.NH 3
-Controlling Button Mapping
-.XS
-\*(SN Controlling Button Mapping
-.XE
-.LP
-To set the mapping of the buttons on an extension device, use
-.PN XSetDeviceButtonMapping .
-.sM
-.FD 0
-int XSetDeviceButtonMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fImap\fP\^, \fInmap\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- unsigned char \fImap\fP\^[];
-.br
- int \fInmap\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fImap\fP 1i
-Specifies the mapping list.
-.IP \fInmap\fP 1i
-Specifies the number of items in the mapping list.
-.LP
-.eM
-.PN XSetDeviceButtonMapping
-sets the mapping of the buttons on an extension device.
-If it succeeds, the X server generates a
-.PN DeviceMappingNotify
-event, and
-.PN XSetDeviceButtonMapping
-returns
-.PN MappingSuccess .
-Elements of the list are indexed starting from one.
-The length of the list must be the same as
-.PN XGetDeviceButtonMapping
-would return, or a
-.PN 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
-.PN BadValue
-error results.
-If any of the buttons to be altered are logically in the down state,
-.PN XSetDeviceButtonMapping
-returns
-.PN MappingBusy ,
-and the mapping is not changed.
-.LP
-.PN XSetDeviceButtonMapping
-can generate
-.PN BadDevice ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.sp
-.LP
-To get the button mapping, use
-.PN XGetDeviceButtonMapping .
-.sM
-.FD 0
-int XGetDeviceButtonMapping(\fIdisplay\fP\^, \fIdevice\fP\^, \fImap_return\fP\^, \fInmap\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- unsigned char \fImap_return\fP\^[];
-.br
- int \fInmap\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fImap_return\fP 1i
-Specifies the mapping list.
-.IP \fInmap\fP 1i
-Specifies the number of items in the mapping list.
-.LP
-.eM
-.PN XGetDeviceButtonMapping
-returns the current mapping of the specified extension device.
-Elements of the list are indexed starting from one.
-.PN XGetDeviceButtonMapping
-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.
-.LP
-.PN XGetDeviceButtonMapping
-can generate
-.PN BadDevice
-and
-.PN BadMatch
-errors.
-.NH 3
-Obtaining the State of a Device
-.XS
-\*(SN Obtaining the State of a Device
-.XE
-.LP
-To obtain information that describes the state of the keys, buttons, and
-valuators of an extension device, use
-.PN XQueryDeviceState .
-.sM
-.FD 0
-XDeviceState * XQueryDeviceState(\fIdisplay\fP\^, \fIdevice\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.LP
-.eM
-.PN XQueryDeviceState
-returns a pointer to an
-.PN XDeviceState
-structure, which points to a list of
-structures that describe the state of the keys, buttons, and valuators
-on the device:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID device_id;
- int num_classes;
- XInputClass *data;
-} XDeviceState;
-.De
-.LP
-.eM
-The structures are of variable length, but the first
-two members are common to all and are as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- unsigned char class;
- unsigned char length;
-} XInputClass;
-.De
-.LP
-.eM
-The class member contains a class identifier. This identifier can be
-compared with constants defined in the file
-.Pn < X11/extensions/XI.h >.
-Currently defined constants are:
-.PN KeyClass ,
-.PN ButtonClass ,
-and
-.PN ValuatorClass .
-.LP
-The length member contains the length of the structure and can be used
-by clients to traverse the list.
-.LP
-The
-.PN 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:
-.DS 0
-.TA .5i 1.5i 2.5i
-.ta .5i 1.5i 2.5i
- DeviceMode 1 << 0 Relative = 0, Absolute = 1
- ProximityState 1 << 1 InProximity = 0, OutOfProximity = 1
-.DE
-The valuators member contains a pointer to an array of integers that
-describe the current value of the valuators.
-If the mode is
-.PN Relative ,
-these values are undefined.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- unsigned char class;
- unsigned char length;
- unsigned char num_valuators;
- unsigned char mode;
- int *valuators;
-} XValuatorState;
-.De
-.LP
-.eM
-The
-.PN 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.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- unsigned char class;
- unsigned char length;
- short num_keys;
- char keys[32];
-} XKeyState;
-.De
-.LP
-.eM
-The
-.PN 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.
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- unsigned char class;
- unsigned char length;
- short num_buttons;
- char buttons[32];
-} XButtonState;
-.De
-.LP
-.eM
-.PN XQueryDeviceState
-can generate
-.PN BadDevice
-errors.
-.sp
-.LP
-To free the data returned by this function, use
-.PN XFreeDeviceState .
-.sM
-.FD 0
-void XFreeDeviceState(\fIstate\fP\^)
-.br
- XDeviceState *state;
-.FN
-.IP \fIstate\fP 1i
-Specifies the pointer to the
-.PN XDeviceState
-data returned by a previous call to
-.PN XQueryDeviceState .
-.LP
-.eM
-.PN XFreeDeviceState
-frees the device state data.
-.NH 2
-Events
-.XS
-\*(SN Events
-.XE
-.LP
-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:
-.IP \(bu 5
-Event types
-.IP \(bu 5
-Event classes
-.IP \(bu 5
-Event structures
-.NH 3
-Event Types
-.XS
-\*(SN Event Types
-.XE
-.LP
-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.
-.LP
-The core input event types are constants and are defined in the header file
-.Pn < 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.
-.LP
-The client program determines the event type for an extension event by using
-the information returned by the
-.PN XOpenDevice
-request.
-This type can then be used for comparison with the type field
-of events received by the client.
-.LP
-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.
-.LP
-The following table lists the event category and its associated event
-type or types.
-.TS
-lw(2.5i) lw(2.5i).
-_
-.sp 6p
-\fBEvent Category Event Type\fP
-.sp 6p
-_
-T{
-Device key
-T} T{
-.PN DeviceKeyPress
-T}
- T{
-.PN DeviceKeyRelease
-T}
-.sp 3p
-T{
-Device motion
-T} T{
-.PN DeviceButtonPress
-T}
- T{
-.PN DeviceButtonRelease
-T}
- T{
-.PN DeviceMotionNotify
-T}
-.sp 3p
-T{
-Device input focus
-T} T{
-.PN DeviceFocusIn
-T}
- T{
-.PN DeviceFocusOut
-T}
-.sp 3p
-T{
-Device state notification
-T} T{
-.PN DeviceStateNotify
-T}
-.sp 3p
-T{
-Device proximity
-T} T{
-.PN ProximityIn
-T}
- T{
-.PN ProximityOut
-T}
-.sp 3p
-T{
-Device mapping
-T} T{
-.PN DeviceMappingNotify
-T}
-.sp 3p
-T{
-Device change
-T} T{
-.PN ChangeDeviceNotify
-T}
-.sp 6p
-_
-.TE
-.NH 3
-Event Classes
-.XS
-\*(SN Event Classes
-.XE
-.LP
-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.
-.LP
-The core input event masks are constants and are defined in the header file
-.Pn < 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.
-.LP
-The event class for an extension event and device is obtained from
-information returned by the
-.PN XOpenDevice
-function.
-This class can then be used in an
-.PN XSelectExtensionEvent
-request to ask that events of that type from that device be sent to
-the client program.
-.LP
-For
-.PN 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
-.PN DeviceButtonRelease
-event for each
-.PN DeviceButtonPress
-event it receives, it should specify the
-.PN DeviceButtonPressGrab
-class in addition to the
-.PN DeviceButtonPress
-class.
-This restricts the client in that only one client at a time
-may request
-.PN DeviceButtonPress
-events from the same device and
-window if any client specifies this class.
-.LP
-If any client has specified the
-.PN DeviceButtonPressGrab
-class, any requests by any other client that specify the same device
-and window and specify either
-.PN DeviceButtonPress
-or
-.PN DeviceButtonPressGrab
-will cause an
-.PN Access
-error to be generated.
-.LP
-If only the
-.PN 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.
-.LP
-The client may also select
-.PN DeviceMotion
-events only when a button is down.
-It does this by specifying the event classes
-.PN DeviceButton1Motion
-through
-.PN DeviceButton5Motion .
-An input device will support only
-as many button motion classes as it has buttons.
-.NH 3
-Event Structures
-.XS
-\*(SN Event Structures
-.XE
-.LP
-Each extension event type has a corresponding structure declared in
-.Pn < X11/extensions/XInput.h >.
-All event structures have the following common members:
-.IP type 1i
-Set to the event type number that uniquely identifies it. For example,
-when the X server reports a
-.PN DeviceKeyPress
-event to a client application, it sends an
-.PN XDeviceKeyPressEvent
-structure.
-.IP serial 1i
-Set from the serial number reported in the protocol but expanded from the
-16-bit least significant bits to a full 32-bit value.
-.IP send_event 1i
-Set to
-.PN True
-if the event came from an
-.PN XSendEvent
-request.
-.IP display 1i
-Set to a pointer to a structure that defines the display
-on which the event was read.
-.LP
-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.
-.NH 4
-Device Key Events
-.XS
-\*(SN Device Key Events
-.XE
-.LP
-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
-.PN Valuators ,
-but is not reporting absolute mode data,
-the axes_count member contains zero (0).
-.LP
-The location reported in
-the x, y and x_root, y_root members is the location of the core X pointer.
-.LP
-The
-.PN XDeviceKeyEvent
-structure is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.eM
-.NH 4
-Device Button Events
-.XS
-\*(SN Device Button Events
-.XE
-.LP
-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
-.PN Valuators ,
-but is not reporting absolute mode data,
-the axes_count member contains zero (0).
-.LP
-The location reported in
-the x, y and x_root, y_root members is the location of the core X pointer.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.eM
-.NH 4
-Device Motion Events
-.XS
-\*(SN Device Motion Events
-.XE
-.LP
-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.
-.LP
-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.
-.LP
-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.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.eM
-.NH 4
-Device Focus Events
-.XS
-\*(SN Device Focus Events
-.XE
-.LP
-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.
-.LP
-.PN DeviceFocusIn
-and
-.PN DeviceFocusOut
-events are generated for
-focus changes of extension devices in the same manner as core focus
-events are generated.
-.LP
-.sM
-.Ds 0
-.TA .5i 2.5i
-.ta .5i 2.5i
-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;
-.De
-.eM
-.NH 4
-Device StateNotify Event
-.XS
-\*(SN Device StateNotify Event
-.XE
-.LP
-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
-.PN DeviceFocusIn
-event and
-.PN EnterNotify
-event and is delivered to clients who have selected
-.PN XDeviceStateNotify
-events.
-.LP
-If the device supports input class
-.PN Valuators ,
-the mode member in the
-.PN XValuatorStatus
-structure is a bitmask that reports the device mode,
-proximity state, and other state information.
-The following bits are currently defined:
-.DS 0
-.TA .5i 1.5i
-.ta .5i 1.5i
- 0x01 Relative = 0, Absolute = 1
- 0x02 InProximity = 0, OutOfProximity = 1
-.DE
-.LP
-If the device supports more valuators than can be reported in a single
-.PN XEvent ,
-multiple
-.PN XDeviceStateNotify
-events will be generated.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.eM
-.NH 4
-Device Mapping Event
-.XS
-\*(SN Device Mapping Event
-.XE
-.LP
-This event is equivalent to the core
-.PN MappingNotify
-event.
-It notifies client programs when the mapping of keys,
-modifiers, or buttons on an extension device has changed.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.eM
-.NH 4
-ChangeDeviceNotify Event
-.XS
-\*(SN ChangeDeviceNotify Event
-.XE
-.LP
-This event has no equivalent in the core protocol. It notifies client
-programs when one of the core devices has been changed.
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-typedef struct {
- int type;
- unsigned long serial;
- Bool send_event;
- Display *display;
- Window window;
- XID deviceid;
- Time time;
- int request;
-} XChangeDeviceNotifyEvent;
-.De
-.eM
-.NH 4
-Proximity Events
-.XS
-\*(SN Proximity Events
-.XE
-.LP
-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.
-.LP
-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
-.PN Valuators ,
-but is not reporting absolute mode data,
-the axes_count member contains zero (0).
-.LP
-.sM
-.Ds 0
-.TA .5i 3i
-.ta .5i 3i
-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;
-.De
-.eM
-.NH 2
-Event Handling Functions
-.XS
-\*(SN Event Handling Functions
-.XE
-.LP
-This section discusses the X Input Extension
-event handling functions that allow you to:
-.IP \(bu 5
-Determine the extension version
-.IP \(bu 5
-List the available devices
-.IP \(bu 5
-Enable and disable extension devices
-.IP \(bu 5
-Change the mode of a device
-.IP \(bu 5
-Initialize valuators on an input device
-.IP \(bu 5
-Get input device controls
-.IP \(bu 5
-Change input device controls
-.IP \(bu 5
-Select extension device events
-.IP \(bu 5
-Determine selected device events
-.IP \(bu 5
-Control event propogation
-.IP \(bu 5
-Send an event
-.IP \(bu 5
-Get motion history
-.NH 3
-Determining the Extension Version
-.XS
-\*(SN Determining the Extension Version
-.XE
-.LP
-.sM
-.FD 0
-XExtensionVersion * XGetExtensionVersion(\fIdisplay\fP\^, \fIname\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- char *\fIname\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIname\fP 1i
-Specifies the name of the desired extension.
-.LP
-.eM
-.PN XGetExtensionVersion
-allows a client to determine whether a server supports
-the desired version of the input extension.
-.LP
-The
-.PN XExtensionVersion
-structure returns information about the version of the extension
-supported by the server and is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- Bool present;
- short major_version;
- short minor_version;
-} XExtensionVersion;
-.De
-.LP
-.eM
-The major and minor versions can be compared with constants defined in
-the header file
-.Pn < X11/extensions/XI.h >.
-Each version is a superset of the previous versions.
-.LP
-You should use
-.PN XFree
-to free the data returned by this function.
-.NH 3
-Listing Available Devices
-.XS
-\*(SN Listing Available Devices
-.XE
-.LP
-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
-.PN XListInputDevices
-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
-.Pn < X11/extensions/XI.h >
-header file in an
-.PN XInternAtom
-request to determine the device type of the desired device. This type
-can then be compared with the device types returned by the
-.PN XListInputDevices
-request.
-.LP
-.sM
-.FD 0
-XDeviceInfo * XListInputDevices(\fIdisplay\fP\^, \fIndevices\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- int *\fIndevices\fP\^; /* RETURN */
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIndevices\fP 1i
-Specifies the address of a variable into which the server
-can return the number of input devices available to the X server.
-.LP
-.eM
-.PN XListInputDevices
-allows a client to determine which devices
-are available for X input and information about those devices.
-An array of
-.PN XDeviceInfo
-structures is returned, with one element in the array for each device.
-The number of devices is returned in the ndevices argument.
-.LP
-The X pointer device and X keyboard device are reported, as well as
-all available extension input devices. The use member of the
-.PN XDeviceInfo
-structure specifies the current use of the device.
-If the value of this member is
-.PN IsXPointer ,
-the device is the X pointer device. If the value is
-.PN IsXKeyboard ,
-the device is the X keyboard device. If the value is
-.PN IsXExtensionDevice ,
-the device is available for use as an extension input device.
-.LP
-Each
-.PN 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.
-.LP
-If the device supports input class
-.PN Valuators ,
-one of the structures pointed to by the
-.PN XDeviceInfo
-structure will be an
-.PN XValuatorInfo
-structure. The axes member of that structure
-contains the address of an array of
-.PN 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
-.PN XValuatorInfo
-structure.
-The size of the motion buffer for the device is
-reported in the motion_buffer member of the
-.PN XValuatorInfo
-structure.
-.LP
-The
-.PN XDeviceInfo
-structure is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct _XDeviceInfo {
- XID id;
- Atom type;
- char *name;
- int num_classes;
- int use;
- XAnyClassPtr inputclassinfo;
-} XDeviceInfo;
-.De
-.LP
-.eM
-The structures pointed to by the
-.PN XDeviceInfo
-structure are defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-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;
-.De
-.LP
-.eM
-The
-.PN XAxisInfo
-structure pointed to by the
-.PN XValuatorInfo
-structure is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct _XAxisInfo {
- int resolution;
- int min_value;
- int max_value;
-} XAxisInfo;
-.De
-.LP
-.eM
-The following atom names are defined in the
-.Pn < X11/extensions/XI.h >
-header file.
-.Ds 0
-.TA 2i
-.ta 2i
-\s-1MOUSE QUADRATURE
-TABLET SPACEBALL
-KEYBOARD DATAGLOVE
-TOUCHSCREEN EYETRACKER
-TOUCHPAD CURSORKEYS
-BUTTONBOX FOOTMOUSE
-BARCODE ID_MODULE
-KNOB_BOX ONE_KNOB
-TRACKBALL NINE_KNOB\s+1
-.De
-.LP
-These names can be used in an
-.PN XInternAtom
-request to return an atom that can be used for comparison
-with the type member of the
-.PN XDeviceInfo
-structure.
-.LP
-.PN XListInputDevices
-returns NULL if there are no input devices to list.
-.sp
-.LP
-To free the data returned by
-.PN XListInputDevices ,
-use
-.PN XFreeDeviceList .
-.sp
-.LP
-.sM
-.FD 0
-void XFreeDeviceList(\fIlist\fP\^)
-.br
- XDeviceInfo *\fIlist\fP\^;
-.FN
-.IP \fIlist\fP 1i
-Specifies the pointer to the
-.PN XDeviceInfo
-array returned by a previous call to
-.PN XListInputDevices .
-.LP
-.eM
-.PN XFreeDeviceList
-frees the list of input device information.
-.NH 3
-Enabling and Disabling Extension Devices
-.XS
-\*(SN Enabling and Disabling Extension Devices
-.XE
-.LP
-Each client program that wishes to access an extension device must request
-that the server open that device by calling the
-.PN XOpenDevice
-function.
-.sM
-.FD 0
-XDevice * XOpenDevice(\fIdisplay\fP\^, \fIdevice_id\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XID \fIdevice_id\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice_id\fP 1i
-Specifies the ID that uniquely identifies the device to be opened.
-This ID is obtained from the
-.PN XListInputDevices
-request.
-.LP
-.eM
-.PN XOpenDevice
-opens the device for the requesting client and, on success, returns an
-.PN XDevice
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID device_id;
- int num_classes;
- XInputClassInfo *classes;
-} XDevice;
-.De
-.LP
-.eM
-The
-.PN XDevice
-structure contains a pointer to an array of
-.PN XInputClassInfo
-structures. Each element in that array
-contains information about events of a particular input class supported
-by the input device.
-.LP
-The
-.PN XInputClassInfo
-structure is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- unsigned char input_class;
- unsigned char event_type_base;
-} XInputClassInfo;
-.De
-.LP
-.eM
-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:
-.LP
-.DS 0
-.TA .5i
-.ta .5i
- DeviceKeyPress(XDevice *device, event_type, event_class)
-.DE
-.LP
-The macro will fill in the values of the event class to be used in an
-.PN XSelectExtensionEvent
-request to select the event and the event type to be used in comparing
-with the event types of events received via
-.PN XNextEvent .
-.LP
-.PN XOpenDevice
-can generate
-.PN BadDevice
-errors.
-.sp
-.LP
-Before terminating, the client program should request that the server close
-the device by calling the
-.PN XCloseDevice
-function.
-.sM
-.FD 0
-int XCloseDevice(\fIdisplay\fP\^, \fIdevice\fP\^)
-.br
- Display *display;
-.br
- XDevice *device;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the device to be closed.
-.LP
-.eM
-.PN XCloseDevice
-closes the device for the requesting client and frees the associated
-.PN XDevice
-structure.
-.LP
-A client may open the same extension device more than once. Requests
-after the first successful one return an additional
-.PN XDevice
-structure
-with the same information as the first, but otherwise have no effect.
-A single
-.PN XCloseDevice
-request will terminate that client's access to the device.
-.LP
-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.
-.LP
-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.
-.LP
-.PN XCloseDevice
-can generate
-.PN BadDevice
-errors.
-.NH 3
-Changing the Mode of a Device
-.XS
-\*(SN Changing the Mode of a Device
-.XE
-.LP
-Some devices are capable of reporting either relative or absolute motion
-data.
-To change the mode of a device from relative to absolute, use
-.PN XSetDeviceMode .
-.sM
-.FD 0
-int XSetDeviceMode(\fIdisplay\fP\^, \fIdevice\fP\^, \fImode\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fImode\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the device whose mode should be changed.
-.IP \fImode\fP 1i
-Specifies the mode. You can pass
-.PN Absolute
-or
-.PN Relative .
-.LP
-.eM
-.PN XSetDeviceMode
-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
-.PN XOpenDevice
-request, this request will fail with a
-.PN BadDevice
-error.
-If the device does not support input class
-.PN Valuators
-or if it is not capable of reporting the specified mode,
-the request will fail with a
-.PN BadMatch
-error.
-.LP
-This request will fail and return
-.PN DeviceBusy
-if another client has already opened the device and requested a different mode.
-.LP
-.PN XSetDeviceMode
-can generate
-.PN BadDevice ,
-.PN BadMatch ,
-.PN BadMode ,
-and
-.PN DeviceBusy
-errors.
-.NH 3
-Initializing Valuators on an Input Device
-.XS
-\*(SN Initializing Valuators on an Input Device
-.XE
-.LP
-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
-.PN Absolute .
-.sp
-.LP
-To initialize the valuators on such a device, use
-.PN XSetDeviceValuators .
-.sM
-.FD 0
-Status XSetDeviceValuators(\fIdisplay\fP\^, \fIdevice\fP\^, \fIvaluators\fP\^, \
-\fIfirst_valuator\fP\^, \fInum_valuators\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int *\fIvaluators\fP\^, \fIfirst_valuator\fP\^, \fInum_valuators\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the device whose valuators should be initialized.
-.IP \fIvaluators\fP 1i
-Specifies the values to which each valuator should be set.
-.IP \fIfirst_valuator\fP 1i
-Specifies the first valuator to be set.
-.IP \fInum_valuators\fP 1i
-Specifies the number of valuators to be set.
-.LP
-.eM
-.PN XSetDeviceValuators
-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
-.PN BadValue
-error results if the number of valuators supported by the device
-is less than the following expression:
-.DS 0
-.TA .5i
-.ta .5i
- first_valuator + num_valuators
-.DE
-.LP
-If the request succeeds,
-.PN Success
-is returned. If the specified device is grabbed by some other client,
-the request will fail and a status of
-.PN AlreadyGrabbed
-will be returned.
-.LP
-.PN XSetDeviceValuators
-can generate
-.PN BadDevice ,
-.PN BadLength ,
-.PN BadMatch ,
-and
-.PN BadValue
-errors.
-.NH 3
-Getting Input Device Controls
-.XS
-\*(SN Getting Input Device Controls
-.XE
-.LP
-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.
-.LP
-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.
-.sp
-.LP
-To query a device control, use
-.PN XGetDeviceControl .
-.sM
-.FD 0
-XDeviceControl * XGetDeviceControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fIcontrol\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fIcontrol\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the device whose configuration control status is to be returned.
-.IP \fIcontrol\fP 1i
-Identifies the specific device control to be queried.
-.LP
-.eM
-.PN XGetDeviceControl
-returns the current state of the specified device control.
-If the target X server does not support that device control, a
-.PN BadValue
-error is returned.
-If the specified device does not support that device control, a
-.PN BadMatch
-error
-is returned.
-.LP
-If the request is successful, a pointer to a generic
-.PN 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:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID control;
- int length;
-} XDeviceState;
-\fP
-.De
-.LP
-.eM
-The control may be compared to constants defined in the file
-.Pn < X11/extensions/XI.h >.
-Currently defined device controls include DEVICE_RESOLUTION.
-.LP
-The information returned for the DEVICE_RESOLUTION control is
-defined in the
-.PN XDeviceResolutionState
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID control;
- int length;
- int num_valuators;
- int *resolutions;
- int *min_resolutions;
- int *max_resolutions;
-} XDeviceResolutionState;
-.De
-.LP
-.eM
-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.
-.LP
-When this control is specified,
-.PN XGetDeviceControl
-fails with a
-.PN BadMatch
-error if the specified device has no valuators.
-.LP
-.PN XGetDeviceControl
-can generate
-.PN BadMatch
-and
-.PN BadValue
-errors.
-.NH 3
-Changing Input Device Controls
-.XS
-\*(SN Changing Input Device Controls
-.XE
-.LP
-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.
-.LP
-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.
-.sp
-.LP
-To change a device control, use
-.PN XChangeDeviceControl .
-.sM
-.FD 0
-Status XChangeDeviceControl(\fIdisplay\fP\^, \fIdevice\fP\^, \fIcontrol\fP\^, \
-\fIvalue\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- int \fIcontrol\fP\^;
-.br
- XDeviceControl *\fIvalue\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the device whose configuration control status is to be modified.
-.IP \fIcontrol\fP 1i
-Identifies the specific device control to be changed.
-.IP \fIvalue\fP 1i
-Specifies a pointer to an
-.PN XDeviceControl
-structure that describes which control is to be changed
-and how it is to be changed.
-.LP
-.eM
-.PN XChangeDeviceControl
-changes the current state of the specified device control.
-If the target X server does not support that device control, a
-.PN BadValue
-error is returned.
-If the specified device does not support that device control, a
-.PN BadMatch
-error is returned.
-If another client has the target device grabbed, a status of
-.PN AlreadyGrabbed
-is returned.
-If another client has the device open and has set it to a
-conflicting state, a status of
-.PN DeviceBusy
-is returned.
-If the request fails for any reason, the device control will not
-be changed.
-.LP
-If the request is successful, the device control will be changed
-and a status of
-.PN 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:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID control;
- int length;
-} XDeviceControl;
-.De
-.LP
-.eM
-The control may be set using constants defined in the
-.Pn < X11/extensions/XI.h >
-header file.
-Currently defined device controls include DEVICE_RESOLUTION.
-.LP
-The information that can be changed by the DEVICE_RESOLUTION
-control is defined in the
-.PN XDeviceResolutionControl
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- XID control;
- int length;
- int first_valuator;
- int num_valuators;
- int *resolutions;
-} XDeviceResolutionControl;
-.De
-.LP
-.eM
-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.
-.LP
-When this control is specified,
-.PN XChangeDeviceControl
-fails with a
-.PN 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
-.PN XGetDeviceControl ),
-.PN XChangeDeviceControl
-fails with a
-.PN BadValue
-error.
-A
-.PN BadValue
-error results if the number of valuators supported by the device
-is less than the following expression:
-.LP
-.DS 0
-.TA .5i
-.ta .5i
- first_valuator + num_valuators,
-.DE
-.LP
-.PN XChangeDeviceControl
-can generate
-.PN BadMatch
-and
-.PN BadValue
-errors.
-.NH 3
-Selecting Extension Device Events
-.XS
-\*(SN Selecting Extension Device Events
-.XE
-.LP
-To select device input events, use
-.PN 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.
-.sM
-.FD 0
-int XSelectExtensionEvent(\fIdisplay\fP\^, \fIwindow\fP\^, \fIevent_list\fP\^, \
-\fIevent_count\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Window \fIwindow\fP\^;
-.br
- XEventClass *\fIevent_list\fP\^;
-.br
- int \fIevent_count\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIwindow\fP 1i
-Specifies the ID of the window from which the client wishes to receive events.
-.IP \fIevent_list\fP 1i
-Specifies a pointer to an array of event classes
-that specify which events are desired.
-.IP \fIevent_count\fP 1i
-Specifies the number of elements in the event_list.
-.LP
-.eM
-.PN XSelectExtensionEvent
-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
-.PN XEventClass
-array are the event_class values
-obtained by invoking a macro with the pointer to an
-.PN XDevice
-structure returned by the
-.PN XOpenDevice
-request.
-For example, the
-.PN DeviceKeyPress
-macro would return the
-.PN XEventClass
-for
-.PN DeviceKeyPress
-events from the specified device if it were invoked in the following form:
-.DS 0
-.TA .5i
-.ta .5i
- DeviceKeyPress (XDevice *device, event_type, event_class)
-.DE
-.LP
-Macros are defined for the following event classes:
-.DS 0
-.PN DeviceKeyPress
-.PN DeviceKeyRelease
-.PN DeviceButtonPress
-.PN DeviceButtonRelease
-.PN DeviceMotionNotify
-.PN DeviceFocusIn
-.PN DeviceFocusOut
-.PN ProximityIn
-.PN ProximityOut
-.PN DeviceStateNotify
-.PN DeviceMappingNotify
-.PN ChangeDeviceNotify
-.PN DevicePointerMotionHint
-.PN DeviceButton1Motion
-.PN DeviceButton2Motion
-.PN DeviceButton3Motion,
-.PN DeviceButton4Motion
-.PN DeviceButton5Motion
-.PN DeviceButtonMotion,
-.PN DeviceOwnerGrabButton
-.PN DeviceButtonPressGrab
-.DE
-.LP
-To get the next available event from within a client program, use the core
-.PN XNextEvent
-function. This returns the next event whether it
-came from a core device or an extension device.
-.LP
-Succeeding
-.PN XSelectExtensionEvent
-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.
-.LP
-.PN XSelectExtensionEvent
-can generate
-.PN BadAccess ,
-.PN BadClass ,
-.PN BadLength ,
-and
-.PN BadWindow
-errors.
-.NH 3
-Determining Selected Device Events
-.XS
-\*(SN Determining Selected Device Events
-.XE
-.LP
-To determine which extension events are currently selected from a given
-window, use
-.PN XGetSelectedExtensionEvents .
-.sM
-.FD 0
-int XGetSelectedExtensionEvents(\fIdisplay\fP\^, \fIwindow\fP\^, \
-\fIthis_client_count\fP\^, \fIthis_client\fP\^,
-.br
- \fIall_clients_count\fP\^, \fIall_clients\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Window \fIwindow\fP\^;
-.br
- int *\fIthis_client_count\fP\^; /* RETURN */
-.br
- XEventClass **\fIthis_client\fP\^; /* RETURN */
-.br
- int *\fIall_clients_count\fP\^; /* RETURN */
-.br
- XEventClass **\fIall_clients\fP\^; /* RETURN */
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIwindow\fP 1i
-Specifies the ID of the window from which the client wishes to receive events.
-.IP \fIthis_client_count\fP 1i
-Returns the number of elements in the this_client list.
-.IP \fIthis_client\fP 1i
-Returns a list of
-.PN XEventClasses
-that specify which events are
-selected by this client.
-.IP \fIall_clients_count\fP 1i
-Returns the number of elements in the all_clients list.
-.IP \fIall_clients\fP 1i
-Returns a list of
-.PN XEventClasses
-that specify which events are
-selected by all clients.
-.LP
-.eM
-.PN XGetSelectedExtensionEvents
-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
-.PN XWindowAttributes
-structure when an
-.PN XGetWindowAttributes
-request is made.
-To free the two arrays returned by this function, use
-.PN XFree .
-.LP
-.PN XGetSelectedExtensionEvents
-can generate
-.PN BadWindow
-errors.
-.NH 3
-Controlling Event Propagation
-.XS
-\*(SN Controlling Event Propagation
-.XE
-.LP
-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.
-.LP
-Client programs may control event propagation through the use
-of the following two functions:
-.PN XChangeDeviceDontPropagateList
-and
-.PN XGetDeviceDontPropagateList .
-.LP
-.sM
-.FD 0
-int XChangeDeviceDontPropagateList(\fIdisplay\fP\^, \fIwindow\fP\^, \
-\fIevent_count\fP\^, \fIevents\fP\^, \fImode\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Window \fIwindow\fP\^;
-.br
- int \fIevent_count\fP\^;
-.br
- XEventClass *\fIevents\fP\^;
-.br
- int \fImode\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIwindow\fP 1i
-Specifies the desired window.
-.IP \fIevent_count\fP 1i
-Specifies the number of elements in the events list.
-.IP \fIevents\fP 1i
-Specifies a pointer to the list of XEventClasses.
-.IP \fImode\fP 1i
-Specifies the mode. You can pass
-.PN AddToList
-or
-.PN DeleteFromList .
-.LP
-.eM
-.PN XChangeDeviceDontPropagateList
-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.
-.LP
-Suppression of event propagation is not allowed for all events. If a
-specified
-.PN XEventClass
-is invalid because suppression of that event is not allowed, a
-.PN BadClass
-error results.
-.LP
-.PN XChangeDeviceDontPropagateList
-can generate
-.PN BadClass ,
-.PN BadMode ,
-and
-.PN BadWindow
-errors.
-.sp
-.LP
-.sM
-.FD 0
-XEventClass * XGetDeviceDontPropagateList(\fIdisplay\fP\^, \fIwindow\fP\^, \fIevent_count\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- Window \fIwindow\fP\^;
-.br
- int *\fIevent_count\fP\^; /*RETURN */
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIwindow\fP 1i
-Specifies the desired window.
-.IP \fIevent_count\fP 1i
-Returns the number of elements in the array returned by this function.
-.LP
-.eM
-.PN XGetDeviceDontPropagateList
-allows a client to determine the do_not_propagate list of extension events
-for the specified window.
-It returns an array of
-.PN XEventClass ,
-each
-.PN XEventClass
-representing a device/event type pair.
-To free the data returned by this function, use
-.PN XFree .
-.LP
-.PN XGetDeviceDontPropagateList
-can generate
-.PN BadWindow
-errors.
-.NH 3
-Sending an Event
-.XS
-\*(SN Sending an Event
-.XE
-.LP
-To send an extension event to another client, use
-.PN XSendExtensionEvent .
-.sM
-.FD 0
-int XSendExtensionEvent(\fIdisplay\fP\^, \fIdevice\fP\^, \fIwindow\fP\^, \
-\fIpropagate\fP\^, \fIevent_count\fP\^, \fIevent_list\fP\^, \fIevent\fP\^)
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- Window \fIwindow\fP\^;
-.br
- Bool \fIpropagate\fP\^;
-.br
- int \fIevent_count\fP\^;
-.br
- XEventClass *\fIevent_list\fP\^;
-.br
- XEvent *\fIevent\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the device whose ID is recorded in the event.
-.IP \fIwindow\fP 1i
-Specifies the destination window ID. You can pass a window ID,
-.PN PointerWindow
-or
-.PN InputFocus .
-.IP \fIpropagate\fP 1i
-Specifies a boolean value that is either
-.PN True
-or
-.PN False .
-.IP \fIevent_count\fP 1i
-Specifies the number of elements in the event_list array.
-.IP \fIevent_list\fP 1i
-Specifies a pointer to an array of
-.PN XEventClass .
-.IP \fIevent\fP 1i
-Specifies a pointer to the event that is to be sent.
-.LP
-.eM
-.PN XSendExtensionEvent
-identifies the destination window, determines which clients should receive
-the specified event, and ignores any active grabs.
-It requires a list of
-.PN XEventClass
-to be specified.
-These are obtained by opening an input device with the
-.PN XOpenDevice
-request.
-.LP
-.PN XSendExtensionEvent
-uses the window argument to identify the destination window as follows:
-.IP \(bu 5
-If you pass
-.PN PointerWindow ,
-the destination window is the window that contains the pointer.
-.IP \(bu 5
-If you pass
-.PN 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.
-.LP
-To determine which clients should receive the specified events,
-.PN XSendExtensionEvent
-uses the propagate argument as follows:
-.IP \(bu 5
-If propagate is
-.PN False ,
-the event is sent to every client selecting
-from the destination window
-any of the events specified in the event_list array.
-.IP \(bu 5
-If propagate is
-.PN 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
-.PN 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.
-.LP
-The event in the
-.PN 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
-.PN True
-in the forwarded event and to set the sequence number in the event correctly.
-.LP
-.PN XSendExtensionEvent
-returns zero if the conversion-to-wire protocol failed;
-otherwise, it returns nonzero.
-.LP
-.PN XSendExtensionEvent
-can generate
-.PN BadClass ,
-.PN BadDevice ,
-.PN BadValue ,
-and
-.PN BadWindow
-errors.
-.NH 3
-Getting Motion History
-.XS
-\*(SN Getting Motion History
-.XE
-.LP
-.sM
-.FD 0
-XDeviceTimeCoord * XGetDeviceMotionEvents(\fIdisplay\fP\^, \fIdevice\fP\^, \fIstart\fP\^, \
-\fIstop\fP\^, \fInevents_return\fP\^, \fImode_return\fP\^,
-.br
- \fIaxis_count_return\fP\^);
-.br
- Display *\fIdisplay\fP\^;
-.br
- XDevice *\fIdevice\fP\^;
-.br
- Time \fIstart\fP\^, \fIstop\fP\^;
-.br
- int *\fInevents_return\fP\^;
-.br
- int *\fImode_return\fP\^;
-.br
- int *\fIaxis_count_return\fP\^;
-.FN
-.IP \fIdisplay\fP 1i
-Specifies the connection to the X server.
-.IP \fIdevice\fP 1i
-Specifies the desired device.
-.IP \fIstart\fP 1i
-Specifies the start time.
-.IP \fIstop\fP 1i
-Specifies the stop time.
-.IP \fInevents_return\fP 1i
-Returns the number of positions in the motion buffer returned
-for this request.
-.IP \fImode_return\fP 1i
-Returns the mode of the nevents information.
-The mode will be one of the following:
-.PN Absolute
-or
-.PN Relative .
-.IP \fIaxis_count_return\fP 1i
-Returns the number of axes reported in each of the positions returned.
-.LP
-.eM
-.PN XGetDeviceMotionEvents
-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.
-.LP
-The return type for this function is an
-.PN XDeviceTimeCoord
-structure, which is defined as follows:
-.LP
-.sM
-.Ds 0
-.TA .5i
-.ta .5i
-typedef struct {
- Time time;
- unsigned int *data;
-} XDeviceTimeCoord;
-.De
-.LP
-.eM
-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.
-.LP
-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
-.PN 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
-.PN XAxisInfo
-structure, which is part of the information returned by the
-.PN XListInputDevices
-request.
-.LP
-If the mode is
-.PN 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.
-.LP
-Consecutive calls to
-.PN XGetDeviceMotionEvents
-can return data of different modes, that is, if
-some client program has changed the mode of the device via an
-.PN XSetDeviceMode
-request.
-.LP
-.PN XGetDeviceMotionEvents
-can generate
-.PN BadDevice
-and
-.PN BadMatch
-errors.
-.sp
-.LP
-To free the data returned by
-.PN XGetDeviceMotionEvents ,
-use
-.PN XFreeDeviceMotionEvents .
-.LP
-.sM
-.FD 0
-void XFreeDeviceMotionEvents(\fIevents\fP\^)
-.br
- XDeviceTimeCoord *\fIevents\fP\^;
-.FN
-.IP \fIevents\fP 1i
-Specifies the pointer to the
-.PN XDeviceTimeCoord
-array returned by a previous call to
-.PN XGetDeviceMotionEvents .
-.LP
-.eM
-.PN XFreeDeviceMotionEvents
-frees the specified array of motion information.
-.\"
-.\"
-.\" Appendicies
-.\"
-.\"
-.bp
-.ds Ch ~
-.sp 1
-.ce 3
-\s+1\fBAppendix A\fP\s-1
-.XS
-\*(SN Appendix A
-.XE
-.LP
-The following information is contained in the \fB<X11/extensions/XInput.h>\fP
-and \fB<X11/extensions/XI.h>\fP header files:
-.DS 0
-.cs CW 20
-\fC
-.ps 8
-/* 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_ */
-\fP
-.DE
-.\" print Table of Contents
-.if o .bp \" blank page to make count even
-.bp 1
-.af PN i
-.PX
diff --git a/specs/Xi/porting.ms b/specs/Xi/porting.ms
deleted file mode 100644
index 515b2bf..0000000
--- a/specs/Xi/porting.ms
+++ /dev/null
@@ -1,990 +0,0 @@
-.\" Input Extension Porting Document
-.EH ''''
-.OH ''''
-.EF ''''
-.OF ''''
-\0
-.sp 10
-.ce 50
-.ps 20
-\fBX11 Input Extension Porting Document
-.sp 2
-.ps 12
-X Version 11, Release 6.8
-.sp 16
-.ps 15
-George Sachs\0\0\0\0Hewlett-Packard
-.ps 12
-.ce 0
-.bp
-\0
-.sp 10
-.ps 9
-.vs 11
-.LP
-Copyright \(co 1989, 1990, 1991 by Hewlett-Packard Company
-.LP
-Permission to use, copy, modify, and distribute this documentation for
-any purpose and without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-Hewlett-Packard makes no representations about the suitability
-for any purpose of the information in this document. It is provided "as is"
-without express or implied warranty. This document is only a draft standard
-of the X Consortium and is therefore subject to change.
-.sp 5
-Copyright \(co 1989, 1990, 1991 X Consortium
-.LP
-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:
-.LP
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-.LP
-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.
-.LP
-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.
-.sp 3
-\fIX Window System\fP is a trademark of The Open Group.
-.bp 1
-.EH '\fBX Input Extension Porting Document\fP''\fBX11, Release 6.8\fP'
-.OH '\fBX Input Extension Porting Document\fP''\fBX11, Release 6.8\fP'
-.EF ''\fB % \fP''
-.OF ''\fB % \fP''
-.\" Force the heading counter for level 1 to one
-.\"
-.\"
-.\"
-.\" Print table of contents to level 4 headings
-.\"
-.nr Cl 4
-.\"
-.\" Page eject for each level 1 heading
-.\"
-.nr H1 1
-.nr P 1
-.\"
-.\" Define Ch to contain the chapter string.
-.\"
-.ds Ch Porting Overview
-.\"
-.\"
-.\" Pull in the layout macro package.
-.\"
-.\"
-.tr ~
-This document is intended to aid the process of integrating the
-X11 Input Extension into an X server.
-.LP
-Most of the functionality provided by the input extension is
-device- and implementation-independent, and should require no changes.
-The functionality is implemented by
-routines that typically reside in the server source tree directory
-extensions/server/xinput.
-This extension includes functions to enable and disable input extension devices,
-select input, grab and focus those device, query and change key
-and button mappings, and others. The only input extension requirements
-for the device-dependent part of X are that the input devices be
-correctly initialized and input events from those devices be correctly
-generated. Device-dependent X is responsible for reading input data from
-the input device hardware and if necessary, reformatting it into X events.
-.LP
-The process of initializing input extension devices is similar to that used
-for the core devices, and is described in the following sections. When
-multiple input devices are attached to X server, the choice of which devices
-to initially use as the core X pointer and keyboard is left
-implementation-dependent. It is also up to each implementation to decide
-whether all input devices will be opened by the server during its
-initialization and kept open for the life of the server. The alternative is
-to open only the X keyboard and X pointer during server initialization, and
-open other input devices only when requested by a client to do so. Either
-type of implementation is supported by the input extension.
-.LP
-Input extension events generated by the X server use the same 32-byte xEvent
-wire event as do core input events. However, additional information must be
-sent for input extension devices, requiring that multiple xEvents be generated
-each time data is received from an input extension device. These xEvents are
-combined into a single client XEvent by the input extension library. A later
-section of this document describes the format and generation of input extension
-events.
-.NH 1
-Initializing Extension Devices
-.LP
-Extension input devices are initialized in the same manner as the core
-X input devices. Device-Independent X provides functions that can be
-called from DDX to initialize these devices. Which functions are called
-and when will vary by implementation, and will depend on whether the
-implementation opens all the input devices available to X when X is initialized,
-or waits until a client requests that a device be opened.
-In the simplest case, DDX will open all input devices as part of its
-initialization, when the InitInput routine is called.
-.NH 2
-Summary of Calling Sequence
-.LP
-.DS
-Device-Independent X | Device-Dependent X
--------------------- | -------------------
- |
-InitInput --------------> | - do device-specific initialization
- |
- | - call AddInputDevice (deviceProc,AutoStart)
-AddInputDevice |
- - creates DeviceIntRec |
- - records deviceProc |
- - adds new device to |
- list of off_devices. |
-sets dev->startup=AutoStart|
- | - call one of:
- | - RegisterPointerDevice (X pointer)
- | - processInputProc = ProcessPointerEvents
- | - RegisterKeyboardDevice (X keyboard)
- | - processInputProc = ProcessKeyboardEvents
- | - RegisterOtherDevice (extension device)
- | - processInputProc = ProcessOtherEvents
- |
- |
-InitAndStartDevices -----> | - calls deviceProc with parameters
- | (DEVICE_INIT, AutoStart)
-sets dev->inited = return |
- value from deviceProc |
- |
- | - in deviceProc, do one of:
- | - call InitPointerDeviceStruct (X pointer)
- | - call InitKeyboardDeviceStruct (X keybd)
- | - init extension device by calling some of:
- | - InitKeyClassDeviceStruct
- | - InitButtonClassDeviceStruct
- | - InitValuatorClassDeviceStruct
- | - InitValuatorAxisStruct
- | - InitFocusClassDeviceStruct
- | - InitProximityClassDeviceStruct
- | - InitKbdFeedbackClassDeviceStruct
- | - InitPtrFeedbackClassDeviceStruct
- | - InitLedFeedbackClassDeviceStruct
- | - InitStringFeedbackClassDeviceStruct
- | - InitIntegerFeedbackClassDeviceStruct
- | - InitBellFeedbackClassDeviceStruct
- | - init device name and type by:
- | - calling MakeAtom with one of the
- | predefined names
- | - calling AssignTypeAndName
- |
- |
-for each device added |
- by AddInputDevice, |
- InitAndStartDevices |
- calls EnableDevice if | - EnableDevice calls deviceProc with
- dev->startup & | (DEVICE_ON, AutoStart)
- dev->inited |
- |
-If deviceProc returns | - core devices are now enabled, extension
- Success, EnableDevice | devices are now available to be accessed
- move the device from | through the input extension protocol
- inputInfo.off_devices | requests.
- to inputInfo.devices |
-.DE
-.NH 2
-Initialization Called From InitInput
-.LP
-InitInput is the first DDX input entry point called during X server startup.
-This routine is responsible for
-device- and implementation- specific initialization, and for calling
-AddInputDevice to create and initialize the DeviceIntRec structure for each
-input device. AddInputDevice is passed the address of a procedure to be called
-by the DIX routine InitAndStartDevices when input devices are enabled.
-This procedure is expected to perform X initialization for the input device.
-.LP
-If the device is to be used as the X pointer, DDX should then call
-RegisterPointerDevice, passing the DeviceIntRec pointer,
-to initialize the device as the X pointer.
-.LP
-If the device is to be used as the X keyboard, DDX should instead call
-RegisterKeyboardDevice to initialize the device as the X keyboard.
-.LP
-If the device is to be used as an extension device, DDX should instead
-call RegisterOtherDevice, passing the DeviceIntPtr returned by
-AddInputDevice.
-.LP
-A sample InitInput implementation is shown below.
-.LP
-.DS
-InitInput(argc,argv)
- {
- int i, numdevs, ReadInput();
- DeviceIntPtr dev;
- LocalDevice localdevs[LOCAL_MAX_DEVS];
- DeviceProc kbdproc, ptrproc, extproc;
-
- /**************************************************************
- * Open the appropriate input devices, determine which are
- * available, and choose an X pointer and X keyboard device
- * in some implementation-dependent manner.
- ***************************************************************/
-
- open_input_devices (&numdevs, localdevs);
-
- /**************************************************************
- * Register a WakeupHandler to handle input when it is generated.
- ***************************************************************/
-
- RegisterBlockAndWakeupHandlers (NoopDDA, ReadInput, NULL);
-
- /**************************************************************
- * Register the input devices with DIX.
- ***************************************************************/
-
- for (i=0; i<numdevs; i++)
- {
- if (localdevs[i].use == IsXKeyboard)
- {
- dev = AddInputDevice (kbdproc, TRUE);
- RegisterKeyboardDevice (dev);
- }
- else if (localdevs[i].use == IsXPointer)
- {
- dev = AddInputDevice (ptrproc, TRUE);
- RegisterPointerDevice (dev);
- }
- else
- {
- dev = AddInputDevice (extproc, FALSE);
- RegisterOtherDevice (dev);
- }
- if (dev == NULL)
- FatalError ("Too many input devices.");
- dev->devicePrivate = (pointer) &localdevs[i];
- }
-.DE
-.NH 2
-Initialization Called From InitAndStartDevices
-.LP
-After InitInput has returned,
-InitAndStartDevices is the DIX routine that is called to enable input devices.
-It calls the device control routine that was passed to AddInputDevice,
-with a mode value of DEVICE_INIT. The action taken by the device control
-routine depends on how the device is to be used. If the device is to be
-the X pointer, the device control routine should call
-InitPointerDeviceStruct to initialize it. If the device is to be the
-X keyboard, the device control routine should call
-InitKeyboardDeviceStruct. Since input extension devices may support various
-combinations of keys, buttons, valuators, and feedbacks,
-each class of input that it supports must be initialized.
-Entry points are defined by DIX to initialize each of the supported classes of
-input, and are described in the following sections.
-.LP
-A sample device control routine called from InitAndStartDevices is
-shown below.
-.LP
-.DS
-Bool extproc (dev, mode)
- DeviceIntPtr dev;
- int mode;
- {
- LocalDevice *localdev = (LocalDevice *) dev->devicePrivate;
-
- switch (mode)
- {
- case DEVICE_INIT:
- if (strcmp(localdev->name, XI_TABLET) == 0)
- {
- /****************************************************
- * This device reports proximity, has buttons,
- * reports two axes of motion, and can be focused.
- * It also supports the same feedbacks as the X pointer
- * (acceleration and threshold can be set).
- ****************************************************/
-
- InitButtonClassDeviceStruct (dev, button_count, button_map);
- InitValuatorClassDeviceStruct (dev, localdev->n_axes,);
- motionproc, MOTION_BUF_SIZE, Absolute);
- for (i=0; i<localdev->n_axes; i++)
- InitValuatorAxisStruct (dev, i, min_val, max_val,
- resolution);
- InitFocusClassDeviceStruct (dev);
- InitProximityClassDeviceStruct (dev);
- InitPtrFeedbackClassDeviceStruct (dev, p_controlproc);
- }
- else if (strcmp(localdev->name, XI_BUTTONBOX) == 0)
- {
- /****************************************************
- * This device has keys and LEDs, and can be focused.
- ****************************************************/
-
- InitKeyClassDeviceStruct (dev, syms, modmap);
- InitFocusClassDeviceStruct (dev);
- InitLedFeedbackClassDeviceStruct (dev, ledcontrol);
- }
- else if (strcmp(localdev->name, XI_KNOBBOX) == 0)
- {
- /****************************************************
- * This device reports motion.
- * It can be focused.
- ****************************************************/
-
- InitValuatorClassDeviceStruct (dev, localdev->n_axes,);
- motionproc, MOTION_BUF_SIZE, Absolute);
- for (i=0; i<localdev->n_axes; i++)
- InitValuatorAxisStruct (dev, i, min_val, max_val,
- resolution);
- InitFocusClassDeviceStruct (dev);
- }
- localdev->atom =
- MakeAtom(localdev->name, strlen(localdev->name), FALSE);
- AssignTypeAndName (dev, localdev->atom, localdev->name);
- break;
- case DEVICE_ON:
- AddEnabledDevice (localdev->file_ds);
- dev->on = TRUE;
- break;
- case DEVICE_OFF:
- dev->on = FALSE;
- RemoveEnabledDevice (localdev->file_ds);
- break;
- case DEVICE_CLOSE:
- break;
- }
- }
-.DE
-.LP
-The device control routine is called with a mode value of DEVICE_ON
-by the DIX routine EnableDevice, which is called from InitAndStartDevices.
-When called with this mode, it should call AddEnabledDevice to cause the
-server to begin checking for available input from this device.
-.LP
->From InitAndStartDevices, EnableDevice is called for all devices that have
-the "inited" and "startup" fields in the DeviceIntRec set to TRUE. The
-"inited" field is set by InitAndStartDevices to the value returned by
-the deviceproc when called with a mode value of DEVICE_INIT. The "startup"
-field is set by AddInputDevice to value of the second parameter (autoStart).
-.LP
-When the server is first initialized, it should only be checking for input
-from the core X keyboard and pointer. One way to accomplish this is to
-call AddInputDevice for the core X keyboard and pointer with an
-autoStart value equal to TRUE, while calling AddInputDevice for
-input extension devices with an autoStart value equal to FALSE. If this is
-done, EnableDevice will skip all input extension devices during server
-initialization. In this case,
-the OpenInputDevice routine should set the "startup" field to TRUE
-when called for input extension devices. This will cause ProcXOpenInputDevice
-to call EnableDevice for those devices when a client first does an
-XOpenDevice request.
-.NH 2
-DIX Input Class Initialization Routines
-.LP
-DIX routines are defined to initialize each of the defined input classes.
-The defined classes are:
-.RS
-.in +5n
-.IP "-" 3n
-KeyClass - the device has keys.
-.IP "-" 3n
-ButtonClass - the device has buttons.
-.IP "-" 3n
-ValuatorClass - the device reports motion data or positional data.
-.IP "-" 3n
-Proximitylass - the device reports proximity information.
-.IP "-" 3n
-FocusClass - the device can be focused.
-.IP "-" 3n
-FeedbackClass - the device supports some kind of feedback
-.in -5n
-.RE
-.LP
-DIX routines are provided to initialize the X pointer and keyboard, as in
-previous releases of X. During X initialization, InitPointerDeviceStruct
-is called to initialize the X pointer, and InitKeyboardDeviceStruct is
-called to initialize the X keyboard. There is no
-corresponding routine for extension input devices, since they do not all
-support the same classes of input. Instead, DDX is responsible for the
-initialization of the input classes supported by extension devices.
-A description of the routines provided by DIX to perform that initialization
-follows.
-.NH 3
-InitKeyClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a KeyClassRec, and
-should be called for extension devices that have keys. It is passed a pointer
-to the device, and pointers to arrays of keysyms and modifiers reported by
-the device. It returns FALSE if the KeyClassRec could not be allocated,
-or if the maps for the keysyms and and modifiers could not be allocated.
-Its parameters are:
-.LP
-.DS
-Bool
-InitKeyClassDeviceStruct(dev, pKeySyms, pModifiers)
- DeviceIntPtr dev;
- KeySymsPtr pKeySyms;
- CARD8 pModifiers[];
-.DE
-.LP
-The DIX entry point InitKeyboardDeviceStruct calls this routine for the
-core X keyboard. It must be called explicitly for extension devices
-that have keys.
-.NH 3
-InitButtonClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a ButtonClassRec, and
-should be called for extension devices that have buttons. It is passed a
-pointer to the device, the number of buttons supported, and a map of the
-reported button codes. It returns FALSE if the ButtonClassRec could not be
-allocated. Its parameters are:
-.LP
-.DS
-Bool
-InitButtonClassDeviceStruct(dev, numButtons, map)
- register DeviceIntPtr dev;
- int numButtons;
- CARD8 *map;
-.DE
-.LP
-The DIX entry point InitPointerDeviceStruct calls this routine for the
-core X pointer. It must be called explicitly for extension devices that
-have buttons.
-.NH 3
-InitValuatorClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a ValuatorClassRec, and
-should be called for extension devices that have valuators. It is passed the
-number of axes of motion reported by the device, the address of the motion
-history procedure for the device, the size of the motion history buffer,
-and the mode (Absolute or Relative) of the device. It returns FALSE if
-the ValuatorClassRec could not be allocated. Its parameters are:
-.LP
-.DS
-Bool
-InitValuatorClassDeviceStruct(dev, numAxes, motionProc, numMotionEvents, mode)
- DeviceIntPtr dev;
- int (*motionProc)();
- int numAxes;
- int numMotionEvents;
- int mode;
-.DE
-.LP
-The DIX entry point InitPointerDeviceStruct calls this routine for the
-core X pointer. It must be called explicitly for extension devices that
-report motion.
-.NH 3
-InitValuatorAxisStruct
-.LP
-This function is provided to initialize an XAxisInfoRec, and
-should be called for core and extension devices that have valuators.
-The space for the XAxisInfoRec is allocated by
-the InitValuatorClassDeviceStruct function, but is not initialized.
-.LP
-InitValuatorAxisStruct should be called once for each axis of motion
-reported by the device. Each
-invocation should be passed the axis number (starting with 0), the
-minimum value for that axis, the maximum value for that axis, and the
-resolution of the device in counts per meter. If the device reports
-relative motion, 0 should be reported as the minimum and maximum values.
-InitValuatorAxisStruct has the following parameters:
-.DS
-InitValuatorAxisStruct(dev, axnum, minval, maxval, resolution)
- DeviceIntPtr dev;
- int axnum;
- int minval;
- int maxval;
- int resolution;
-.DE
-.LP
-This routine is not called by InitPointerDeviceStruct for the
-core X pointer. It must be called explicitly for core and extension devices
-that report motion.
-.NH 3
-InitFocusClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a FocusClassRec, and
-should be called for extension devices that can be focused. It is passed a
-pointer to the device, and returns FALSE if the allocation fails.
-It has the following parameter:
-.DS
-Bool
-InitFocusClassDeviceStruct(dev)
- DeviceIntPtr dev;
-.DE
-.LP
-The DIX entry point InitKeyboardDeviceStruct calls this routine for the
-core X keyboard. It must be called explicitly for extension devices
-that can be focused. Whether or not a particular device can be focused
-is left implementation-dependent.
-.NH 3
-InitProximityClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a ProximityClassRec, and
-should be called for extension absolute pointing devices that report proximity.
-It is passed a pointer to the device, and returns FALSE if the allocation fails.
-It has the following parameter:
-.DS
-Bool
-InitProximityClassDeviceStruct(dev)
- DeviceIntPtr dev;
-.DE
-.NH 3
-Initializing Feedbacks
-.LP
-.NH 4
-InitKbdFeedbackClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a KbdFeedbackClassRec, and
-may be called for extension devices that support some or all of the
-feedbacks that the core keyboard supports. It is passed a
-pointer to the device, a pointer to the procedure that sounds the bell,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-.DS
-Bool
-InitKbdFeedbackClassDeviceStruct(dev, bellProc, controlProc)
- DeviceIntPtr dev;
- void (*bellProc)();
- void (*controlProc)();
-.DE
-The DIX entry point InitKeyboardDeviceStruct calls this routine for the
-core X keyboard. It must be called explicitly for extension devices
-that have the same feedbacks as a keyboard. Some feedbacks, such as LEDs and
-bell, can be supported either with a KbdFeedbackClass or with BellFeedbackClass
-and LedFeedbackClass feedbacks.
-.NH 4
-InitPtrFeedbackClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a PtrFeedbackClassRec, and
-should be called for extension devices that allow the setting of acceleration
-and threshold. It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-.DS
-Bool
-InitPtrFeedbackClassDeviceStruct(dev, controlProc)
- DeviceIntPtr dev;
- void (*controlProc)();
-.DE
-.LP
-The DIX entry point InitPointerDeviceStruct calls this routine for the
-core X pointer. It must be called explicitly for extension devices
-that support the setting of acceleration and threshold.
-.NH 4
-InitLedFeedbackClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a LedFeedbackClassRec, and
-should be called for extension devices that have LEDs.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-.DS
-Bool
-InitLedFeedbackClassDeviceStruct(dev, controlProc)
- DeviceIntPtr dev;
- void (*controlProc)();
-.DE
-.LP
-Up to 32 LEDs per feedback can be supported, and a device may have
-multiple feedbacks of the same type.
-.NH 4
-InitBellFeedbackClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a BellFeedbackClassRec,
-and should be called for extension devices that have a bell.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-.DS
-Bool
-InitBellFeedbackClassDeviceStruct(dev, bellProc, controlProc)
- DeviceIntPtr dev;
- void (*bellProc)();
- void (*controlProc)();
-.DE
-.NH 4
-InitStringFeedbackClassDeviceStruct
-.LP
-This function is provided to allocate and initialize a StringFeedbackClassRec,
-and should be called for extension devices that have a display upon which a
-string can be displayed.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-.DS
-Bool
-InitStringFeedbackClassDeviceStruct(dev, controlProc, max_symbols,
- num_symbols_supported, symbols)
- DeviceIntPtr dev;
- void (*controlProc)();
- int max_symbols:
- int num_symbols_supported;
- KeySym *symbols;
-.DE
-.NH 4
-InitIntegerFeedbackClassDeviceStruct
-.LP
-This function is provided to allocate and initialize an
-IntegerFeedbackClassRec,
-and should be called for extension devices that have a display upon which an
-integer can be displayed.
-It is passed a pointer to the device,
-and a pointer to the device control procedure.
-It returns FALSE if the allocation fails, and has the following parameters:
-.DS
-Bool
-InitIntegerFeedbackClassDeviceStruct(dev, controlProc)
- DeviceIntPtr dev;
- void (*controlProc)();
-.DE
-.NH 2
-Initializing The Device Name And Type
-.LP
-The device name and type can be initialized by calling AssignTypeAndName
-with the following parameters:
-.DS
-void
-AssignTypeAndName(dev, type, name)
- DeviceIntPtr dev;
- Atom type;
- char *name;
-.DE
-.LP
-This will allocate space for the device name and copy the name that was passed.
-The device type can be obtained by calling MakeAtom with one of the names
-defined for input devices. MakeAtom has the following parameters:
-.DS
-Atom
-MakeAtom(name, len, makeit)
- char *name;
- int len;
- Bool makeit;
-.DE
-.LP
-Since the atom was already made when the input extension was initialized, the
-value of makeit should be FALSE;
-.NH 1
-Closing Extension Devices
-.LP
-The DisableDevice entry point is provided by DIX to disable input devices.
-It calls the device control routine for the specified
-device with a mode value of DEVICE_OFF. The device control routine should
-call RemoveEnabledDevice to stop the server from checking for input from
-that device.
-.LP
-DisableDevice is not called by any input extension routines. It can be
-called from the CloseInputDevice routine, which is called by
-ProcXCloseDevice when a client makes an XCloseDevice request. If
-DisableDevice is called, it should only be called when the last client
-using the extension device has terminated or called XCloseDevice.
-.NH 1
-Implementation-Dependent Routines
-.LP
-Several input extension protocol requests have
-implementation-dependent entry points. Default routines
-are defined for these entry points and contained in the source
-file extensions/server/xinput/xstubs.c. Some implementations may
-be able to use the default routines without change.
-The following sections describe each of these routines.
-.NH 2
-AddOtherInputDevices
-.LP
-AddOtherInputDevice is called from ProcXListInputDevices as a result of
-an XListInputDevices protocol request. It may be needed by
-implementations that do not open extension input devices until requested
-to do so by some client. These implementations may not initialize
-all devices when the X server starts up, because some of those devices
-may be in use. Since the XListInputDevices
-function only lists those devices that have been initialized,
-AddOtherInputDevices is called to give DDX a chance to
-initialize any previously unavailable input devices.
-.LP
-A sample AddOtherInputDevices routine might look like the following:
-.DS
-void
-AddOtherInputDevices ()
- {
- DeviceIntPtr dev;
- int i;
-
- for (i=0; i<MAX_DEVICES; i++)
- {
- if (!local_dev[i].initialized && available(local_dev[i]))
- {
- dev = (DeviceIntPtr) AddInputDevice (local_dev[i].deviceProc, TRUE);
- dev->public.devicePrivate = local_dev[i];
- RegisterOtherDevice (dev);
- dev->inited = ((*dev->deviceProc)(dev, DEVICE_INIT) == Success);
- }
- }
- }
-.DE
-.LP
-The default AddOtherInputDevices routine in xstubs.c does nothing.
-If all input extension devices are initialized when the server
-starts up, it can be left as a null routine.
-.NH 2
-OpenInputDevice
-.LP
-Some X server implementations open all input devices when the server
-is initialized and never close them. Other implementations may open only
-the X pointer and keyboard devices during server initialization,
-and open other input devices only when some client makes an
-XOpenDevice request. This entry point is for the latter type of
-implementation.
-.LP
-If the physical device is not already open, it can be done in this routine.
-In this case, the server must keep track of the fact that one or more clients
-have the device open, and physically close it when the last client that has
-it open makes an XCloseDevice request.
-.LP
-The default implementation is to do nothing (assume all input devices
-are opened during X server initialization and kept open).
-.NH 2
-CloseInputDevice
-.LP
-Some implementations may close an input device when the last client
-using that device requests that it be closed, or terminates.
-CloseInputDevice is called from ProcXCloseDevice when a client
-makes an XCloseDevice protocol request.
-.LP
-The default implementation is to do nothing (assume all input devices
-are opened during X server initialization and kept open).
-.NH 2
-SetDeviceMode
-.LP
-Some implementations support input devices that can report
-either absolute positional data or relative motion. The XSetDeviceMode
-protocol request is provided to allow DDX to change the current mode of
-such a device.
-.LP
-The default implementation is to always return a BadMatch error. If the
-implementation does not support any input devices that are capable of
-reporting both relative motion and absolute position information, the
-default implementation may be left unchanged.
-.NH 2
-SetDeviceValuators
-.LP
-Some implementations support input devices that allow their valuators to be
-set to an initial value. The XSetDeviceValuators
-protocol request is provided to allow DDX to set the valuators of
-such a device.
-.LP
-The default implementation is to always return a BadMatch error. If the
-implementation does not support any input devices that are allow their
-valuators to be set, the default implementation may be left unchanged.
-.NH 2
-ChangePointerDevice
-.LP
-The XChangePointerDevice protocol request is provided to change which device is
-used as the X pointer. Some implementations may maintain information
-specific to the X pointer in the private data structure pointed to by
-the DeviceIntRec. ChangePointerDevice is called to allow such
-implementations to move that information to the new pointer device.
-The current location of the X cursor is an example of the type of
-information that might be affected.
-.LP
-The DeviceIntRec structure that describes the X pointer device does not
-contain a FocusRec. If the device that has been made into the new X pointer
-was previously a device that could be focused, ProcXChangePointerDevice will
-free the FocusRec associated with that device.
-.LP
-If the server implementation desires to allow clients to focus the old pointer
-device (which is now accessible through the input extension), it should call
-InitFocusClassDeviceStruct for the old pointer device.
-.LP
-The XChangePointerDevice protocol request also allows the client
-to choose which axes of the new pointer device are used to move
-the X cursor in the X- and Y- directions. If the axes are different
-than the default ones, the server implementation should record that fact.
-.LP
-If the server implementation supports input devices with valuators that
-are not allowed to be used as the X pointer, they should be screened out
-by this routine and a BadDevice error returned.
-.LP
-The default implementation is to do nothing.
-.NH 2
-ChangeKeyboardDevice
-.LP
-The XChangeKeyboardDevice protocol request is provided to change which device is
-used as the X keyboard. Some implementations may maintain information
-specific to the X keyboard in the private data structure pointed to by
-the DeviceIntRec. ChangeKeyboardDevice is called to allow such
-implementations to move that information to the new keyboard device.
-.LP
-The X keyboard device can be focused, and the DeviceIntRec that describes
-that device has a FocusRec. If the device that has been made into the new X
-keyboard did not previously have a FocusRec,
-ProcXChangeKeyboardDevice will allocate one for it.
-.LP
-If the implementation does not want clients to be able to focus the old X
-keyboard (which has now become available as an input extension device)
-it should call DeleteFocusClassDeviceStruct to free the FocusRec.
-.LP
-If the implementation supports input devices with keys that are not allowed
-to be used as the X keyboard, they should be checked for here, and a
-BadDevice error returned.
-.LP
-The default implementation is to do nothing.
-.NH 1
-Input Extension Events
-.LP
-Events accessed through the input extension are analogous to the core input
-events, but have different event types. They are of types
-\fBDeviceKeyPress\fP, \fBDeviceKeyRelease\fP, \fBDeviceButtonPress\fP,
-\fBDeviceButtonRelease\fP, \fBDeviceDeviceMotionNotify\fP,
-\fBDeviceProximityIn\fP, \fBDeviceProximityOut\fP, and \fBDeviceValuator\fP.
-These event types are not constants. Instead, they are external integers
-defined by the input extension. Their actual values will depend on which
-extensions are supported by a server, and the order in which they are
-initialized.
-.LP
-The data structures that define these
-events are defined in the file \fBextensions/include/XIproto.h\fP. Other
-input extension constants needed by DDX are defined in the file
-\fBextensions/include/XI.h\fP.
-.LP
-Some events defined by the input extension contain more information than can
-be contained in the 32-byte xEvent data structure. To send this information
-to clients, DDX must generate two or more 32-byte wire events. The following
-sections describe the contents of these events.
-.NH 2
-Device Key Events
-.LP
-\fBDeviceKeyPresss\fP events contain all the information that is contained in
-a core \fBKeyPress\fP event, and also the following additional information:
-.LP
-.RS
-.in +5n
-.IP "-" 3n
-deviceid - the identifier of the device that generated the event.
-.IP "-" 3n
-device_state - the state of any modifiers on the device that generated the event
-.IP "-" 3n
-num_valuators - the number of valuators reported in this event.
-.IP "-" 3n
-first_valuator - the first valuator reported in this event.
-.IP "-" 3n
-valuator0 through valuator5 - the values of the valuators.
-.in -5n
-.RE
-.LP
-In order to pass this information to the input extension library, two 32-byte
-wire events must be generated by DDX. The first has an event type of
-\fBDeviceKeyPress\fP, and the second has an event type of \fPDeviceValuator\fP.
-.LP
-The following code fragment shows how the two wire events could be initialized:
-.LP
-.DS
- extern int DeviceKeyPress;
- DeviceIntPtr dev;
- xEvent xE[2];
- CARD8 id, num_valuators;
- INT16 x, y, pointerx, pointery;
- Time timestamp;
- deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *) xE;
- deviceValuator *xv;
-
- xev->type = DeviceKeyPress; /* defined by input extension */
- xev->detail = keycode; /* key pressed on this device */
- xev->time = timestamp; /* same as for core events */
- xev->rootX = pointerx; /* x location of core pointer */
- xev->rootY = pointery; /* y location of core pointer */
-
- /******************************************************************/
- /* */
- /* The following field does not exist for core input events. */
- /* It contains the device id for the device that generated the */
- /* event, and also indicates whether more than one 32-byte wire */
- /* event is being sent. */
- /* */
- /******************************************************************/
-
- xev->deviceid = dev->id | MORE_EVENTS; /* sending more than 1*/
-
- /******************************************************************/
- /* Fields in the second 32-byte wire event: */
- /******************************************************************/
-
- xv = (deviceValuator *) ++xev;
- xv->type = DeviceValuator; /* event type of second event */
- xv->deviceid = dev->id; /* id of this device */
- xv->num_valuators = 0; /* no valuators being sent */
- xv->device_state = 0; /* will be filled in by DIX */
-.DE
-.NH 2
-Device Button Events
-.LP
-\fBDeviceButton\fP events contain all the information that is contained in
-a core button event, and also the same additional information that a
-\fBDeviceKey\fP event contains.
-.NH 2
-Device Motion Events
-.LP
-\fBDeviceMotion\fP events contain all the information that is contained in
-a core motion event, and also additional valuator information. At least
-two wire events are required to contain this information.
-The following code fragment shows how the two wire events could be initialized:
-.LP
-.DS
- extern int DeviceMotionNotify;
- DeviceIntPtr dev;
- xEvent xE[2];
- CARD8 id, num_valuators;
- INT16 x, y, pointerx, pointery;
- Time timestamp;
- deviceKeyButtonPointer *xev = (deviceKeyButtonPointer *) xE;
- deviceValuator *xv;
-
- xev->type = DeviceMotionNotify; /* defined by input extension */
- xev->detail = keycode; /* key pressed on this device */
- xev->time = timestamp; /* same as for core events */
- xev->rootX = pointerx; /* x location of core pointer */
- xev->rootY = pointery; /* y location of core pointer */
-
- /******************************************************************/
- /* */
- /* The following field does not exist for core input events. */
- /* It contains the device id for the device that generated the */
- /* event, and also indicates whether more than one 32-byte wire */
- /* event is being sent. */
- /* */
- /******************************************************************/
-
- xev->deviceid = dev->id | MORE_EVENTS; /* sending more than 1*/
-
- /******************************************************************/
- /* Fields in the second 32-byte wire event: */
- /******************************************************************/
-
- xv = (deviceValuator *) ++xev;
- xv->type = DeviceValuator; /* event type of second event */
- xv->deviceid = dev->id; /* id of this device */
- xv->num_valuators = 2; /* 2 valuators being sent */
- xv->first_valuator = 0; /* first valuator being sent */
- xv->device_state = 0; /* will be filled in by DIX */
- xv->valuator0 = x; /* first axis of this device */
- xv->valuator1 = y; /* second axis of this device */
-.DE
-.LP
-Up to six axes can be reported in the deviceValuator event. If the device
-is reporting more than 6 axes, additional pairs of DeviceMotionNotify and
-DeviceValuator events should be sent, with the first_valuator field
-set correctly.
-.NH 2
-Device Proximity Events
-.LP
-Some input devices that report absolute positional information, such as
-graphics tablets and touchscreens, may report proximity events.
-\fBProximityIn\fP
-events are generated when a pointing device like a stylus, or in the case
-of a touchscreen, the user's finger, comes into close proximity with the
-surface of the input device. \fBProximityOut\fP events are generated when
-the stylus or finger leaves the proximity of the input devices surface.
-.LP
-\fBProximity\fP events contain almost the same information as button events.
-The event type is \fBProximityIn\fP or \fBProximityOut\fP, and there is no
-detail information.
-.bp
-.\" .TC
diff --git a/specs/Xi/protocol.txt b/specs/Xi/protocol.txt
deleted file mode 100644
index b7a6a69..0000000
--- a/specs/Xi/protocol.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Refer to the following files for the up-to-date protcol specification.
-
-http://cgit.freedesktop.org/xorg/proto/inputproto/tree/XIproto.txt
-http://cgit.freedesktop.org/xorg/proto/inputproto/tree/XI2proto.txt