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