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