xinput: enum InputClass: comment value Attach 7
[free-sw/xcb/proto] / src / xinput.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <!--
3 Copyright (C) 2006 Peter Hutterer
4 Copyright (C) 2013 Daniel Martin
5 All Rights Reserved.
6
7 Permission is hereby granted, free of charge, to any person obtaining a copy
8 of this software and associated documentation files (the "Software"), to deal
9 in the Software without restriction, including without limitation the rights
10 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 copies of the Software, and to permit persons to whom the Software is
12 furnished to do so, subject to the following conditions:
13
14 The above copyright notice and this permission notice shall be included in all
15 copies or substantial portions of the Software.
16
17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
21 ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
24 Except as contained in this notice, the names of the authors or their
25 institutions shall not be used in advertising or otherwise to promote the
26 sale, use or other dealings in this Software without prior written
27 authorization from the authors.
28 -->
29
30 <!-- Specifications:
31      http://cgit.freedesktop.org/xorg/proto/inputproto/tree/specs/XIproto.txt
32      http://cgit.freedesktop.org/xorg/proto/inputproto/tree/specs/XI2proto.txt
33 -->
34
35 <xcb header="xinput" extension-xname="XInputExtension" extension-name="Input"
36      major-version="2" minor-version="3">
37     <import>xfixes</import>
38     <import>xproto</import>
39
40     <!-- ⋅⋅⋅ Types (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
41
42     <typedef oldname="CARD32" newname="EventClass" />
43     <typedef oldname="CARD8"  newname="KeyCode" />
44
45     <!-- ⋅⋅⋅ Types (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
46
47     <typedef oldname="CARD16" newname="DeviceId" />
48     <typedef oldname="INT32"  newname="FP1616" />
49
50     <struct name="FP3232">
51         <field type="INT32"  name="integral" />
52         <field type="CARD32" name="frac" />
53     </struct>
54
55     <!-- ⋅⋅⋅ Requests (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
56
57     <!-- GetExtensionVersion -->
58
59     <request name="GetExtensionVersion" opcode="1">
60         <field type="CARD16" name="name_len" />
61         <pad bytes="2" />
62         <list type="char" name="name">
63             <fieldref>name_len</fieldref>
64         </list>
65         <reply>
66             <pad bytes="1" />
67             <field type="CARD16" name="server_major" />
68             <field type="CARD16" name="server_minor" />
69             <field type="BOOL"   name="present" />
70             <pad bytes="19" />
71         </reply>
72     </request>
73
74     <!-- ListInputDevices -->
75
76     <enum name="DeviceUse">
77         <item name="IsXPointer">           <value>0</value> </item>
78         <item name="IsXKeyboard">          <value>1</value> </item>
79         <item name="IsXExtensionDevice">   <value>2</value> </item>
80         <item name="IsXExtensionKeyboard"> <value>3</value> </item>
81         <item name="IsXExtensionPointer">  <value>4</value> </item>
82     </enum>
83
84     <enum name="InputClass">
85         <item name="Key">       <value>0</value> </item>
86         <item name="Button">    <value>1</value> </item>
87         <item name="Valuator">  <value>2</value> </item>
88         <item name="Feedback">  <value>3</value> </item>
89         <item name="Proximity"> <value>4</value> </item>
90         <item name="Focus">     <value>5</value> </item>
91         <item name="Other">     <value>6</value> </item>
92         <!--
93                value Attach=7 is still contained in XI.h as "#define AttachClass"
94                but it was never transmitted over the protocol.
95                (It was used to tag a fake class created by libXi).
96
97                Even the creation of that fake class has been dropped
98                from libXi in 2009 by the following change:
99                http://cgit.freedesktop.org/xorg/lib/libXi/commit/?id=62858c426e6de1b99df660251737233afd335302
100
101                <item name="Attach">    <value>7</value> </item>
102         -->
103     </enum>
104
105     <enum name="ValuatorMode">
106         <item name="Relative"> <value>0</value> </item>
107         <item name="Absolute"> <value>1</value> </item>
108     </enum>
109
110     <struct name="DeviceInfo">
111         <field type="ATOM"  name="device_type" />
112         <field type="CARD8" name="device_id" />
113         <field type="CARD8" name="num_class_info" />
114         <field type="CARD8" name="device_use" enum="DeviceUse" />
115         <pad bytes="1" />
116     </struct>
117
118     <struct name="KeyInfo">
119         <field type="CARD8"   name="class_id" enum="InputClass" />
120         <field type="CARD8"   name="len" />
121         <field type="KeyCode" name="min_keycode" />
122         <field type="KeyCode" name="max_keycode" />
123         <field type="CARD16"  name="num_keys" />
124         <pad bytes="2" />
125     </struct>
126
127     <struct name="ButtonInfo">
128         <field type="CARD8"  name="class_id" enum="InputClass" />
129         <field type="CARD8"  name="len" />
130         <field type="CARD16" name="num_buttons" />
131     </struct>
132
133     <struct name="AxisInfo">
134         <field type="CARD32" name="resolution" />
135         <field type="INT32"  name="minimum" />
136         <field type="INT32"  name="maximum" />
137     </struct>
138
139     <struct name="ValuatorInfo">
140         <field type="CARD8"   name="class_id" enum="InputClass" />
141         <field type="CARD8"   name="len" />
142         <field type="CARD8"   name="axes_len" />
143         <field type="CARD8"   name="mode" enum="ValuatorMode" />
144         <field type="CARD32"  name="motion_size" />
145         <list type="AxisInfo" name="axes">
146             <fieldref>axes_len</fieldref>
147         </list>
148     </struct>
149
150     <struct name="InputInfo">
151         <field type="CARD8" name="class_id" enum="InputClass" />
152         <field type="CARD8" name="len" />
153     </struct>
154
155     <struct name="DeviceName">
156         <field type="CARD8" name="len" />
157         <list type="char"  name="string">
158             <fieldref>len</fieldref>
159         </list>
160     </struct>
161
162     <request name="ListInputDevices" opcode="2">
163         <reply>
164             <pad bytes="1" />
165             <field type="CARD8" name="devices_len" />
166             <pad bytes="23" />
167             <list type="DeviceInfo" name="devices">
168                 <fieldref>devices_len</fieldref>
169             </list>
170             <!-- Uninterpreted: list (infos) of InputInfo structures,
171                                 length is <sumof> all devices.num_class_info -->
172             <!-- Uninterpreted: list (name) of DeviceName structures -->
173         </reply>
174     </request>
175
176     <!-- OpenDevice -->
177
178     <struct name="InputClassInfo">
179         <field type="CARD8" name="class_id" enum="InputClass" />
180         <field type="CARD8" name="event_type_base" />
181     </struct>
182
183     <request name="OpenDevice" opcode="3">
184         <field type="CARD8" name="device_id" />
185         <pad bytes="3" />
186         <reply>
187             <pad bytes="1" />
188             <field type="CARD8" name="num_classes" />
189             <pad bytes="23" />
190             <list type="InputClassInfo" name="class_info">
191                 <fieldref>num_classes</fieldref>
192             </list>
193             <pad align="4" />
194         </reply>
195     </request>
196
197     <!-- CloseDevice -->
198
199     <request name="CloseDevice" opcode="4">
200         <field type="CARD8" name="device_id" />
201         <pad bytes="3" />
202     </request>
203
204     <!-- SetDeviceMode -->
205
206     <request name="SetDeviceMode" opcode="5">
207         <field type="CARD8" name="device_id" />
208         <field type="CARD8" name="mode" enum="ValuatorMode" />
209         <pad bytes="2" />
210         <reply>
211             <pad bytes="1" />
212             <field type="CARD8" name="status" altenum="GrabStatus" />
213             <pad bytes="23" />
214         </reply>
215     </request>
216
217     <!-- SelectExtensionEvent -->
218
219     <request name="SelectExtensionEvent" opcode="6">
220         <field type="WINDOW" name="window" />
221         <field type="CARD16" name="num_classes" />
222         <pad bytes="2" />
223         <list type="EventClass" name="classes">
224             <fieldref>num_classes</fieldref>
225         </list>
226     </request>
227
228     <!-- GetSelectedExtensionEvents -->
229
230     <request name="GetSelectedExtensionEvents" opcode="7">
231         <field type="WINDOW" name="window" />
232         <reply>
233             <pad bytes="1" />
234             <field type="CARD16" name="num_this_classes" />
235             <field type="CARD16" name="num_all_classes" />
236             <pad bytes="20" />
237             <list type="EventClass" name="this_classes">
238                 <fieldref>num_this_classes</fieldref>
239             </list>
240             <list type="EventClass" name="all_classes">
241                 <fieldref>num_all_classes</fieldref>
242             </list>
243         </reply>
244     </request>
245
246     <!-- ChangeDeviceDontPropagateList -->
247
248     <enum name="PropagateMode">
249         <item name="AddToList">      <value>0</value> </item>
250         <item name="DeleteFromList"> <value>1</value> </item>
251     </enum>
252
253     <request name="ChangeDeviceDontPropagateList" opcode="8">
254         <field type="WINDOW" name="window" />
255         <field type="CARD16" name="num_classes" />
256         <field type="CARD8"  name="mode" enum="PropagateMode" />
257         <pad bytes="1" />
258         <list type="EventClass" name="classes">
259             <fieldref>num_classes</fieldref>
260         </list>
261     </request>
262
263     <!-- GetDeviceDontPropagateList -->
264
265     <request name="GetDeviceDontPropagateList" opcode="9">
266         <field type="WINDOW" name="window" />
267         <reply>
268             <pad bytes="1" />
269             <field type="CARD16" name="num_classes" />
270             <pad bytes="22" />
271             <list type="EventClass" name="classes">
272                 <fieldref>num_classes</fieldref>
273             </list>
274         </reply>
275     </request>
276
277     <!-- GetDeviceMotionEvents -->
278
279     <struct name="DeviceTimeCoord">
280         <field type="TIMESTAMP" name="time" />
281         <!-- Uninterpreted: list (axisvalues) of INT32,
282                             length is num_axes from GetDeviceMotionEvents -->
283     </struct>
284
285     <request name="GetDeviceMotionEvents" opcode="10">
286         <field type="TIMESTAMP" name="start" />
287         <field type="TIMESTAMP" name="stop" altenum="Time" />
288         <field type="CARD8"     name="device_id" />
289         <pad bytes="3"/>
290         <reply>
291             <pad bytes="1" />
292             <field type="CARD32" name="num_events" />
293             <field type="CARD8"  name="num_axes" />
294             <field type="CARD8"  name="device_mode" enum="ValuatorMode" />
295             <pad bytes="18" />
296             <!-- Uninterpreted: list (events) of DeviceTimeCoord structures -->
297         </reply>
298     </request>
299
300     <!-- ChangeKeyboardDevice -->
301
302     <request name="ChangeKeyboardDevice" opcode="11">
303         <field type="CARD8" name="device_id" />
304         <pad bytes="3" />
305         <reply>
306             <pad bytes="1" />
307             <field type="CARD8" name="status" altenum="GrabStatus" />
308             <pad bytes="23" />
309         </reply>
310     </request>
311
312     <!-- ChangePointerDevice -->
313
314     <request name="ChangePointerDevice" opcode="12">
315         <field type="CARD8" name="x_axis" />
316         <field type="CARD8" name="y_axis" />
317         <field type="CARD8" name="device_id" />
318         <pad bytes="1" />
319         <reply>
320             <pad bytes="1" />
321             <field type="CARD8" name="status" altenum="GrabStatus" />
322             <pad bytes="23" />
323         </reply>
324     </request>
325
326     <!-- GrabDevice -->
327
328     <request name="GrabDevice" opcode="13">
329         <field type="WINDOW"    name="grab_window" />
330         <field type="TIMESTAMP" name="time" altenum="Time" />
331         <field type="CARD16"    name="num_classes" />
332         <field type="CARD8"     name="this_device_mode" enum="GrabMode" />
333         <field type="CARD8"     name="other_device_mode" enum="GrabMode" />
334         <field type="BOOL"      name="owner_events" />
335         <field type="CARD8"     name="device_id" />
336         <pad bytes="2" />
337         <list type="EventClass" name="classes">
338             <fieldref>num_classes</fieldref>
339         </list>
340         <reply>
341             <pad bytes="1" />
342             <field type="CARD8" name="status" enum="GrabStatus" />
343             <pad bytes="23" />
344         </reply>
345     </request>
346
347     <!-- UngrabDevice -->
348
349     <request name="UngrabDevice" opcode="14">
350         <field type="TIMESTAMP" name="time" altenum="Time" />
351         <field type="CARD8"     name="device_id" />
352         <pad bytes="3" />
353     </request>
354
355     <!-- GrabDeviceKey -->
356
357     <request name="GrabDeviceKey" opcode="15">
358         <field type="WINDOW" name="grab_window" />
359         <field type="CARD16" name="num_classes" />
360         <field type="CARD16" name="modifiers" mask="ModMask" />
361         <field type="CARD8"  name="modifier_device" />
362         <field type="CARD8"  name="grabbed_device" />
363         <field type="CARD8"  name="key" altenum="Grab" />
364         <field type="CARD8"  name="this_device_mode" enum="GrabMode" />
365         <field type="CARD8"  name="other_device_mode" enum="GrabMode" />
366         <field type="BOOL"   name="owner_events" />
367         <pad bytes="2" />
368         <list type="EventClass" name="classes">
369             <fieldref>num_classes</fieldref>
370         </list>
371     </request>
372
373     <!-- UngrabDeviceKey -->
374
375     <request name="UngrabDeviceKey" opcode="16">
376         <field type="WINDOW" name="grabWindow" />
377         <field type="CARD16" name="modifiers" mask="ModMask" />
378         <field type="CARD8"  name="modifier_device" />
379         <field type="CARD8"  name="key" altenum="Grab" />
380         <field type="CARD8"  name="grabbed_device" />
381     </request>
382
383     <!-- GrabDeviceButton -->
384
385     <request name="GrabDeviceButton" opcode="17">
386         <field type="WINDOW" name="grab_window" />
387         <field type="CARD8"  name="grabbed_device" />
388         <field type="CARD8"  name="modifier_device" />
389         <field type="CARD16" name="num_classes" />
390         <field type="CARD16" name="modifiers" mask="ModMask" />
391         <field type="CARD8"  name="this_device_mode" enum="GrabMode" />
392         <field type="CARD8"  name="other_device_mode" enum="GrabMode" />
393         <field type="CARD8"  name="button" altenum="Grab" />
394         <field type="BOOL"   name="owner_events" />
395         <pad bytes="2" />
396         <list type="EventClass" name="classes">
397             <fieldref>num_classes</fieldref>
398         </list>
399     </request>
400
401     <!-- UngrabDeviceButton -->
402
403     <request name="UngrabDeviceButton" opcode="18">
404         <field type="WINDOW" name="grab_window" />
405         <field type="CARD16" name="modifiers" mask="ModMask" />
406         <field type="CARD8"  name="modifier_device" />
407         <field type="CARD8"  name="button" altenum="Grab" />
408         <field type="CARD8"  name="grabbed_device" />
409         <pad bytes="3" />
410     </request>
411
412     <!-- AllowDeviceEvents -->
413
414     <enum name="DeviceInputMode">
415         <item name="AsyncThisDevice">   <value>0</value> </item>
416         <item name="SyncThisDevice">    <value>1</value> </item>
417         <item name="ReplayThisDevice">  <value>2</value> </item>
418         <item name="AsyncOtherDevices"> <value>3</value> </item>
419         <item name="AsyncAll">          <value>4</value> </item>
420         <item name="SyncAll">           <value>5</value> </item>
421     </enum>
422
423     <request name="AllowDeviceEvents" opcode="19">
424         <field type="TIMESTAMP" name="time" altenum="Time" />
425         <field type="CARD8"     name="mode" enum="DeviceInputMode" />
426         <field type="CARD8"     name="device_id" />
427         <pad bytes="2" />
428     </request>
429
430     <!-- GetDeviceFocus -->
431
432     <request name="GetDeviceFocus" opcode="20">
433         <field type="CARD8" name="device_id" />
434         <pad bytes="3" />
435         <reply>
436             <pad bytes="1" />
437             <field type="WINDOW"    name="focus" altenum="InputFocus" />
438             <field type="TIMESTAMP" name="time" />
439             <field type="CARD8"     name="revert_to" enum="InputFocus" />
440             <pad bytes="15" />
441         </reply>
442     </request>
443
444     <!-- SetDeviceFocus -->
445
446     <request name="SetDeviceFocus" opcode="21">
447         <field type="WINDOW"    name="focus" altenum="InputFocus" />
448         <field type="TIMESTAMP" name="time" altenum="Time" />
449         <field type="CARD8"     name="revert_to" enum="InputFocus" />
450         <field type="CARD8"     name="device_id" />
451         <pad bytes="2" />
452     </request>
453
454     <!-- GetFeedbackControl -->
455
456     <enum name="FeedbackClass">
457         <item name="Keyboard"> <value>0</value> </item>
458         <item name="Pointer">  <value>1</value> </item>
459         <item name="String">   <value>2</value> </item>
460         <item name="Integer">  <value>3</value> </item>
461         <item name="Led">      <value>4</value> </item>
462         <item name="Bell">     <value>5</value> </item>
463     </enum>
464
465     <struct name="KbdFeedbackState">
466         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
467         <field type="CARD8"  name="feedback_id" />
468         <field type="CARD16" name="len" />
469         <field type="CARD16" name="pitch" />
470         <field type="CARD16" name="duration" />
471         <field type="CARD32" name="led_mask" />
472         <field type="CARD32" name="led_values" />
473         <field type="BOOL"   name="global_auto_repeat" />
474         <field type="CARD8"  name="click" />
475         <field type="CARD8"  name="percent" />
476         <pad bytes="1" />
477         <list type="CARD8" name="auto_repeats">
478             <value>32</value>
479         </list>
480     </struct>
481
482     <struct name="PtrFeedbackState">
483         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
484         <field type="CARD8"  name="feedback_id" />
485         <field type="CARD16" name="len" />
486         <pad bytes="2" />
487         <field type="CARD16" name="accel_num" />
488         <field type="CARD16" name="accel_denom" />
489         <field type="CARD16" name="threshold" />
490     </struct>
491
492     <struct name="IntegerFeedbackState">
493         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
494         <field type="CARD8"  name="feedback_id" />
495         <field type="CARD16" name="len" />
496         <field type="CARD32" name="resolution" />
497         <field type="INT32"  name="min_value" />
498         <field type="INT32"  name="max_value" />
499     </struct>
500
501     <struct name="StringFeedbackState">
502         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
503         <field type="CARD8"  name="feedback_id" />
504         <field type="CARD16" name="len" />
505         <field type="CARD16" name="max_symbols" />
506         <field type="CARD16" name="num_keysyms" />
507         <list type="KEYSYM"  name="keysyms">
508             <fieldref>num_keysyms</fieldref>
509         </list>
510     </struct>
511
512     <struct name="BellFeedbackState">
513         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
514         <field type="CARD8"  name="feedback_id" />
515         <field type="CARD16" name="len" />
516         <field type="CARD8"  name="percent" />
517         <pad bytes="3" />
518         <field type="CARD16" name="pitch" />
519         <field type="CARD16" name="duration" />
520     </struct>
521
522     <struct name="LedFeedbackState">
523         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
524         <field type="CARD8"  name="feedback_id" />
525         <field type="CARD16" name="len" />
526         <field type="CARD32" name="led_mask" />
527         <field type="CARD32" name="led_values" />
528     </struct>
529
530     <struct name="FeedbackState">
531         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
532         <field type="CARD8"  name="feedback_id" />
533         <field type="CARD16" name="len" />
534         <list type="CARD8" name="uninterpreted_data">
535             <op op="-">
536                 <fieldref>len</fieldref>
537                 <value>4</value>
538             </op>
539         </list>
540     </struct>
541
542     <request name="GetFeedbackControl" opcode="22">
543         <field type="CARD8" name="device_id" />
544         <pad bytes="3" />
545         <reply>
546             <pad bytes="1" />
547             <field type="CARD16" name="num_feedbacks" />
548             <pad bytes="22" />
549             <list type="FeedbackState" name="feedbacks">
550                 <fieldref>num_feedbacks</fieldref>
551             </list>
552         </reply>
553     </request>
554
555     <!-- ChangeFeedbackControl -->
556
557     <struct name="KbdFeedbackCtl">
558         <field type="CARD8"   name="class_id" enum="FeedbackClass" />
559         <field type="CARD8"   name="feedback_id" />
560         <field type="CARD16"  name="len" />
561         <field type="KeyCode" name="key" />
562         <field type="CARD8"   name="auto_repeat_mode" />
563         <field type="INT8"    name="key_click_percent" />
564         <field type="INT8"    name="bell_percent" />
565         <field type="INT16"   name="bell_pitch" />
566         <field type="INT16"   name="bell_duration" />
567         <field type="CARD32"  name="led_mask" />
568         <field type="CARD32"  name="led_values" />
569     </struct>
570
571     <struct name="PtrFeedbackCtl">
572         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
573         <field type="CARD8"  name="feedback_id" />
574         <field type="CARD16" name="len" />
575         <pad bytes="2" />
576         <field type="INT16"  name="num" />
577         <field type="INT16"  name="denom" />
578         <field type="INT16"  name="threshold" />
579     </struct>
580
581     <struct name="IntegerFeedbackCtl">
582         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
583         <field type="CARD8"  name="feedback_id" />
584         <field type="CARD16" name="len" />
585         <field type="INT32"  name="int_to_display" />
586     </struct>
587
588     <struct name="StringFeedbackCtl">
589         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
590         <field type="CARD8"  name="feedback_id" />
591         <field type="CARD16" name="len" />
592         <pad bytes="2" />
593         <field type="CARD16" name="num_keysyms" />
594         <list type="KEYSYM"  name="keysyms">
595             <fieldref>num_keysyms</fieldref>
596         </list>
597     </struct>
598
599     <struct name="BellFeedbackCtl">
600         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
601         <field type="CARD8"  name="feedback_id" />
602         <field type="CARD16" name="len" />
603         <field type="INT8"   name="percent" />
604         <pad bytes="3" />
605         <field type="INT16"  name="pitch" />
606         <field type="INT16"  name="duration" />
607     </struct>
608
609     <struct name="LedFeedbackCtl">
610         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
611         <field type="CARD8"  name="feedback_id" />
612         <field type="CARD16" name="len" />
613         <field type="CARD32" name="led_mask" />
614         <field type="CARD32" name="led_values" />
615     </struct>
616
617     <struct name="FeedbackCtl">
618         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
619         <field type="CARD8"  name="feedback_id" />
620         <field type="CARD16" name="len" />
621         <list type="CARD8" name="uninterpreted_data">
622             <op op="-">
623                 <fieldref>len</fieldref>
624                 <value>4</value>
625             </op>
626         </list>
627     </struct>
628
629     <request name="ChangeFeedbackControl" opcode="23">
630         <field type="CARD32"      name="mask" />
631         <field type="CARD8"       name="device_id" />
632         <field type="CARD8"       name="feedback_id" />
633         <pad bytes="2" />
634         <field type="FeedbackCtl" name="feedback" />
635     </request>
636
637     <!-- GetDeviceKeyMapping -->
638
639     <request name="GetDeviceKeyMapping" opcode="24">
640         <field type="CARD8"   name="device_id" />
641         <field type="KeyCode" name="first_keycode" />
642         <field type="CARD8"   name="count" />
643         <pad bytes="1" />
644         <reply>
645             <pad bytes="1" />
646             <field type="CARD8" name="keysyms_per_keycode" />
647             <pad bytes="23" />
648             <list type="KEYSYM" name="keysyms">
649                 <!-- 'length' is a field in the header -->
650                 <fieldref>length</fieldref>
651             </list>
652         </reply>
653     </request>
654
655     <!-- ChangeDeviceKeyMapping -->
656
657     <request name="ChangeDeviceKeyMapping" opcode="25">
658         <field type="CARD8"   name="device_id" />
659         <field type="KeyCode" name="first_keycode" />
660         <field type="CARD8"   name="keysyms_per_keycode" />
661         <field type="CARD8"   name="keycode_count" />
662         <list type="KEYSYM"   name="keysyms">
663             <op op="*">
664                 <fieldref>keycode_count</fieldref>
665                 <fieldref>keysyms_per_keycode</fieldref>
666             </op>
667         </list>
668     </request>
669
670     <!-- GetDeviceModifierMapping -->
671
672     <request name="GetDeviceModifierMapping" opcode="26">
673         <field type="CARD8" name="device_id" />
674         <pad bytes="3" />
675         <reply>
676             <pad bytes="1" />
677             <field type="CARD8" name="keycodes_per_modifier" />
678             <pad bytes="23" />
679             <list type="CARD8"  name="keymaps">
680                 <op op="*">
681                     <fieldref>keycodes_per_modifier</fieldref>
682                     <value>8</value>
683                 </op>
684             </list>
685         </reply>
686     </request>
687
688     <!-- SetDeviceModifierMapping -->
689
690     <request name="SetDeviceModifierMapping" opcode="27">
691         <field type="CARD8" name="device_id" />
692         <field type="CARD8" name="keycodes_per_modifier" />
693         <pad bytes="2" />
694         <list type="CARD8" name="keymaps">
695             <op op="*">
696                 <fieldref>keycodes_per_modifier</fieldref>
697                 <value>8</value>
698             </op>
699         </list>
700         <reply>
701             <pad bytes="1" />
702             <field type="CARD8" name="status" enum="MappingStatus" />
703             <pad bytes="23" />
704         </reply>
705     </request>
706
707     <!-- GetDeviceButtonMapping -->
708
709     <request name="GetDeviceButtonMapping" opcode="28">
710         <field type="CARD8" name="device_id" />
711         <pad bytes="3" />
712         <reply>
713             <pad bytes="1" />
714             <field type="CARD8" name="map_size" />
715             <pad bytes="23" />
716             <list type="CARD8" name="map">
717                 <fieldref>map_size</fieldref>
718             </list>
719             <pad align="4" />
720         </reply>
721     </request>
722
723     <!-- SetDeviceButtonMapping -->
724
725     <request name="SetDeviceButtonMapping" opcode="29">
726         <field type="CARD8" name="device_id" />
727         <field type="CARD8" name="map_size" />
728         <pad bytes="2" />
729         <list type="CARD8" name="map">
730             <fieldref>map_size</fieldref>
731         </list>
732         <reply>
733             <pad bytes="1" />
734             <field type="CARD8" name="status" enum="MappingStatus" />
735             <pad bytes="23" />
736         </reply>
737     </request>
738
739     <!-- QueryDeviceState -->
740
741     <struct name="KeyState">
742         <field type="CARD8" name="class_id" enum="InputClass" />
743         <field type="CARD8" name="len" />
744         <field type="CARD8" name="num_keys" />
745         <pad bytes="1" />
746         <list type="CARD8" name="keys">
747             <value>32</value>
748         </list>
749     </struct>
750
751     <struct name="ButtonState">
752         <field type="CARD8" name="class_id" enum="InputClass" />
753         <field type="CARD8" name="len" />
754         <field type="CARD8" name="num_buttons" />
755         <pad bytes="1" />
756         <list type="CARD8" name="buttons">
757             <value>32</value>
758         </list>
759     </struct>
760
761     <struct name="ValuatorState">
762         <field type="CARD8" name="class_id" enum="InputClass" />
763         <field type="CARD8" name="len" />
764         <field type="CARD8" name="num_valuators" />
765         <field type="CARD8" name="mode" />
766         <list type="CARD32" name="valuators">
767             <fieldref>num_valuators</fieldref>
768         </list>
769     </struct>
770
771     <struct name="InputState">
772         <field type="CARD8" name="class_id" enum="InputClass" />
773         <field type="CARD8" name="len" />
774         <field type="CARD8" name="num_items" />
775         <pad bytes="1" />
776         <list type="CARD8" name="uninterpreted_data">
777             <op op="-">
778                 <fieldref>len</fieldref>
779                 <value>4</value>
780             </op>
781         </list>
782     </struct>
783
784     <request name="QueryDeviceState" opcode="30">
785         <field type="CARD8" name="device_id" />
786         <pad bytes="3" />
787         <reply>
788             <pad bytes="1" />
789             <field type="CARD8" name="num_classes" />
790             <pad bytes="23" />
791             <list type="InputState" name="classes">
792                 <fieldref>num_classes</fieldref>
793             </list>
794         </reply>
795     </request>
796
797     <!-- SendExtensionEvent -->
798
799     <request name="SendExtensionEvent" opcode="31">
800         <field type="WINDOW" name="destination" />
801         <field type="CARD8"  name="device_id" />
802         <field type="BOOL"   name="propagate" />
803         <field type="CARD16" name="num_classes" />
804         <field type="CARD8"  name="num_events" />
805         <pad bytes="3" />
806         <list type="CARD8" name="events">
807             <op op="*">
808                 <fieldref>num_events</fieldref>
809                 <value>32</value>
810             </op>
811         </list>
812         <list type="EventClass" name="classes">
813             <fieldref>num_classes</fieldref>
814         </list>
815     </request>
816
817     <!-- DeviceBell -->
818
819     <request name="DeviceBell" opcode="32">
820         <field type="CARD8" name="device_id" />
821         <field type="CARD8" name="feedback_id" />
822         <field type="CARD8" name="feedback_class" />
823         <field type="INT8"  name="percent" />
824     </request>
825
826     <!-- SetDeviceValuators -->
827
828     <request name="SetDeviceValuators" opcode="33">
829         <field type="CARD8" name="device_id" />
830         <field type="CARD8" name="first_valuator" />
831         <field type="CARD8" name="num_valuators" />
832         <pad bytes="1" />
833         <list type="INT32" name="valuators">
834             <fieldref>num_valuators</fieldref>
835         </list>
836         <reply>
837             <pad bytes="1" />
838             <field type="CARD8" name="status" enum="GrabStatus" />
839             <pad bytes="23" />
840         </reply>
841     </request>
842
843     <!-- GetDeviceControl -->
844
845     <enum name="DeviceControl">
846         <item name="resolution"> <value>1</value> </item>
847         <item name="abs_calib">  <value>2</value> </item>
848         <item name="core">       <value>3</value> </item>
849         <item name="enable">     <value>4</value> </item>
850         <item name="abs_area">   <value>5</value> </item>
851     </enum>
852
853     <struct name="DeviceResolutionState">
854         <field type="CARD16" name="control_id" enum="DeviceControl" />
855         <field type="CARD16" name="len" />
856         <field type="CARD32" name="num_valuators" />
857         <list type="CARD32"  name="resolution_values">
858             <fieldref>num_valuators</fieldref>
859         </list>
860         <list type="CARD32" name="resolution_min">
861             <fieldref>num_valuators</fieldref>
862         </list>
863         <list type="CARD32" name="resolution_max">
864             <fieldref>num_valuators</fieldref>
865         </list>
866     </struct>
867
868     <struct name="DeviceAbsCalibState">
869         <field type="CARD16" name="control_id" enum="DeviceControl" />
870         <field type="CARD16" name="len" />
871         <field type="INT32"  name="min_x" />
872         <field type="INT32"  name="max_x" />
873         <field type="INT32"  name="min_y" />
874         <field type="INT32"  name="max_y" />
875         <field type="CARD32" name="flip_x" />
876         <field type="CARD32" name="flip_y" />
877         <field type="CARD32" name="rotation" />
878         <field type="CARD32" name="button_threshold" />
879     </struct>
880
881     <struct name="DeviceAbsAreaState">
882         <field type="CARD16" name="control_id" enum="DeviceControl" />
883         <field type="CARD16" name="len" />
884         <field type="CARD32" name="offset_x" />
885         <field type="CARD32" name="offset_y" />
886         <field type="CARD32" name="width" />
887         <field type="CARD32" name="height" />
888         <field type="CARD32" name="screen" />
889         <field type="CARD32" name="following" />
890     </struct>
891
892     <struct name="DeviceCoreState">
893         <field type="CARD16" name="control_id" enum="DeviceControl" />
894         <field type="CARD16" name="len" />
895         <field type="CARD8"  name="status" />
896         <field type="CARD8"  name="iscore" />
897         <pad bytes="2" />
898     </struct>
899
900     <struct name="DeviceEnableState">
901         <field type="CARD16" name="control_id" enum="DeviceControl" />
902         <field type="CARD16" name="len" />
903         <field type="CARD8"  name="enable" />
904         <pad bytes="3" />
905     </struct>
906
907     <struct name="DeviceState">
908         <field type="CARD16" name="control_id" enum="DeviceControl" />
909         <field type="CARD16" name="len" />
910         <list type="CARD8" name="uninterpreted_data">
911             <op op="-">
912                 <fieldref>len</fieldref>
913                 <value>4</value>
914             </op>
915         </list>
916     </struct>
917
918     <request name="GetDeviceControl" opcode="34">
919         <field type="CARD16" name="control_id" enum="DeviceControl" />
920         <field type="CARD8"  name="device_id" />
921         <pad bytes="1" />
922         <reply>
923             <pad bytes="1" />
924             <field type="CARD8" name="status" altenum="GrabStatus" />
925             <pad bytes="23" />
926             <field type="DeviceState" name="control" />
927         </reply>
928     </request>
929
930     <!-- ChangeDeviceControl -->
931
932     <struct name="DeviceResolutionCtl">
933         <field type="CARD16" name="control_id" enum="DeviceControl" />
934         <field type="CARD16" name="len" />
935         <field type="CARD8"  name="first_valuator" />
936         <field type="CARD8"  name="num_valuators" />
937         <pad bytes="2" />
938         <list type="CARD32"  name="resolution_values">
939             <fieldref>num_valuators</fieldref>
940         </list>
941     </struct>
942
943     <struct name="DeviceAbsCalibCtl">
944         <field type="CARD16" name="control_id" enum="DeviceControl" />
945         <field type="CARD16" name="len" />
946         <field type="INT32"  name="min_x" />
947         <field type="INT32"  name="max_x" />
948         <field type="INT32"  name="min_y" />
949         <field type="INT32"  name="max_y" />
950         <field type="CARD32" name="flip_x" />
951         <field type="CARD32" name="flip_y" />
952         <field type="CARD32" name="rotation" />
953         <field type="CARD32" name="button_threshold" />
954     </struct>
955
956     <struct name="DeviceAbsAreaCtrl">
957         <field type="CARD16" name="control_id" enum="DeviceControl" />
958         <field type="CARD16" name="len" />
959         <field type="CARD32" name="offset_x" />
960         <field type="CARD32" name="offset_y" />
961         <field type="INT32"  name="width" />
962         <field type="INT32"  name="height" />
963         <field type="INT32"  name="screen" />
964         <field type="CARD32" name="following" />
965     </struct>
966
967     <struct name="DeviceCoreCtrl">
968         <field type="CARD16" name="control_id" enum="DeviceControl" />
969         <field type="CARD16" name="len" />
970         <field type="CARD8"  name="status" />
971         <pad bytes="3" />
972     </struct>
973
974     <struct name="DeviceEnableCtrl">
975         <field type="CARD16" name="control_id" enum="DeviceControl" />
976         <field type="CARD16" name="len" />
977         <field type="CARD8"  name="enable" />
978         <pad bytes="3" />
979     </struct>
980
981     <struct name="DeviceCtl">
982         <field type="CARD16" name="control_id" enum="DeviceControl" />
983         <field type="CARD16" name="len" />
984         <list type="CARD8" name="uninterpreted_data">
985             <op op="-">
986                 <fieldref>len</fieldref>
987                 <value>4</value>
988             </op>
989         </list>
990     </struct>
991
992     <request name="ChangeDeviceControl" opcode="35">
993         <field type="CARD16" name="control_id" enum="DeviceControl" />
994         <field type="CARD8"  name="device_id" />
995         <pad bytes="1" />
996         <field type="DeviceCtl" name="control" />
997         <reply>
998             <pad bytes="1" />
999             <field type="CARD8" name="status" altenum="GrabStatus" />
1000             <pad bytes="23" />
1001         </reply>
1002     </request>
1003
1004     <!-- ⋅⋅⋅ Requests (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1005
1006     <!-- ListDeviceProperties -->
1007
1008     <request name="ListDeviceProperties" opcode="36">
1009         <field type="CARD8"  name="device_id" />
1010         <pad bytes="3" />
1011         <reply>
1012             <pad bytes="1" />
1013             <field type="CARD16" name="num_atoms" />
1014             <pad bytes="22" />
1015             <list type="ATOM" name="atoms">
1016                 <fieldref>num_atoms</fieldref>
1017             </list>
1018         </reply>
1019     </request>
1020
1021     <!-- ChangeDeviceProperty -->
1022
1023     <enum name="PropertyFormat">
1024         <item name="8Bits">  <value>8</value> </item>
1025         <item name="16Bits"> <value>16</value> </item>
1026         <item name="32Bits"> <value>32</value> </item>
1027     </enum>
1028
1029     <request name="ChangeDeviceProperty" opcode="37">
1030         <field type="ATOM"  name="property" />
1031         <field type="ATOM"  name="type" />
1032         <field type="CARD8" name="device_id" />
1033         <field type="CARD8" name="format" enum="PropertyFormat" />
1034         <field type="CARD8" name="mode" enum="PropMode" />
1035         <pad bytes="1" />
1036         <field type="CARD32" name="num_items" />
1037         <switch name="items">
1038             <fieldref>format</fieldref>
1039             <!-- <bitcase> is not correct, this would need <cases>s.
1040                  It works in that case, because PropertyFormat items can be
1041                  distinguished exactly as their values don't have equal bits.
1042             -->
1043             <bitcase>
1044                 <enumref ref="PropertyFormat">8Bits</enumref>
1045                 <list type="CARD8" name="data8">
1046                     <fieldref>num_items</fieldref>
1047                 </list>
1048                 <pad align="4" />
1049             </bitcase>
1050             <bitcase>
1051                 <enumref ref="PropertyFormat">16Bits</enumref>
1052                 <list type="CARD16" name="data16">
1053                     <fieldref>num_items</fieldref>
1054                 </list>
1055                 <pad align="4" />
1056             </bitcase>
1057             <bitcase>
1058                 <enumref ref="PropertyFormat">32Bits</enumref>
1059                 <list type="CARD32" name="data32">
1060                     <fieldref>num_items</fieldref>
1061                 </list>
1062             </bitcase>
1063         </switch>
1064     </request>
1065
1066     <!-- DeleteDeviceProperty -->
1067
1068     <request name="DeleteDeviceProperty" opcode="38">
1069         <field type="ATOM"  name="property" />
1070         <field type="CARD8" name="device_id" />
1071         <pad bytes="3" />
1072     </request>
1073
1074     <!-- GetDeviceProperty -->
1075
1076     <request name="GetDeviceProperty" opcode="39">
1077         <field type="ATOM"   name="property" />
1078         <field type="ATOM"   name="type" />
1079         <field type="CARD32" name="offset" />
1080         <field type="CARD32" name="len" />
1081         <field type="CARD8"  name="device_id" />
1082         <field type="BOOL"   name="delete" />
1083         <pad bytes="2" />
1084         <reply>
1085             <pad bytes="1" />
1086             <field type="ATOM"   name="type" />
1087             <field type="CARD32" name="bytes_after" />
1088             <field type="CARD32" name="num_items" />
1089             <field type="CARD8"  name="format" enum="PropertyFormat" />
1090             <field type="CARD8"  name="device_id" />
1091             <pad bytes="10" />
1092             <switch name="items">
1093                 <fieldref>format</fieldref>
1094                 <!-- <bitcase> is not correct, this would need <cases>s.
1095                      It works in that case, because PropertyFormat items can be
1096                      distinguished exactly as their values don't have equal bits.
1097                 -->
1098                 <bitcase>
1099                     <enumref ref="PropertyFormat">8Bits</enumref>
1100                     <list type="CARD8" name="data8">
1101                         <fieldref>num_items</fieldref>
1102                     </list>
1103                     <pad align="4" />
1104                 </bitcase>
1105                 <bitcase>
1106                     <enumref ref="PropertyFormat">16Bits</enumref>
1107                     <list type="CARD16" name="data16">
1108                         <fieldref>num_items</fieldref>
1109                     </list>
1110                     <pad align="4" />
1111                 </bitcase>
1112                 <bitcase>
1113                     <enumref ref="PropertyFormat">32Bits</enumref>
1114                     <list type="CARD32" name="data32">
1115                         <fieldref>num_items</fieldref>
1116                     </list>
1117                 </bitcase>
1118             </switch>
1119         </reply>
1120     </request>
1121
1122     <!-- ⋅⋅⋅ Requests (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1123
1124     <!-- XIQueryPointer -->
1125
1126     <enum name="Device">
1127         <item name="All">       <value>0</value> </item>
1128         <item name="AllMaster"> <value>1</value> </item>
1129     </enum>
1130
1131     <struct name="GroupInfo">
1132         <field type="CARD8" name="base" />
1133         <field type="CARD8" name="latched" />
1134         <field type="CARD8" name="locked" />
1135         <field type="CARD8" name="effective" />
1136     </struct>
1137
1138     <struct name="ModifierInfo">
1139         <field type="CARD32" name="base" />
1140         <field type="CARD32" name="latched" />
1141         <field type="CARD32" name="locked" />
1142         <field type="CARD32" name="effective" />
1143     </struct>
1144
1145     <request name="XIQueryPointer" opcode="40">
1146         <field type="WINDOW"   name="window" />
1147         <field type="DeviceId" name="deviceid" altenum="Device" />
1148         <pad bytes="2" />
1149         <reply>
1150             <pad bytes="1" />
1151             <field type="WINDOW"       name="root" />
1152             <field type="WINDOW"       name="child" />
1153             <field type="FP1616"       name="root_x" />
1154             <field type="FP1616"       name="root_y" />
1155             <field type="FP1616"       name="win_x" />
1156             <field type="FP1616"       name="win_y" />
1157             <field type="BOOL"         name="same_screen" />
1158             <pad bytes="1" />
1159             <field type="CARD16"       name="buttons_len" />
1160             <field type="ModifierInfo" name="mods" />
1161             <field type="GroupInfo"    name="group" />
1162             <list type="CARD32" name="buttons">
1163                 <fieldref>buttons_len</fieldref>
1164             </list>
1165         </reply>
1166     </request>
1167
1168     <!-- XIWarpPointer -->
1169
1170     <request name="XIWarpPointer" opcode="41">
1171         <field type="WINDOW"   name="src_win" />
1172         <field type="WINDOW"   name="dst_win" />
1173         <field type="FP1616"   name="src_x" />
1174         <field type="FP1616"   name="src_y" />
1175         <field type="CARD16"   name="src_width" />
1176         <field type="CARD16"   name="src_height" />
1177         <field type="FP1616"   name="dst_x" />
1178         <field type="FP1616"   name="dst_y" />
1179         <field type="DeviceId" name="deviceid" altenum="Device" />
1180         <pad bytes="2" />
1181     </request>
1182
1183     <!-- XIChangeCursor -->
1184
1185     <request name="XIChangeCursor" opcode="42">
1186         <field type="WINDOW"   name="window" />
1187         <field type="CURSOR"   name="cursor" />
1188         <field type="DeviceId" name="deviceid" altenum="Device" />
1189         <pad bytes="2" />
1190     </request>
1191
1192     <!-- XIChangeHierarchy -->
1193
1194     <enum name="HierarchyChangeType">
1195         <item name="AddMaster">    <value>1</value> </item>
1196         <item name="RemoveMaster"> <value>2</value> </item>
1197         <item name="AttachSlave">  <value>3</value> </item>
1198         <item name="DetachSlave">  <value>4</value> </item>
1199     </enum>
1200
1201     <enum name="ChangeMode">
1202         <item name="Attach"> <value>1</value> </item>
1203         <item name="Float">  <value>2</value> </item>
1204     </enum>
1205
1206     <struct name="AddMaster">
1207         <field type="CARD16" name="type" enum="HierarchyChangeType" />
1208         <field type="CARD16" name="len" />
1209         <field type="CARD16" name="name_len" />
1210         <field type="BOOL"   name="send_core" />
1211         <field type="BOOL"   name="enable" />
1212         <list type="char" name="name">
1213             <fieldref>name_len</fieldref>
1214         </list>
1215         <pad align="4" />
1216     </struct>
1217
1218     <struct name="RemoveMaster">
1219         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1220         <field type="CARD16"   name="len" />
1221         <field type="DeviceId" name="deviceid" altenum="Device" />
1222         <field type="CARD8"    name="return_mode" enum="ChangeMode" />
1223         <pad bytes="1" />
1224         <field type="DeviceId" name="return_pointer" altenum="Device" />
1225         <field type="DeviceId" name="return_keyboard" altenum="Device" />
1226     </struct>
1227
1228     <struct name="AttachSlave">
1229         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1230         <field type="CARD16"   name="len" />
1231         <field type="DeviceId" name="deviceid" altenum="Device" />
1232         <field type="DeviceId" name="master" altenum="Device" />
1233     </struct>
1234
1235     <struct name="DetachSlave">
1236         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1237         <field type="CARD16"   name="len" />
1238         <field type="DeviceId" name="deviceid" altenum="Device" />
1239         <pad bytes="2" />
1240     </struct>
1241
1242     <struct name="HierarchyChange">
1243         <field type="CARD16" name="type" enum="HierarchyChangeType" />
1244         <field type="CARD16" name="len" />
1245         <list type="CARD8" name="uninterpreted_data">
1246             <op op="-">
1247                 <op op="*">
1248                     <fieldref>len</fieldref>
1249                     <value>4</value>
1250                 </op>
1251                 <value>4</value>
1252             </op>
1253         </list>
1254     </struct>
1255
1256     <request name="XIChangeHierarchy" opcode="43">
1257         <field type="CARD8" name="num_changes" />
1258         <pad bytes="3" />
1259         <list type="HierarchyChange" name="changes">
1260             <fieldref>num_changes</fieldref>
1261         </list>
1262     </request>
1263
1264     <!-- XISetClientPointer -->
1265
1266     <request name="XISetClientPointer" opcode="44">
1267         <field type="WINDOW"   name="window" />
1268         <field type="DeviceId" name="deviceid" altenum="Device" />
1269         <pad bytes="2" />
1270     </request>
1271
1272     <!-- XIGetClientPointer -->
1273
1274     <request name="XIGetClientPointer" opcode="45">
1275         <field type="WINDOW" name="window" />
1276         <reply>
1277             <pad bytes="1" />
1278             <field type="BOOL"     name="set" />
1279             <pad bytes="1" />
1280             <field type="DeviceId" name="deviceid" altenum="Device" />
1281             <pad bytes="20" />
1282         </reply>
1283     </request>
1284
1285     <!-- XISelectEvents -->
1286
1287     <enum name="XIEventMask">
1288         <item name="DeviceChanged">    <bit>1</bit> </item>
1289         <item name="KeyPress">         <bit>2</bit> </item>
1290         <item name="KeyRelease">       <bit>3</bit> </item>
1291         <item name="ButtonPress">      <bit>4</bit> </item>
1292         <item name="ButtonRelease">    <bit>5</bit> </item>
1293         <item name="Motion">           <bit>6</bit> </item>
1294         <item name="Enter">            <bit>7</bit> </item>
1295         <item name="Leave">            <bit>8</bit> </item>
1296         <item name="FocusIn">          <bit>9</bit> </item>
1297         <item name="FocusOut">         <bit>10</bit> </item>
1298         <item name="Hierarchy">        <bit>11</bit> </item>
1299         <item name="Property">         <bit>12</bit> </item>
1300         <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅ -->
1301         <item name="RawKeyPress">      <bit>13</bit> </item>
1302         <item name="RawKeyRelease">    <bit>14</bit> </item>
1303         <item name="RawButtonPress">   <bit>15</bit> </item>
1304         <item name="RawButtonRelease"> <bit>16</bit> </item>
1305         <item name="RawMotion">        <bit>17</bit> </item>
1306         <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅ -->
1307         <item name="TouchBegin">       <bit>18</bit> </item>
1308         <item name="TouchUpdate">      <bit>19</bit> </item>
1309         <item name="TouchEnd">         <bit>20</bit> </item>
1310         <item name="TouchOwnership">   <bit>21</bit> </item>
1311         <item name="RawTouchBegin">    <bit>22</bit> </item>
1312         <item name="RawTouchUpdate">   <bit>23</bit> </item>
1313         <item name="RawTouchEnd">      <bit>24</bit> </item>
1314         <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅ -->
1315         <item name="BarrierHit">       <bit>25</bit> </item>
1316         <item name="BarrierLeave">     <bit>26</bit> </item>
1317     </enum>
1318
1319     <struct name="EventMask">
1320         <field type="DeviceId" name="deviceid" altenum="Device" />
1321         <field type="CARD16"   name="mask_len" />
1322         <list type="CARD32" name="mask" mask="XIEventMask">
1323             <fieldref>mask_len</fieldref>
1324         </list>
1325     </struct>
1326
1327     <request name="XISelectEvents" opcode="46">
1328         <field type="WINDOW" name="window" />
1329         <field type="CARD16" name="num_mask" />
1330         <pad bytes="2" />
1331         <list type="EventMask" name="masks">
1332             <fieldref>num_mask</fieldref>
1333         </list>
1334     </request>
1335
1336     <!-- XIQueryVersion -->
1337
1338     <request name="XIQueryVersion" opcode="47">
1339         <field type="CARD16" name="major_version" />
1340         <field type="CARD16" name="minor_version" />
1341
1342         <reply>
1343             <pad bytes="1" />
1344             <field type="CARD16" name="major_version" />
1345             <field type="CARD16" name="minor_version" />
1346             <pad bytes="20" />
1347         </reply>
1348     </request>
1349
1350     <!-- XIQueryDevice -->
1351
1352     <enum name="DeviceClassType">
1353         <item name="Key">      <value>0</value> </item>
1354         <item name="Button">   <value>1</value> </item>
1355         <item name="Valuator"> <value>2</value> </item>
1356         <item name="Scroll">   <value>3</value> </item>
1357         <item name="Touch">    <value>8</value> </item>
1358     </enum>
1359
1360     <enum name="DeviceType">
1361         <item name="MasterPointer">  <value>1</value> </item>
1362         <item name="MasterKeyboard"> <value>2</value> </item>
1363         <item name="SlavePointer">   <value>3</value> </item>
1364         <item name="SlaveKeyboard">  <value>4</value> </item>
1365         <item name="FloatingSlave">  <value>5</value> </item>
1366     </enum>
1367
1368     <enum name="ScrollFlags">
1369         <item name="NoEmulation"> <bit>0</bit> </item>
1370         <item name="Preferred">   <bit>1</bit> </item>
1371     </enum>
1372
1373     <enum name="ScrollType">
1374         <item name="Vertical">   <value>1</value> </item>
1375         <item name="Horizontal"> <value>2</value> </item>
1376     </enum>
1377
1378     <enum name="TouchMode">
1379         <item name="Direct">    <value>1</value> </item>
1380         <item name="Dependent"> <value>2</value> </item>
1381     </enum>
1382
1383     <struct name="ButtonClass">
1384         <field type="CARD16"   name="type" enum="DeviceClassType" />
1385         <field type="CARD16"   name="len" />
1386         <field type="DeviceId" name="sourceid" />
1387         <field type="CARD16"   name="num_buttons" />
1388         <list type="CARD32"    name="state">
1389             <op op="/">
1390                 <op op="+">
1391                     <fieldref>num_buttons</fieldref>
1392                     <value>31</value>
1393                 </op>
1394                 <value>32</value>
1395             </op>
1396         </list>
1397         <list type="ATOM" name="labels">
1398             <fieldref>num_buttons</fieldref>
1399         </list>
1400     </struct>
1401
1402     <struct name="KeyClass">
1403         <field type="CARD16"   name="type" enum="DeviceClassType" />
1404         <field type="CARD16"   name="len" />
1405         <field type="DeviceId" name="sourceid" />
1406         <field type="CARD16"   name="num_keys" />
1407         <list type="CARD32" name="keys">
1408             <fieldref>num_keys</fieldref>
1409         </list>
1410     </struct>
1411
1412     <struct name="ScrollClass">
1413         <field type="CARD16"   name="type" enum="DeviceClassType" />
1414         <field type="CARD16"   name="len" />
1415         <field type="DeviceId" name="sourceid" />
1416         <field type="CARD16"   name="number" />
1417         <field type="CARD16"   name="scroll_type" enum="ScrollType" />
1418         <pad bytes="2" />
1419         <field type="CARD32"   name="flags" enum="ScrollFlags" />
1420         <field type="FP3232"   name="increment" />
1421     </struct>
1422
1423     <struct name="TouchClass">
1424         <field type="CARD16"   name="type" enum="DeviceClassType" />
1425         <field type="CARD16"   name="len" />
1426         <field type="DeviceId" name="sourceid" />
1427         <field type="CARD8"    name="mode" enum="TouchMode" />
1428         <field type="CARD8"    name="num_touches" />
1429     </struct>
1430
1431     <struct name="ValuatorClass">
1432         <field type="CARD16"   name="type" enum="DeviceClassType" />
1433         <field type="CARD16"   name="len" />
1434         <field type="DeviceId" name="sourceid" />
1435         <field type="CARD16"   name="number" />
1436         <field type="ATOM"     name="label" />
1437         <field type="FP3232"   name="min" />
1438         <field type="FP3232"   name="max" />
1439         <field type="FP3232"   name="value" />
1440         <field type="CARD32"   name="resolution" />
1441         <field type="CARD8"    name="mode" enum="ValuatorMode" />
1442         <pad bytes="3" />
1443     </struct>
1444
1445     <struct name="DeviceClass">
1446         <field type="CARD16"   name="type" enum="DeviceClassType" />
1447         <field type="CARD16"   name="len" />
1448         <field type="DeviceId" name="sourceid" />
1449         <pad bytes="2" />
1450         <list type="CARD8" name="uninterpreted_data">
1451             <op op="-">
1452                 <op op="*">
1453                     <fieldref>len</fieldref>
1454                     <value>4</value>
1455                 </op>
1456                 <value>8</value>
1457             </op>
1458         </list>
1459     </struct>
1460
1461     <struct name="XIDeviceInfo">
1462         <field type="DeviceId" name="deviceid" altenum="Device" />
1463         <field type="CARD16"   name="type" altenum="DeviceType" />
1464         <field type="DeviceId" name="attachment" altenum="Device" />
1465         <field type="CARD16"   name="num_classes" />
1466         <field type="CARD16"   name="name_len" />
1467         <field type="BOOL"     name="enabled" />
1468         <pad bytes="1" />
1469         <list type="char" name="name">
1470             <!-- name_len is without padding, so we've to pad on our own,
1471                  auto align pad after the list would be helpfull -->
1472             <op op="*">
1473                 <op op="/">
1474                     <op op="+">
1475                         <fieldref>name_len</fieldref>
1476                         <value>3</value>
1477                     </op>
1478                     <value>4</value>
1479                 </op>
1480                 <value>4</value>
1481             </op>
1482         </list>
1483         <list type="DeviceClass" name="classes">
1484             <fieldref>num_classes</fieldref>
1485         </list>
1486     </struct>
1487
1488     <request name="XIQueryDevice" opcode="48">
1489         <field type="DeviceId" name="deviceid" altenum="Device" />
1490         <pad bytes="2" />
1491         <reply>
1492             <pad bytes="1" />
1493             <field type="CARD16" name="num_infos" />
1494             <pad bytes="22" />
1495             <list type="XIDeviceInfo" name="infos">
1496                 <fieldref>num_infos</fieldref>
1497             </list>
1498         </reply>
1499     </request>
1500
1501     <!-- XISetFocus -->
1502
1503     <request name="XISetFocus" opcode="49">
1504         <field type="WINDOW"    name="window" />
1505         <field type="TIMESTAMP" name="time" altenum="Time" />
1506         <field type="DeviceId"  name="deviceid" altenum="Device" />
1507         <pad bytes="2" />
1508     </request>
1509
1510     <!-- XIGetFocus -->
1511
1512     <request name="XIGetFocus" opcode="50">
1513         <field type="DeviceId" name="deviceid" altenum="Device" />
1514         <pad bytes="2" />
1515         <reply>
1516             <pad bytes="1" />
1517             <field type="WINDOW" name="focus" />
1518             <pad bytes="20" />
1519         </reply>
1520     </request>
1521
1522     <!-- XIGrabDevice -->
1523
1524     <enum name="GrabOwner">
1525         <item name="NoOwner"> <value>0</value> </item>
1526         <item name="Owner">   <value>1</value> </item>
1527     </enum>
1528
1529     <request name="XIGrabDevice" opcode="51">
1530         <field type="WINDOW"    name="window" />
1531         <field type="TIMESTAMP" name="time" altenum="Time" />
1532         <field type="CURSOR"    name="cursor" />
1533         <field type="DeviceId"  name="deviceid" altenum="Device" />
1534         <field type="CARD8"     name="mode" enum="GrabMode" />
1535         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1536         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1537         <pad bytes="1" />
1538         <field type="CARD16"    name="mask_len" />
1539         <list type="CARD32" name="mask">
1540             <fieldref>mask_len</fieldref>
1541         </list>
1542         <reply>
1543             <pad bytes="1" />
1544             <field type="CARD8" name="status" enum="GrabStatus" />
1545             <pad bytes="23" />
1546         </reply>
1547     </request>
1548
1549     <!-- XIUngrabDevice -->
1550
1551     <request name="XIUngrabDevice" opcode="52">
1552         <field type="TIMESTAMP" name="time" altenum="Time" />
1553         <field type="DeviceId" name="deviceid" altenum="Device" />
1554         <pad bytes="2" />
1555     </request>
1556
1557     <!-- XIAllowEvents -->
1558
1559     <enum name="EventMode">
1560         <item name="AsyncDevice">       <value>0</value> </item>
1561         <item name="SyncDevice">        <value>1</value> </item>
1562         <item name="ReplayDevice">      <value>2</value> </item>
1563         <item name="AsyncPairedDevice"> <value>3</value> </item>
1564         <item name="AsyncPair">         <value>4</value> </item>
1565         <item name="SyncPair">          <value>5</value> </item>
1566         <item name="AcceptTouch">       <value>6</value> </item>
1567         <item name="RejectTouch">       <value>7</value> </item>
1568     </enum>
1569
1570     <request name="XIAllowEvents" opcode="53">
1571         <field type="TIMESTAMP" name="time" altenum="Time" />
1572         <field type="DeviceId"  name="deviceid" altenum="Device" />
1573         <field type="CARD8"     name="event_mode" enum="EventMode" />
1574         <pad bytes="1" />
1575         <field type="CARD32"    name="touchid" />
1576         <field type="WINDOW"    name="grab_window" />
1577     </request>
1578
1579     <!-- XIPassiveGrabDevice -->
1580
1581     <enum name="GrabMode22">
1582         <item name="Sync">  <value>0</value> </item>
1583         <item name="Async"> <value>1</value> </item>
1584         <item name="Touch"> <value>2</value> </item>
1585     </enum>
1586
1587     <enum name="GrabType">
1588         <item name="Button">     <value>0</value> </item>
1589         <item name="Keycode">    <value>1</value> </item>
1590         <item name="Enter">      <value>2</value> </item>
1591         <item name="FocusIn">    <value>3</value> </item>
1592         <item name="TouchBegin"> <value>4</value> </item>
1593     </enum>
1594
1595     <enum name="ModifierMask">
1596         <item name="Any"> <bit>31</bit> </item>
1597     </enum>
1598
1599     <struct name="GrabModifierInfo">
1600         <field type="CARD32" name="modifiers" altenum="ModifierMask" />
1601         <field type="CARD8"  name="status" enum="GrabStatus" />
1602         <pad bytes="3" />
1603     </struct>
1604
1605     <request name="XIPassiveGrabDevice" opcode="54">
1606         <field type="TIMESTAMP" name="time" altenum="Time" />
1607         <field type="WINDOW"    name="grab_window" />
1608         <field type="CURSOR"    name="cursor" />
1609         <field type="CARD32"    name="detail" />
1610         <field type="DeviceId"  name="deviceid" altenum="Device" />
1611         <field type="CARD16"    name="num_modifiers" />
1612         <field type="CARD16"    name="mask_len" />
1613         <field type="CARD8"     name="grab_type" enum="GrabType" />
1614         <field type="CARD8"     name="grab_mode" enum="GrabMode22" />
1615         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1616         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1617         <pad bytes="2" />
1618         <list type="CARD32" name="mask">
1619             <fieldref>mask_len</fieldref>
1620         </list>
1621         <list type="CARD32" name="modifiers">
1622             <fieldref>num_modifiers</fieldref>
1623         </list>
1624         <reply>
1625             <pad bytes="1" />
1626             <field type="CARD16" name="num_modifiers" />
1627             <pad bytes="22" />
1628             <list type="GrabModifierInfo" name="modifiers">
1629                 <fieldref>num_modifiers</fieldref>
1630             </list>
1631         </reply>
1632     </request>
1633
1634     <!-- XIPassiveUngrabDevice -->
1635
1636     <request name="XIPassiveUngrabDevice" opcode="55">
1637         <field type="WINDOW"   name="grab_window" />
1638         <field type="CARD32"   name="detail" />
1639         <field type="DeviceId" name="deviceid" altenum="Device" />
1640         <field type="CARD16"   name="num_modifiers" />
1641         <field type="CARD8"    name="grab_type" enum="GrabType" />
1642         <pad bytes="3" />
1643         <list type="CARD32" name="modifiers">
1644             <fieldref>num_modifiers</fieldref>
1645         </list>
1646     </request>
1647
1648     <!-- XIListProperties -->
1649
1650     <request name="XIListProperties" opcode="56">
1651         <field type="DeviceId" name="deviceid" altenum="Device" />
1652         <pad bytes="2" />
1653         <reply>
1654             <pad bytes="1" />
1655             <field type="CARD16" name="num_properties" />
1656             <pad bytes="22" />
1657             <list type="ATOM" name="properties">
1658                 <fieldref>num_properties</fieldref>
1659             </list>
1660         </reply>
1661     </request>
1662
1663     <!-- XIChangeProperty -->
1664
1665     <request name="XIChangeProperty" opcode="57">
1666         <field type="DeviceId" name="deviceid" altenum="Device" />
1667         <field type="CARD8"    name="mode" enum="PropMode" />
1668         <field type="CARD8"    name="format" enum="PropertyFormat" />
1669         <field type="ATOM"     name="property" />
1670         <field type="ATOM"     name="type" />
1671         <field type="CARD32"   name="num_items" />
1672         <switch name="items">
1673             <fieldref>format</fieldref>
1674             <!-- <bitcase> is not correct, this would need <cases>s.
1675                  It works in that case, because PropertyFormat items can be
1676                  distinguished exactly as their values don't have equal bits.
1677             -->
1678             <bitcase>
1679                 <enumref ref="PropertyFormat">8Bits</enumref>
1680                 <list type="CARD8" name="data8">
1681                     <fieldref>num_items</fieldref>
1682                 </list>
1683             </bitcase>
1684             <bitcase>
1685                 <enumref ref="PropertyFormat">16Bits</enumref>
1686                 <list type="CARD16" name="data16">
1687                     <fieldref>num_items</fieldref>
1688                 </list>
1689             </bitcase>
1690             <bitcase>
1691                 <enumref ref="PropertyFormat">32Bits</enumref>
1692                 <list type="CARD32" name="data32">
1693                     <fieldref>num_items</fieldref>
1694                 </list>
1695             </bitcase>
1696         </switch>
1697     </request>
1698
1699     <!-- XIDeleteProperty -->
1700
1701     <request name="XIDeleteProperty" opcode="58">
1702         <field type="DeviceId" name="deviceid" altenum="Device" />
1703         <pad bytes="2" />
1704         <field type="ATOM"     name="property" />
1705     </request>
1706
1707     <!-- XIGetProperty -->
1708
1709     <request name="XIGetProperty" opcode="59">
1710         <field type="DeviceId" name="deviceid" altenum="Device" />
1711         <field type="BOOL"     name="delete" />
1712         <pad bytes="1" />
1713         <field type="ATOM"     name="property" />
1714         <field type="ATOM"     name="type" />
1715         <field type="CARD32"   name="offset" />
1716         <field type="CARD32"   name="len" />
1717         <reply>
1718             <pad bytes="1" />
1719             <field type="ATOM"   name="type" />
1720             <field type="CARD32" name="bytes_after" />
1721             <field type="CARD32" name="num_items" />
1722             <field type="CARD8"  name="format" enum="PropertyFormat" />
1723             <pad bytes="11" />
1724             <switch name="items">
1725                 <fieldref>format</fieldref>
1726                 <!-- <bitcase> is not correct, this would need <cases>s.
1727                      It works in that case, because PropertyFormat items can be
1728                      distinguished exactly as their values don't have equal bits.
1729                 -->
1730                 <bitcase>
1731                     <enumref ref="PropertyFormat">8Bits</enumref>
1732                     <list type="CARD8" name="data8">
1733                         <fieldref>num_items</fieldref>
1734                     </list>
1735                     <pad align="4" />
1736                 </bitcase>
1737                 <bitcase>
1738                     <enumref ref="PropertyFormat">16Bits</enumref>
1739                     <list type="CARD16" name="data16">
1740                         <fieldref>num_items</fieldref>
1741                     </list>
1742                     <pad align="4" />
1743                 </bitcase>
1744                 <bitcase>
1745                     <enumref ref="PropertyFormat">32Bits</enumref>
1746                     <list type="CARD32" name="data32">
1747                         <fieldref>num_items</fieldref>
1748                     </list>
1749                 </bitcase>
1750             </switch>
1751         </reply>
1752     </request>
1753
1754     <!-- XIGetSelectedEvents -->
1755
1756     <request name="XIGetSelectedEvents" opcode="60">
1757         <field type="WINDOW" name="window" />
1758         <reply>
1759             <pad bytes="1" />
1760             <field type="CARD16" name="num_masks" />
1761             <pad bytes="22" />
1762             <list type="EventMask" name="masks">
1763                 <fieldref>num_masks</fieldref>
1764             </list>
1765         </reply>
1766     </request>
1767
1768     <!-- ⋅⋅⋅ Requests (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1769
1770     <!-- XIBarrierReleasePointer -->
1771
1772     <struct name="BarrierReleasePointerInfo">
1773         <field type="DeviceId" name="deviceid" />
1774         <pad bytes="2" />
1775         <field type="BARRIER"  name="barrier" />
1776         <field type="CARD32"   name="eventid" />
1777     </struct>
1778
1779     <request name="XIBarrierReleasePointer" opcode="61">
1780         <field type="CARD32" name="num_barriers" />
1781         <list type="BarrierReleasePointerInfo" name="barriers">
1782             <fieldref>num_barriers</fieldref>
1783         </list>
1784     </request>
1785
1786     <!-- ⋅⋅⋅ Events (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1787     <!-- Notes:
1788          - A 'len' field in a v1++ structure is in bytes.
1789     -->
1790
1791     <event name="DeviceValuator" number="0">
1792         <field type="CARD8"  name="device_id" />
1793         <field type="CARD16" name="device_state" />
1794         <field type="CARD8"  name="num_valuators" />
1795         <field type="CARD8"  name="first_valuator" />
1796         <list type="INT32"   name="valuators">
1797             <value>6</value>
1798         </list>
1799     </event>
1800
1801     <event name="DeviceKeyPress" number="1">
1802         <field type="BYTE"      name="detail" />
1803         <field type="TIMESTAMP" name="time" />
1804         <field type="WINDOW"    name="root" />
1805         <field type="WINDOW"    name="event" />
1806         <field type="WINDOW"    name="child" altenum="Window" />
1807         <field type="INT16"     name="root_x" />
1808         <field type="INT16"     name="root_y" />
1809         <field type="INT16"     name="event_x" />
1810         <field type="INT16"     name="event_y" />
1811         <field type="CARD16"    name="state" />
1812         <field type="BOOL"      name="same_screen" />
1813         <field type="CARD8"     name="device_id" />
1814     </event>
1815
1816     <eventcopy name="DeviceKeyRelease"    number="2" ref="DeviceKeyPress" />
1817     <eventcopy name="DeviceButtonPress"   number="3" ref="DeviceKeyPress" />
1818     <eventcopy name="DeviceButtonRelease" number="4" ref="DeviceKeyPress" />
1819     <eventcopy name="DeviceMotionNotify"  number="5" ref="DeviceKeyPress" />
1820
1821     <event name="DeviceFocusIn" number="6">
1822         <field type="BYTE"      name="detail" enum="xproto:NotifyDetail" />
1823         <field type="TIMESTAMP" name="time" />
1824         <field type="WINDOW"    name="window" />
1825         <field type="BYTE"      name="mode" enum="xproto:NotifyMode" />
1826         <field type="CARD8"     name="device_id" />
1827         <pad bytes="18" />
1828     </event>
1829
1830     <eventcopy name="DeviceFocusOut" number="7" ref="DeviceFocusIn" />
1831     <eventcopy name="ProximityIn"    number="8" ref="DeviceKeyPress" />
1832     <eventcopy name="ProximityOut"   number="9" ref="DeviceKeyPress" />
1833
1834     <event name="DeviceStateNotify" number="10">
1835         <field type="BYTE"      name="device_id" />
1836         <field type="TIMESTAMP" name="time" />
1837         <field type="CARD8"     name="num_keys" />
1838         <field type="CARD8"     name="num_buttons" />
1839         <field type="CARD8"     name="num_valuators" />
1840         <field type="CARD8"     name="classes_reported" />
1841         <list type="CARD8"      name="buttons">
1842             <value>4</value>
1843         </list>
1844         <list type="CARD8" name="keys">
1845             <value>4</value>
1846         </list>
1847         <list type="CARD32" name="valuators">
1848             <value>3</value>
1849         </list>
1850     </event>
1851
1852     <event name="DeviceMappingNotify" number="11">
1853         <field type="BYTE"    name="device_id" />
1854         <field type="CARD8"   name="request" />
1855         <field type="KeyCode" name="first_keycode" />
1856         <field type="CARD8"   name="count" />
1857         <pad bytes="1" />
1858         <field type="TIMESTAMP" name="time" />
1859         <pad bytes="20" />
1860     </event>
1861
1862     <event name="ChangeDeviceNotify" number="12">
1863         <field type="BYTE"      name="device_id" />
1864         <field type="TIMESTAMP" name="time" />
1865         <field type="CARD8"     name="request" />
1866         <pad bytes="23" />
1867     </event>
1868
1869     <event name="DeviceKeyStateNotify" number="13">
1870         <field type="BYTE" name="device_id" />
1871         <list type="CARD8" name="keys">
1872             <value>28</value>
1873         </list>
1874     </event>
1875
1876     <event name="DeviceButtonStateNotify" number="14">
1877         <field type="BYTE" name="device_id" />
1878         <list type="CARD8" name="buttons">
1879             <value>28</value>
1880         </list>
1881     </event>
1882
1883     <!-- ⋅⋅⋅ Events (v1.4) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1884
1885     <enum name="DeviceChange">
1886         <item name="Added">          <value>0</value> </item>
1887         <item name="Removed">        <value>1</value> </item>
1888         <item name="Enabled">        <value>2</value> </item>
1889         <item name="Disabled">       <value>3</value> </item>
1890         <item name="Unrecoverable">  <value>4</value> </item>
1891         <item name="ControlChanged"> <value>5</value> </item>
1892     </enum>
1893
1894     <event name="DevicePresenceNotify" number="15">
1895         <pad bytes="1" />
1896         <field type="TIMESTAMP" name="time" />
1897         <field type="BYTE"      name="devchange" enum="DeviceChange" />
1898         <field type="BYTE"      name="device_id" />
1899         <field type="CARD16"    name="control" />
1900         <pad bytes="20" />
1901     </event>
1902
1903     <!-- ⋅⋅⋅ Events (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1904
1905     <event name="DevicePropertyNotify" number="16">
1906         <field type="BYTE"      name="state" enum="Property" />
1907         <field type="TIMESTAMP" name="time" />
1908         <field type="ATOM"      name="property" />
1909         <pad bytes="19" />
1910         <field type="CARD8"     name="device_id" />
1911     </event>
1912
1913     <!-- ⋅⋅⋅ Events (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1914     <!-- Notes:
1915          - A 'len' field in a v2++ structure is in 4 byte units.
1916     -->
1917
1918     <enum name="ChangeReason">
1919         <item name="SlaveSwitch">  <value>1</value> </item>
1920         <item name="DeviceChange"> <value>2</value> </item>
1921     </enum>
1922
1923     <event name="DeviceChanged" number="1" xge="true">
1924         <field type="DeviceId"  name="deviceid" altenum="Device" />
1925         <field type="TIMESTAMP" name="time" altenum="Time" />
1926         <!-- event specific fields -->
1927         <field type="CARD16"    name="num_classes" />
1928         <field type="DeviceId"  name="sourceid" altenum="Device" />
1929         <field type="CARD8"     name="reason" enum="ChangeReason" />
1930         <pad bytes="11" />
1931         <!-- 32 byte boundary -->
1932         <list type="DeviceClass" name="classes">
1933             <fieldref>num_classes</fieldref>
1934         </list>
1935     </event>
1936
1937     <enum name="KeyEventFlags">
1938         <item name="KeyRepeat"> <bit>16</bit> </item>
1939     </enum>
1940
1941     <event name="KeyPress" number="2" xge="true">
1942         <field type="DeviceId"  name="deviceid" altenum="Device" />
1943         <field type="TIMESTAMP" name="time" altenum="Time" />
1944         <!-- event specific fields -->
1945         <field type="CARD32"    name="detail" />
1946         <field type="WINDOW"    name="root" />
1947         <field type="WINDOW"    name="event" />
1948         <field type="WINDOW"    name="child" />
1949         <!-- 32 byte boundary -->
1950         <field type="FP1616"    name="root_x" />
1951         <field type="FP1616"    name="root_y" />
1952         <field type="FP1616"    name="event_x" />
1953         <field type="FP1616"    name="event_y" />
1954         <field type="CARD16"    name="buttons_len" />
1955         <field type="CARD16"    name="valuators_len" />
1956         <field type="DeviceId"  name="sourceid" altenum="Device" />
1957         <pad bytes="2" />
1958         <field type="CARD32"       name="flags" mask="KeyEventFlags" />
1959         <field type="ModifierInfo" name="mods" />
1960         <field type="GroupInfo"    name="group" />
1961         <list type="CARD32" name="button_mask">
1962             <fieldref>buttons_len</fieldref>
1963         </list>
1964         <list type="CARD32" name="valuator_mask">
1965             <fieldref>valuators_len</fieldref>
1966         </list>
1967         <!-- Uninterpreted: list (axisvalues) of FP3232,
1968                             length is <popcount> on valuator_mask list -->
1969     </event>
1970
1971     <eventcopy name="KeyRelease" number="3" ref="KeyPress" />
1972
1973     <enum name="PointerEventFlags">
1974         <item name="PointerEmulated"> <bit>16</bit> </item>
1975     </enum>
1976
1977     <event name="ButtonPress" number="4" xge="true">
1978         <field type="DeviceId"  name="deviceid" altenum="Device" />
1979         <field type="TIMESTAMP" name="time" altenum="Time" />
1980         <!-- event specific fields -->
1981         <field type="CARD32"    name="detail" />
1982         <field type="WINDOW"    name="root" />
1983         <field type="WINDOW"    name="event" />
1984         <field type="WINDOW"    name="child" />
1985         <!-- 32 byte boundary -->
1986         <field type="FP1616"    name="root_x" />
1987         <field type="FP1616"    name="root_y" />
1988         <field type="FP1616"    name="event_x" />
1989         <field type="FP1616"    name="event_y" />
1990         <field type="CARD16"    name="buttons_len" />
1991         <field type="CARD16"    name="valuators_len" />
1992         <field type="DeviceId"  name="sourceid" altenum="Device" />
1993         <pad bytes="2" />
1994         <field type="CARD32"       name="flags" mask="PointerEventFlags" />
1995         <field type="ModifierInfo" name="mods" />
1996         <field type="GroupInfo"    name="group" />
1997         <list type="CARD32" name="button_mask">
1998             <fieldref>buttons_len</fieldref>
1999         </list>
2000         <list type="CARD32" name="valuator_mask">
2001             <fieldref>valuators_len</fieldref>
2002         </list>
2003         <!-- Uninterpreted: list (axisvalues) of FP3232,
2004                             length is <popcount> on valuator_mask list -->
2005     </event>
2006
2007     <eventcopy name="ButtonRelease" number="5" ref="ButtonPress" />
2008     <eventcopy name="Motion"        number="6" ref="ButtonPress" />
2009
2010     <enum name="NotifyMode">
2011         <item name="Normal">        <value>0</value> </item>
2012         <item name="Grab">          <value>1</value> </item>
2013         <item name="Ungrab">        <value>2</value> </item>
2014         <item name="WhileGrabbed">  <value>3</value> </item>
2015         <item name="PassiveGrab">   <value>4</value> </item>
2016         <item name="PassiveUngrab"> <value>5</value> </item>
2017     </enum>
2018
2019     <enum name="NotifyDetail">
2020         <item name="Ancestor">         <value>0</value> </item>
2021         <item name="Virtual">          <value>1</value> </item>
2022         <item name="Inferior">         <value>2</value> </item>
2023         <item name="Nonlinear">        <value>3</value> </item>
2024         <item name="NonlinearVirtual"> <value>4</value> </item>
2025         <item name="Pointer">          <value>5</value> </item>
2026         <item name="PointerRoot">      <value>6</value> </item>
2027         <item name="None">             <value>7</value> </item>
2028     </enum>
2029
2030     <event name="Enter" number="7" xge="true">
2031         <field type="DeviceId"  name="deviceid" altenum="Device" />
2032         <field type="TIMESTAMP" name="time" altenum="Time" />
2033         <!-- event specific fields -->
2034         <field type="DeviceId"  name="sourceid" altenum="Device" />
2035         <field type="CARD8"     name="mode" enum="xinput:NotifyMode" />
2036         <field type="CARD8"     name="detail" enum="xinput:NotifyDetail" />
2037         <field type="WINDOW"    name="root" />
2038         <field type="WINDOW"    name="event" />
2039         <field type="WINDOW"    name="child" />
2040         <!-- 32 byte boundary -->
2041         <field type="FP1616"       name="root_x" />
2042         <field type="FP1616"       name="root_y" />
2043         <field type="FP1616"       name="event_x" />
2044         <field type="FP1616"       name="event_y" />
2045         <field type="BOOL"         name="same_screen" />
2046         <field type="BOOL"         name="focus" />
2047         <field type="CARD16"       name="buttons_len" />
2048         <field type="ModifierInfo" name="mods" />
2049         <field type="GroupInfo"    name="group" />
2050         <list type="CARD32" name="buttons">
2051             <fieldref>buttons_len</fieldref>
2052         </list>
2053     </event>
2054
2055     <eventcopy name="Leave"    number="8" ref="Enter" />
2056     <eventcopy name="FocusIn"  number="9" ref="Enter" />
2057     <eventcopy name="FocusOut" number="10" ref="Enter" />
2058
2059     <enum name="HierarchyMask">
2060         <item name="MasterAdded">    <bit>0</bit> </item>
2061         <item name="MasterRemoved">  <bit>1</bit> </item>
2062         <item name="SlaveAdded">     <bit>2</bit> </item>
2063         <item name="SlaveRemoved">   <bit>3</bit> </item>
2064         <item name="SlaveAttached">  <bit>4</bit> </item>
2065         <item name="SlaveDetached">  <bit>5</bit> </item>
2066         <item name="DeviceEnabled">  <bit>6</bit> </item>
2067         <item name="DeviceDisabled"> <bit>7</bit> </item>
2068     </enum>
2069
2070     <struct name="HierarchyInfo">
2071         <field type="DeviceId" name="deviceid" altenum="Device" />
2072         <field type="DeviceId" name="attachment" altenum="Device" />
2073         <field type="CARD8"    name="type" enum="DeviceType"/>
2074         <field type="BOOL"     name="enabled" />
2075         <pad bytes="2" />
2076         <field type="CARD32"   name="flags" mask="HierarchyMask" />
2077     </struct>
2078
2079     <event name="Hierarchy" number="11" xge="true">
2080         <field type="DeviceId"  name="deviceid" altenum="Device" />
2081         <field type="TIMESTAMP" name="time" altenum="Time" />
2082         <!-- event specific fields -->
2083         <field type="CARD32"    name="flags" mask="HierarchyMask" />
2084         <field type="CARD16"    name="num_infos" />
2085         <pad bytes="10" />
2086         <!-- 32 byte boundary -->
2087         <list type="HierarchyInfo" name="infos">
2088             <fieldref>num_infos</fieldref>
2089         </list>
2090     </event>
2091
2092     <enum name="PropertyFlag">
2093         <item name="Deleted">  <value>0</value> </item>
2094         <item name="Created">  <value>1</value> </item>
2095         <item name="Modified"> <value>2</value> </item>
2096     </enum>
2097
2098     <event name="Property" number="12" xge="true">
2099         <field type="DeviceId"  name="deviceid" altenum="Device" />
2100         <field type="TIMESTAMP" name="time" altenum="Time" />
2101         <!-- event specific fields -->
2102         <field type="ATOM"      name="property" />
2103         <field type="CARD8"     name="what" enum="PropertyFlag" />
2104         <pad bytes="11" />
2105         <!-- 32 byte boundary -->
2106     </event>
2107
2108     <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2109
2110     <event name="RawKeyPress" number="13" xge="true">
2111         <field type="DeviceId"  name="deviceid" altenum="Device" />
2112         <field type="TIMESTAMP" name="time" altenum="Time" />
2113         <!-- event specific fields -->
2114         <field type="CARD32"    name="detail" />
2115         <field type="DeviceId"  name="sourceid" />
2116         <field type="CARD16"    name="valuators_len" />
2117         <field type="CARD32"    name="flags" mask="KeyEventFlags"/>
2118         <pad bytes="4" />
2119         <!-- 32 byte boundary -->
2120         <list type="CARD32" name="valuator_mask">
2121             <fieldref>valuators_len</fieldref>
2122         </list>
2123         <!-- Uninterpreted: list (axisvalues) of FP3232,
2124                             length is <popcount> on valuator_mask list -->
2125         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2126                             length is <popcount> on valuator_mask list -->
2127     </event>
2128
2129     <eventcopy name="RawKeyRelease" number="14" ref="RawKeyPress" />
2130
2131     <event name="RawButtonPress" number="15" xge="true">
2132         <field type="DeviceId"  name="deviceid" altenum="Device" />
2133         <field type="TIMESTAMP" name="time" altenum="Time" />
2134         <!-- event specific fields -->
2135         <field type="CARD32"    name="detail" />
2136         <field type="DeviceId"  name="sourceid" />
2137         <field type="CARD16"    name="valuators_len" />
2138         <field type="CARD32"    name="flags" mask="PointerEventFlags"/>
2139         <pad bytes="4" />
2140         <!-- 32 byte boundary -->
2141         <list type="CARD32" name="valuator_mask">
2142             <fieldref>valuators_len</fieldref>
2143         </list>
2144         <!-- Uninterpreted: list (axisvalues) of FP3232,
2145                             length is <popcount> on valuator_mask list -->
2146         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2147                             length is <popcount> on valuator_mask list -->
2148     </event>
2149
2150     <eventcopy name="RawButtonRelease" number="16" ref="RawButtonPress" />
2151     <eventcopy name="RawMotion"        number="17" ref="RawButtonPress" />
2152
2153     <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2154
2155     <enum name="TouchEventFlags">
2156         <item name="TouchPendingEnd">       <bit>16</bit> </item>
2157         <item name="TouchEmulatingPointer"> <bit>17</bit> </item>
2158     </enum>
2159
2160     <event name="TouchBegin" number="18" xge="true">
2161         <field type="DeviceId"  name="deviceid" altenum="Device" />
2162         <field type="TIMESTAMP" name="time" altenum="Time" />
2163         <!-- event specific fields -->
2164         <field type="CARD32"    name="detail" />
2165         <field type="WINDOW"    name="root" />
2166         <field type="WINDOW"    name="event" />
2167         <field type="WINDOW"    name="child" />
2168         <!-- 32 byte boundary -->
2169         <field type="FP1616"    name="root_x" />
2170         <field type="FP1616"    name="root_y" />
2171         <field type="FP1616"    name="event_x" />
2172         <field type="FP1616"    name="event_y" />
2173         <field type="CARD16"    name="buttons_len" />
2174         <field type="CARD16"    name="valuators_len" />
2175         <field type="DeviceId"  name="sourceid" altenum="Device" />
2176         <pad bytes="2" />
2177         <field type="CARD32"       name="flags" mask="TouchEventFlags" />
2178         <field type="ModifierInfo" name="mods" />
2179         <field type="GroupInfo"    name="group" />
2180         <list type="CARD32" name="button_mask">
2181             <fieldref>buttons_len</fieldref>
2182         </list>
2183         <list type="CARD32" name="valuator_mask">
2184             <fieldref>valuators_len</fieldref>
2185         </list>
2186         <!-- Uninterpreted: list (axisvalues) of FP3232,
2187                             length is <popcount> on valuator_mask list -->
2188     </event>
2189
2190     <eventcopy name="TouchUpdate" number="19" ref="TouchBegin" />
2191     <eventcopy name="TouchEnd"    number="20" ref="TouchBegin" />
2192
2193     <enum name="TouchOwnershipFlags">
2194         <!-- XXX: Remove this enum? Currently, no flag is defined. -->
2195         <item name="None"> <value>0</value> </item>
2196     </enum>
2197
2198     <event name="TouchOwnership" number="21" xge="true">
2199         <field type="DeviceId"  name="deviceid" altenum="Device" />
2200         <field type="TIMESTAMP" name="time" altenum="Time" />
2201         <!-- event specific fields -->
2202         <field type="CARD32"    name="touchid" />
2203         <field type="WINDOW"    name="root" />
2204         <field type="WINDOW"    name="event" />
2205         <field type="WINDOW"    name="child" />
2206         <!-- 32 byte boundary -->
2207         <field type="DeviceId"  name="sourceid" altenum="Device" />
2208         <pad bytes="2" />
2209         <field type="CARD32"    name="flags" enum="TouchOwnershipFlags" />
2210         <pad bytes="8" />
2211     </event>
2212
2213     <event name="RawTouchBegin" number="22" xge="true">
2214         <field type="DeviceId"  name="deviceid" altenum="Device" />
2215         <field type="TIMESTAMP" name="time" altenum="Time" />
2216         <!-- event specific fields -->
2217         <field type="CARD32"    name="detail" />
2218         <field type="DeviceId"  name="sourceid" />
2219         <field type="CARD16"    name="valuators_len" />
2220         <field type="CARD32"    name="flags" mask="TouchEventFlags"/>
2221         <pad bytes="4" />
2222         <!-- 32 byte boundary -->
2223         <list type="CARD32" name="valuator_mask">
2224             <fieldref>valuators_len</fieldref>
2225         </list>
2226         <!-- Uninterpreted: list (axisvalues) of FP3232,
2227                             length is <popcount> on valuator_mask list -->
2228         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2229                             length is <popcount> on valuator_mask list -->
2230     </event>
2231
2232     <eventcopy name="RawTouchUpdate" number="23" ref="RawTouchBegin" />
2233     <eventcopy name="RawTouchEnd"    number="24" ref="RawTouchBegin" />
2234
2235     <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2236
2237     <event name="BarrierHit" number="25" xge="true">
2238         <field type="DeviceId"  name="deviceid" altenum="Device" />
2239         <field type="TIMESTAMP" name="time" altenum="Time" />
2240         <!-- event specific fields -->
2241         <field type="CARD32"    name="eventid" />
2242         <field type="WINDOW"    name="root" />
2243         <field type="WINDOW"    name="event" />
2244         <field type="BARRIER"   name="barrier" />
2245         <!-- 32 byte boundary -->
2246         <field type="CARD32"    name="dtime" />
2247         <field type="CARD32"    name="flags" />
2248         <field type="DeviceId"  name="sourceid" altenum="Device" />
2249         <pad bytes="2" />
2250         <field type="FP1616"    name="root_x" />
2251         <field type="FP1616"    name="root_y" />
2252         <field type="FP3232"    name="dx" />
2253         <field type="FP3232"    name="dy" />
2254     </event>
2255
2256     <eventcopy name="BarrierLeave" number="26" ref="BarrierHit" />
2257
2258     <!-- ⋅⋅⋅ Errors (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2259
2260     <error name="Device"     number="0" />
2261     <error name="Event"      number="1" />
2262     <error name="Mode"       number="2" />
2263     <error name="DeviceBusy" number="3" />
2264     <error name="Class"      number="4" />
2265
2266 </xcb>