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