diff options
author | Gaetan Nadon <memsize@videotron.ca> | 2010-09-09 15:39:07 -0400 |
---|---|---|
committer | Gaetan Nadon <memsize@videotron.ca> | 2010-09-12 13:13:32 -0400 |
commit | 2f7229674a2da3b9d4397fe99df25f9b795eb86e (patch) | |
tree | 44f23edd7f524467d7b823852f89aca4049084de | |
parent | b607108c265330454769f5dc6f3cef791c48bd38 (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.am | 4 | ||||
-rw-r--r-- | specs/Xi/encoding.ms | 2016 | ||||
-rw-r--r-- | specs/Xi/library.ms | 6313 | ||||
-rw-r--r-- | specs/Xi/porting.ms | 990 | ||||
-rw-r--r-- | specs/Xi/protocol.txt | 4 |
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 |