xinput: ev DeviceStateNotify.classes_reported: mask
[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             <!-- name_len is without padding, so we've to pad on our own,
1502                  auto align pad after the list would be helpfull -->
1503             <op op="*">
1504                 <op op="/">
1505                     <op op="+">
1506                         <fieldref>name_len</fieldref>
1507                         <value>3</value>
1508                     </op>
1509                     <value>4</value>
1510                 </op>
1511                 <value>4</value>
1512             </op>
1513         </list>
1514         <list type="DeviceClass" name="classes">
1515             <fieldref>num_classes</fieldref>
1516         </list>
1517     </struct>
1518
1519     <request name="XIQueryDevice" opcode="48">
1520         <field type="DeviceId" name="deviceid" altenum="Device" />
1521         <pad bytes="2" />
1522         <reply>
1523             <pad bytes="1" />
1524             <field type="CARD16" name="num_infos" />
1525             <pad bytes="22" />
1526             <list type="XIDeviceInfo" name="infos">
1527                 <fieldref>num_infos</fieldref>
1528             </list>
1529         </reply>
1530     </request>
1531
1532     <!-- XISetFocus -->
1533
1534     <request name="XISetFocus" opcode="49">
1535         <field type="WINDOW"    name="window" />
1536         <field type="TIMESTAMP" name="time" altenum="Time" />
1537         <field type="DeviceId"  name="deviceid" altenum="Device" />
1538         <pad bytes="2" />
1539     </request>
1540
1541     <!-- XIGetFocus -->
1542
1543     <request name="XIGetFocus" opcode="50">
1544         <field type="DeviceId" name="deviceid" altenum="Device" />
1545         <pad bytes="2" />
1546         <reply>
1547             <pad bytes="1" />
1548             <field type="WINDOW" name="focus" />
1549             <pad bytes="20" />
1550         </reply>
1551     </request>
1552
1553     <!-- XIGrabDevice -->
1554
1555     <enum name="GrabOwner">
1556         <item name="NoOwner"> <value>0</value> </item>
1557         <item name="Owner">   <value>1</value> </item>
1558     </enum>
1559
1560     <request name="XIGrabDevice" opcode="51">
1561         <field type="WINDOW"    name="window" />
1562         <field type="TIMESTAMP" name="time" altenum="Time" />
1563         <field type="CURSOR"    name="cursor" />
1564         <field type="DeviceId"  name="deviceid" altenum="Device" />
1565         <field type="CARD8"     name="mode" enum="GrabMode" />
1566         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1567         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1568         <pad bytes="1" />
1569         <field type="CARD16"    name="mask_len" />
1570         <list type="CARD32" name="mask">
1571             <fieldref>mask_len</fieldref>
1572         </list>
1573         <reply>
1574             <pad bytes="1" />
1575             <field type="CARD8" name="status" enum="GrabStatus" />
1576             <pad bytes="23" />
1577         </reply>
1578     </request>
1579
1580     <!-- XIUngrabDevice -->
1581
1582     <request name="XIUngrabDevice" opcode="52">
1583         <field type="TIMESTAMP" name="time" altenum="Time" />
1584         <field type="DeviceId" name="deviceid" altenum="Device" />
1585         <pad bytes="2" />
1586     </request>
1587
1588     <!-- XIAllowEvents -->
1589
1590     <enum name="EventMode">
1591         <item name="AsyncDevice">       <value>0</value> </item>
1592         <item name="SyncDevice">        <value>1</value> </item>
1593         <item name="ReplayDevice">      <value>2</value> </item>
1594         <item name="AsyncPairedDevice"> <value>3</value> </item>
1595         <item name="AsyncPair">         <value>4</value> </item>
1596         <item name="SyncPair">          <value>5</value> </item>
1597         <item name="AcceptTouch">       <value>6</value> </item>
1598         <item name="RejectTouch">       <value>7</value> </item>
1599     </enum>
1600
1601     <request name="XIAllowEvents" opcode="53">
1602         <field type="TIMESTAMP" name="time" altenum="Time" />
1603         <field type="DeviceId"  name="deviceid" altenum="Device" />
1604         <field type="CARD8"     name="event_mode" enum="EventMode" />
1605         <pad bytes="1" />
1606         <field type="CARD32"    name="touchid" />
1607         <field type="WINDOW"    name="grab_window" />
1608     </request>
1609
1610     <!-- XIPassiveGrabDevice -->
1611
1612     <enum name="GrabMode22">
1613         <item name="Sync">  <value>0</value> </item>
1614         <item name="Async"> <value>1</value> </item>
1615         <item name="Touch"> <value>2</value> </item>
1616     </enum>
1617
1618     <enum name="GrabType">
1619         <item name="Button">     <value>0</value> </item>
1620         <item name="Keycode">    <value>1</value> </item>
1621         <item name="Enter">      <value>2</value> </item>
1622         <item name="FocusIn">    <value>3</value> </item>
1623         <item name="TouchBegin"> <value>4</value> </item>
1624     </enum>
1625
1626     <enum name="ModifierMask">
1627         <item name="Any"> <bit>31</bit> </item>
1628     </enum>
1629
1630     <struct name="GrabModifierInfo">
1631         <field type="CARD32" name="modifiers" altenum="ModifierMask" />
1632         <field type="CARD8"  name="status" enum="GrabStatus" />
1633         <pad bytes="3" />
1634     </struct>
1635
1636     <request name="XIPassiveGrabDevice" opcode="54">
1637         <field type="TIMESTAMP" name="time" altenum="Time" />
1638         <field type="WINDOW"    name="grab_window" />
1639         <field type="CURSOR"    name="cursor" />
1640         <field type="CARD32"    name="detail" />
1641         <field type="DeviceId"  name="deviceid" altenum="Device" />
1642         <field type="CARD16"    name="num_modifiers" />
1643         <field type="CARD16"    name="mask_len" />
1644         <field type="CARD8"     name="grab_type" enum="GrabType" />
1645         <field type="CARD8"     name="grab_mode" enum="GrabMode22" />
1646         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1647         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1648         <pad bytes="2" />
1649         <list type="CARD32" name="mask">
1650             <fieldref>mask_len</fieldref>
1651         </list>
1652         <list type="CARD32" name="modifiers">
1653             <fieldref>num_modifiers</fieldref>
1654         </list>
1655         <reply>
1656             <pad bytes="1" />
1657             <field type="CARD16" name="num_modifiers" />
1658             <pad bytes="22" />
1659             <list type="GrabModifierInfo" name="modifiers">
1660                 <fieldref>num_modifiers</fieldref>
1661             </list>
1662         </reply>
1663     </request>
1664
1665     <!-- XIPassiveUngrabDevice -->
1666
1667     <request name="XIPassiveUngrabDevice" opcode="55">
1668         <field type="WINDOW"   name="grab_window" />
1669         <field type="CARD32"   name="detail" />
1670         <field type="DeviceId" name="deviceid" altenum="Device" />
1671         <field type="CARD16"   name="num_modifiers" />
1672         <field type="CARD8"    name="grab_type" enum="GrabType" />
1673         <pad bytes="3" />
1674         <list type="CARD32" name="modifiers">
1675             <fieldref>num_modifiers</fieldref>
1676         </list>
1677     </request>
1678
1679     <!-- XIListProperties -->
1680
1681     <request name="XIListProperties" opcode="56">
1682         <field type="DeviceId" name="deviceid" altenum="Device" />
1683         <pad bytes="2" />
1684         <reply>
1685             <pad bytes="1" />
1686             <field type="CARD16" name="num_properties" />
1687             <pad bytes="22" />
1688             <list type="ATOM" name="properties">
1689                 <fieldref>num_properties</fieldref>
1690             </list>
1691         </reply>
1692     </request>
1693
1694     <!-- XIChangeProperty -->
1695
1696     <request name="XIChangeProperty" opcode="57">
1697         <field type="DeviceId" name="deviceid" altenum="Device" />
1698         <field type="CARD8"    name="mode" enum="PropMode" />
1699         <field type="CARD8"    name="format" enum="PropertyFormat" />
1700         <field type="ATOM"     name="property" />
1701         <field type="ATOM"     name="type" />
1702         <field type="CARD32"   name="num_items" />
1703         <switch name="items">
1704             <fieldref>format</fieldref>
1705             <!-- <bitcase> is not correct, this would need <cases>s.
1706                  It works in that case, because PropertyFormat items can be
1707                  distinguished exactly as their values don't have equal bits.
1708             -->
1709             <bitcase>
1710                 <enumref ref="PropertyFormat">8Bits</enumref>
1711                 <list type="CARD8" name="data8">
1712                     <fieldref>num_items</fieldref>
1713                 </list>
1714             </bitcase>
1715             <bitcase>
1716                 <enumref ref="PropertyFormat">16Bits</enumref>
1717                 <list type="CARD16" name="data16">
1718                     <fieldref>num_items</fieldref>
1719                 </list>
1720             </bitcase>
1721             <bitcase>
1722                 <enumref ref="PropertyFormat">32Bits</enumref>
1723                 <list type="CARD32" name="data32">
1724                     <fieldref>num_items</fieldref>
1725                 </list>
1726             </bitcase>
1727         </switch>
1728     </request>
1729
1730     <!-- XIDeleteProperty -->
1731
1732     <request name="XIDeleteProperty" opcode="58">
1733         <field type="DeviceId" name="deviceid" altenum="Device" />
1734         <pad bytes="2" />
1735         <field type="ATOM"     name="property" />
1736     </request>
1737
1738     <!-- XIGetProperty -->
1739
1740     <request name="XIGetProperty" opcode="59">
1741         <field type="DeviceId" name="deviceid" altenum="Device" />
1742         <field type="BOOL"     name="delete" />
1743         <pad bytes="1" />
1744         <field type="ATOM"     name="property" />
1745         <field type="ATOM"     name="type" />
1746         <field type="CARD32"   name="offset" />
1747         <field type="CARD32"   name="len" />
1748         <reply>
1749             <pad bytes="1" />
1750             <field type="ATOM"   name="type" />
1751             <field type="CARD32" name="bytes_after" />
1752             <field type="CARD32" name="num_items" />
1753             <field type="CARD8"  name="format" enum="PropertyFormat" />
1754             <pad bytes="11" />
1755             <switch name="items">
1756                 <fieldref>format</fieldref>
1757                 <!-- <bitcase> is not correct, this would need <cases>s.
1758                      It works in that case, because PropertyFormat items can be
1759                      distinguished exactly as their values don't have equal bits.
1760                 -->
1761                 <bitcase>
1762                     <enumref ref="PropertyFormat">8Bits</enumref>
1763                     <list type="CARD8" name="data8">
1764                         <fieldref>num_items</fieldref>
1765                     </list>
1766                     <pad align="4" />
1767                 </bitcase>
1768                 <bitcase>
1769                     <enumref ref="PropertyFormat">16Bits</enumref>
1770                     <list type="CARD16" name="data16">
1771                         <fieldref>num_items</fieldref>
1772                     </list>
1773                     <pad align="4" />
1774                 </bitcase>
1775                 <bitcase>
1776                     <enumref ref="PropertyFormat">32Bits</enumref>
1777                     <list type="CARD32" name="data32">
1778                         <fieldref>num_items</fieldref>
1779                     </list>
1780                 </bitcase>
1781             </switch>
1782         </reply>
1783     </request>
1784
1785     <!-- XIGetSelectedEvents -->
1786
1787     <request name="XIGetSelectedEvents" opcode="60">
1788         <field type="WINDOW" name="window" />
1789         <reply>
1790             <pad bytes="1" />
1791             <field type="CARD16" name="num_masks" />
1792             <pad bytes="22" />
1793             <list type="EventMask" name="masks">
1794                 <fieldref>num_masks</fieldref>
1795             </list>
1796         </reply>
1797     </request>
1798
1799     <!-- ⋅⋅⋅ Requests (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1800
1801     <!-- XIBarrierReleasePointer -->
1802
1803     <struct name="BarrierReleasePointerInfo">
1804         <field type="DeviceId" name="deviceid" />
1805         <pad bytes="2" />
1806         <field type="BARRIER"  name="barrier" />
1807         <field type="CARD32"   name="eventid" />
1808     </struct>
1809
1810     <request name="XIBarrierReleasePointer" opcode="61">
1811         <field type="CARD32" name="num_barriers" />
1812         <list type="BarrierReleasePointerInfo" name="barriers">
1813             <fieldref>num_barriers</fieldref>
1814         </list>
1815     </request>
1816
1817     <!-- ⋅⋅⋅ Events (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1818     <!-- Notes:
1819          - A 'len' field in a v1++ structure is in bytes.
1820     -->
1821
1822     <event name="DeviceValuator" number="0">
1823         <field type="CARD8"  name="device_id" />
1824         <field type="CARD16" name="device_state" />
1825         <field type="CARD8"  name="num_valuators" />
1826         <field type="CARD8"  name="first_valuator" />
1827         <list type="INT32"   name="valuators">
1828             <value>6</value>
1829         </list>
1830     </event>
1831
1832     <!-- the highest bit in a CARD8 device_id-field indicates that more
1833         events will follow -->
1834     <enum name="MoreEventsMask">
1835         <item name="MoreEvents"> <bit>7</bit> </item> <!-- 0x80 -->
1836     </enum>
1837
1838     <event name="DeviceKeyPress" number="1">
1839         <field type="BYTE"      name="detail" />
1840         <field type="TIMESTAMP" name="time" />
1841         <field type="WINDOW"    name="root" />
1842         <field type="WINDOW"    name="event" />
1843         <field type="WINDOW"    name="child" altenum="Window" />
1844         <field type="INT16"     name="root_x" />
1845         <field type="INT16"     name="root_y" />
1846         <field type="INT16"     name="event_x" />
1847         <field type="INT16"     name="event_y" />
1848         <field type="CARD16"    name="state" mask="KeyButMask" />
1849         <field type="BOOL"      name="same_screen" />
1850         <field type="CARD8"     name="device_id" altmask="MoreEventsMask" />
1851     </event>
1852
1853     <eventcopy name="DeviceKeyRelease"    number="2" ref="DeviceKeyPress" />
1854     <eventcopy name="DeviceButtonPress"   number="3" ref="DeviceKeyPress" />
1855     <eventcopy name="DeviceButtonRelease" number="4" ref="DeviceKeyPress" />
1856     <eventcopy name="DeviceMotionNotify"  number="5" ref="DeviceKeyPress" />
1857
1858     <event name="DeviceFocusIn" number="6">
1859         <field type="BYTE"      name="detail" enum="xproto:NotifyDetail" />
1860         <field type="TIMESTAMP" name="time" />
1861         <field type="WINDOW"    name="window" />
1862         <field type="BYTE"      name="mode" enum="xproto:NotifyMode" />
1863         <field type="CARD8"     name="device_id" />
1864         <pad bytes="18" />
1865     </event>
1866
1867     <eventcopy name="DeviceFocusOut" number="7" ref="DeviceFocusIn" />
1868     <eventcopy name="ProximityIn"    number="8" ref="DeviceKeyPress" />
1869     <eventcopy name="ProximityOut"   number="9" ref="DeviceKeyPress" />
1870
1871     <enum name="ClassesReportedMask">
1872         <item name="OutOfProximity">     <bit>7</bit> </item> <!-- 0x80 -->
1873             <!-- 0 = InProxmity, 1 = OutOfProximity -->
1874
1875         <item name="DeviceModeAbsolute"> <bit>6</bit> </item> <!-- 0x40 -->
1876             <!-- 0 = Relative, 1 = Absolute -->
1877
1878         <item name="ReportingValuators"> <bit>2</bit> </item> <!-- 0x04 -->
1879         <item name="ReportingButtons">   <bit>1</bit> </item> <!-- 0x02 -->
1880         <item name="ReportingKeys">      <bit>0</bit> </item> <!-- 0x01 -->
1881     </enum>
1882
1883     <event name="DeviceStateNotify" number="10">
1884         <field type="BYTE"      name="device_id" altmask="MoreEventsMask" />
1885         <field type="TIMESTAMP" name="time" />
1886         <field type="CARD8"     name="num_keys" />
1887         <field type="CARD8"     name="num_buttons" />
1888         <field type="CARD8"     name="num_valuators" />
1889         <field type="CARD8"     name="classes_reported" mask="ClassesReportedMask" />
1890         <list type="CARD8"      name="buttons">
1891             <value>4</value>
1892         </list>
1893         <list type="CARD8" name="keys">
1894             <value>4</value>
1895         </list>
1896         <list type="CARD32" name="valuators">
1897             <value>3</value>
1898         </list>
1899     </event>
1900
1901     <event name="DeviceMappingNotify" number="11">
1902         <field type="BYTE"    name="device_id" />
1903         <field type="CARD8"   name="request" enum="Mapping" />
1904         <field type="KeyCode" name="first_keycode" />
1905         <field type="CARD8"   name="count" />
1906         <pad bytes="1" />
1907         <field type="TIMESTAMP" name="time" />
1908         <pad bytes="20" />
1909     </event>
1910
1911     <enum name="ChangeDevice">
1912         <item name="NewPointer">  <value>0</value> </item>
1913         <item name="NewKeyboard"> <value>1</value> </item>
1914     </enum>
1915
1916     <event name="ChangeDeviceNotify" number="12">
1917         <field type="BYTE"      name="device_id" />
1918         <field type="TIMESTAMP" name="time" />
1919         <field type="CARD8"     name="request" enum="ChangeDevice" />
1920         <pad bytes="23" />
1921     </event>
1922
1923     <event name="DeviceKeyStateNotify" number="13">
1924         <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
1925         <list type="CARD8" name="keys">
1926             <value>28</value>
1927         </list>
1928     </event>
1929
1930     <event name="DeviceButtonStateNotify" number="14">
1931         <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
1932         <list type="CARD8" name="buttons">
1933             <value>28</value>
1934         </list>
1935     </event>
1936
1937     <!-- ⋅⋅⋅ Events (v1.4) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1938
1939     <enum name="DeviceChange">
1940         <item name="Added">          <value>0</value> </item>
1941         <item name="Removed">        <value>1</value> </item>
1942         <item name="Enabled">        <value>2</value> </item>
1943         <item name="Disabled">       <value>3</value> </item>
1944         <item name="Unrecoverable">  <value>4</value> </item>
1945         <item name="ControlChanged"> <value>5</value> </item>
1946     </enum>
1947
1948     <event name="DevicePresenceNotify" number="15">
1949         <pad bytes="1" />
1950         <field type="TIMESTAMP" name="time" />
1951         <field type="BYTE"      name="devchange" enum="DeviceChange" />
1952         <field type="BYTE"      name="device_id" />
1953         <field type="CARD16"    name="control" />
1954         <pad bytes="20" />
1955     </event>
1956
1957     <!-- ⋅⋅⋅ Events (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1958
1959     <event name="DevicePropertyNotify" number="16">
1960         <field type="BYTE"      name="state" enum="Property" />
1961         <field type="TIMESTAMP" name="time" />
1962         <field type="ATOM"      name="property" />
1963         <pad bytes="19" />
1964         <field type="CARD8"     name="device_id" />
1965     </event>
1966
1967     <!-- ⋅⋅⋅ Events (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1968     <!-- Notes:
1969          - A 'len' field in a v2++ structure is in 4 byte units.
1970     -->
1971
1972     <enum name="ChangeReason">
1973         <item name="SlaveSwitch">  <value>1</value> </item>
1974         <item name="DeviceChange"> <value>2</value> </item>
1975     </enum>
1976
1977     <event name="DeviceChanged" number="1" xge="true">
1978         <field type="DeviceId"  name="deviceid" altenum="Device" />
1979         <field type="TIMESTAMP" name="time" altenum="Time" />
1980         <!-- event specific fields -->
1981         <field type="CARD16"    name="num_classes" />
1982         <field type="DeviceId"  name="sourceid" altenum="Device" />
1983         <field type="CARD8"     name="reason" enum="ChangeReason" />
1984         <pad bytes="11" />
1985         <!-- 32 byte boundary -->
1986         <list type="DeviceClass" name="classes">
1987             <fieldref>num_classes</fieldref>
1988         </list>
1989     </event>
1990
1991     <enum name="KeyEventFlags">
1992         <item name="KeyRepeat"> <bit>16</bit> </item>
1993     </enum>
1994
1995     <event name="KeyPress" number="2" xge="true">
1996         <field type="DeviceId"  name="deviceid" altenum="Device" />
1997         <field type="TIMESTAMP" name="time" altenum="Time" />
1998         <!-- event specific fields -->
1999         <field type="CARD32"    name="detail" />
2000         <field type="WINDOW"    name="root" />
2001         <field type="WINDOW"    name="event" />
2002         <field type="WINDOW"    name="child" />
2003         <!-- 32 byte boundary -->
2004         <field type="FP1616"    name="root_x" />
2005         <field type="FP1616"    name="root_y" />
2006         <field type="FP1616"    name="event_x" />
2007         <field type="FP1616"    name="event_y" />
2008         <field type="CARD16"    name="buttons_len" />
2009         <field type="CARD16"    name="valuators_len" />
2010         <field type="DeviceId"  name="sourceid" altenum="Device" />
2011         <pad bytes="2" />
2012         <field type="CARD32"       name="flags" mask="KeyEventFlags" />
2013         <field type="ModifierInfo" name="mods" />
2014         <field type="GroupInfo"    name="group" />
2015         <list type="CARD32" name="button_mask">
2016             <fieldref>buttons_len</fieldref>
2017         </list>
2018         <list type="CARD32" name="valuator_mask">
2019             <fieldref>valuators_len</fieldref>
2020         </list>
2021         <!-- Uninterpreted: list (axisvalues) of FP3232,
2022                             length is <popcount> on valuator_mask list -->
2023     </event>
2024
2025     <eventcopy name="KeyRelease" number="3" ref="KeyPress" />
2026
2027     <enum name="PointerEventFlags">
2028         <item name="PointerEmulated"> <bit>16</bit> </item>
2029     </enum>
2030
2031     <event name="ButtonPress" number="4" xge="true">
2032         <field type="DeviceId"  name="deviceid" altenum="Device" />
2033         <field type="TIMESTAMP" name="time" altenum="Time" />
2034         <!-- event specific fields -->
2035         <field type="CARD32"    name="detail" />
2036         <field type="WINDOW"    name="root" />
2037         <field type="WINDOW"    name="event" />
2038         <field type="WINDOW"    name="child" />
2039         <!-- 32 byte boundary -->
2040         <field type="FP1616"    name="root_x" />
2041         <field type="FP1616"    name="root_y" />
2042         <field type="FP1616"    name="event_x" />
2043         <field type="FP1616"    name="event_y" />
2044         <field type="CARD16"    name="buttons_len" />
2045         <field type="CARD16"    name="valuators_len" />
2046         <field type="DeviceId"  name="sourceid" altenum="Device" />
2047         <pad bytes="2" />
2048         <field type="CARD32"       name="flags" mask="PointerEventFlags" />
2049         <field type="ModifierInfo" name="mods" />
2050         <field type="GroupInfo"    name="group" />
2051         <list type="CARD32" name="button_mask">
2052             <fieldref>buttons_len</fieldref>
2053         </list>
2054         <list type="CARD32" name="valuator_mask">
2055             <fieldref>valuators_len</fieldref>
2056         </list>
2057         <!-- Uninterpreted: list (axisvalues) of FP3232,
2058                             length is <popcount> on valuator_mask list -->
2059     </event>
2060
2061     <eventcopy name="ButtonRelease" number="5" ref="ButtonPress" />
2062     <eventcopy name="Motion"        number="6" ref="ButtonPress" />
2063
2064     <enum name="NotifyMode">
2065         <item name="Normal">        <value>0</value> </item>
2066         <item name="Grab">          <value>1</value> </item>
2067         <item name="Ungrab">        <value>2</value> </item>
2068         <item name="WhileGrabbed">  <value>3</value> </item>
2069         <item name="PassiveGrab">   <value>4</value> </item>
2070         <item name="PassiveUngrab"> <value>5</value> </item>
2071     </enum>
2072
2073     <enum name="NotifyDetail">
2074         <item name="Ancestor">         <value>0</value> </item>
2075         <item name="Virtual">          <value>1</value> </item>
2076         <item name="Inferior">         <value>2</value> </item>
2077         <item name="Nonlinear">        <value>3</value> </item>
2078         <item name="NonlinearVirtual"> <value>4</value> </item>
2079         <item name="Pointer">          <value>5</value> </item>
2080         <item name="PointerRoot">      <value>6</value> </item>
2081         <item name="None">             <value>7</value> </item>
2082     </enum>
2083
2084     <event name="Enter" number="7" xge="true">
2085         <field type="DeviceId"  name="deviceid" altenum="Device" />
2086         <field type="TIMESTAMP" name="time" altenum="Time" />
2087         <!-- event specific fields -->
2088         <field type="DeviceId"  name="sourceid" altenum="Device" />
2089         <field type="CARD8"     name="mode" enum="xinput:NotifyMode" />
2090         <field type="CARD8"     name="detail" enum="xinput:NotifyDetail" />
2091         <field type="WINDOW"    name="root" />
2092         <field type="WINDOW"    name="event" />
2093         <field type="WINDOW"    name="child" />
2094         <!-- 32 byte boundary -->
2095         <field type="FP1616"       name="root_x" />
2096         <field type="FP1616"       name="root_y" />
2097         <field type="FP1616"       name="event_x" />
2098         <field type="FP1616"       name="event_y" />
2099         <field type="BOOL"         name="same_screen" />
2100         <field type="BOOL"         name="focus" />
2101         <field type="CARD16"       name="buttons_len" />
2102         <field type="ModifierInfo" name="mods" />
2103         <field type="GroupInfo"    name="group" />
2104         <list type="CARD32" name="buttons">
2105             <fieldref>buttons_len</fieldref>
2106         </list>
2107     </event>
2108
2109     <eventcopy name="Leave"    number="8" ref="Enter" />
2110     <eventcopy name="FocusIn"  number="9" ref="Enter" />
2111     <eventcopy name="FocusOut" number="10" ref="Enter" />
2112
2113     <enum name="HierarchyMask">
2114         <item name="MasterAdded">    <bit>0</bit> </item>
2115         <item name="MasterRemoved">  <bit>1</bit> </item>
2116         <item name="SlaveAdded">     <bit>2</bit> </item>
2117         <item name="SlaveRemoved">   <bit>3</bit> </item>
2118         <item name="SlaveAttached">  <bit>4</bit> </item>
2119         <item name="SlaveDetached">  <bit>5</bit> </item>
2120         <item name="DeviceEnabled">  <bit>6</bit> </item>
2121         <item name="DeviceDisabled"> <bit>7</bit> </item>
2122     </enum>
2123
2124     <struct name="HierarchyInfo">
2125         <field type="DeviceId" name="deviceid" altenum="Device" />
2126         <field type="DeviceId" name="attachment" altenum="Device" />
2127         <field type="CARD8"    name="type" enum="DeviceType"/>
2128         <field type="BOOL"     name="enabled" />
2129         <pad bytes="2" />
2130         <field type="CARD32"   name="flags" mask="HierarchyMask" />
2131     </struct>
2132
2133     <event name="Hierarchy" number="11" xge="true">
2134         <field type="DeviceId"  name="deviceid" altenum="Device" />
2135         <field type="TIMESTAMP" name="time" altenum="Time" />
2136         <!-- event specific fields -->
2137         <field type="CARD32"    name="flags" mask="HierarchyMask" />
2138         <field type="CARD16"    name="num_infos" />
2139         <pad bytes="10" />
2140         <!-- 32 byte boundary -->
2141         <list type="HierarchyInfo" name="infos">
2142             <fieldref>num_infos</fieldref>
2143         </list>
2144     </event>
2145
2146     <enum name="PropertyFlag">
2147         <item name="Deleted">  <value>0</value> </item>
2148         <item name="Created">  <value>1</value> </item>
2149         <item name="Modified"> <value>2</value> </item>
2150     </enum>
2151
2152     <event name="Property" number="12" xge="true">
2153         <field type="DeviceId"  name="deviceid" altenum="Device" />
2154         <field type="TIMESTAMP" name="time" altenum="Time" />
2155         <!-- event specific fields -->
2156         <field type="ATOM"      name="property" />
2157         <field type="CARD8"     name="what" enum="PropertyFlag" />
2158         <pad bytes="11" />
2159         <!-- 32 byte boundary -->
2160     </event>
2161
2162     <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2163
2164     <event name="RawKeyPress" number="13" xge="true">
2165         <field type="DeviceId"  name="deviceid" altenum="Device" />
2166         <field type="TIMESTAMP" name="time" altenum="Time" />
2167         <!-- event specific fields -->
2168         <field type="CARD32"    name="detail" />
2169         <field type="DeviceId"  name="sourceid" />
2170         <field type="CARD16"    name="valuators_len" />
2171         <field type="CARD32"    name="flags" mask="KeyEventFlags"/>
2172         <pad bytes="4" />
2173         <!-- 32 byte boundary -->
2174         <list type="CARD32" name="valuator_mask">
2175             <fieldref>valuators_len</fieldref>
2176         </list>
2177         <!-- Uninterpreted: list (axisvalues) of FP3232,
2178                             length is <popcount> on valuator_mask list -->
2179         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2180                             length is <popcount> on valuator_mask list -->
2181     </event>
2182
2183     <eventcopy name="RawKeyRelease" number="14" ref="RawKeyPress" />
2184
2185     <event name="RawButtonPress" number="15" xge="true">
2186         <field type="DeviceId"  name="deviceid" altenum="Device" />
2187         <field type="TIMESTAMP" name="time" altenum="Time" />
2188         <!-- event specific fields -->
2189         <field type="CARD32"    name="detail" />
2190         <field type="DeviceId"  name="sourceid" />
2191         <field type="CARD16"    name="valuators_len" />
2192         <field type="CARD32"    name="flags" mask="PointerEventFlags"/>
2193         <pad bytes="4" />
2194         <!-- 32 byte boundary -->
2195         <list type="CARD32" name="valuator_mask">
2196             <fieldref>valuators_len</fieldref>
2197         </list>
2198         <!-- Uninterpreted: list (axisvalues) of FP3232,
2199                             length is <popcount> on valuator_mask list -->
2200         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2201                             length is <popcount> on valuator_mask list -->
2202     </event>
2203
2204     <eventcopy name="RawButtonRelease" number="16" ref="RawButtonPress" />
2205     <eventcopy name="RawMotion"        number="17" ref="RawButtonPress" />
2206
2207     <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2208
2209     <enum name="TouchEventFlags">
2210         <item name="TouchPendingEnd">       <bit>16</bit> </item>
2211         <item name="TouchEmulatingPointer"> <bit>17</bit> </item>
2212     </enum>
2213
2214     <event name="TouchBegin" number="18" xge="true">
2215         <field type="DeviceId"  name="deviceid" altenum="Device" />
2216         <field type="TIMESTAMP" name="time" altenum="Time" />
2217         <!-- event specific fields -->
2218         <field type="CARD32"    name="detail" />
2219         <field type="WINDOW"    name="root" />
2220         <field type="WINDOW"    name="event" />
2221         <field type="WINDOW"    name="child" />
2222         <!-- 32 byte boundary -->
2223         <field type="FP1616"    name="root_x" />
2224         <field type="FP1616"    name="root_y" />
2225         <field type="FP1616"    name="event_x" />
2226         <field type="FP1616"    name="event_y" />
2227         <field type="CARD16"    name="buttons_len" />
2228         <field type="CARD16"    name="valuators_len" />
2229         <field type="DeviceId"  name="sourceid" altenum="Device" />
2230         <pad bytes="2" />
2231         <field type="CARD32"       name="flags" mask="TouchEventFlags" />
2232         <field type="ModifierInfo" name="mods" />
2233         <field type="GroupInfo"    name="group" />
2234         <list type="CARD32" name="button_mask">
2235             <fieldref>buttons_len</fieldref>
2236         </list>
2237         <list type="CARD32" name="valuator_mask">
2238             <fieldref>valuators_len</fieldref>
2239         </list>
2240         <!-- Uninterpreted: list (axisvalues) of FP3232,
2241                             length is <popcount> on valuator_mask list -->
2242     </event>
2243
2244     <eventcopy name="TouchUpdate" number="19" ref="TouchBegin" />
2245     <eventcopy name="TouchEnd"    number="20" ref="TouchBegin" />
2246
2247     <enum name="TouchOwnershipFlags">
2248         <!-- XXX: Remove this enum? Currently, no flag is defined. -->
2249         <item name="None"> <value>0</value> </item>
2250     </enum>
2251
2252     <event name="TouchOwnership" number="21" xge="true">
2253         <field type="DeviceId"  name="deviceid" altenum="Device" />
2254         <field type="TIMESTAMP" name="time" altenum="Time" />
2255         <!-- event specific fields -->
2256         <field type="CARD32"    name="touchid" />
2257         <field type="WINDOW"    name="root" />
2258         <field type="WINDOW"    name="event" />
2259         <field type="WINDOW"    name="child" />
2260         <!-- 32 byte boundary -->
2261         <field type="DeviceId"  name="sourceid" altenum="Device" />
2262         <pad bytes="2" />
2263         <field type="CARD32"    name="flags" enum="TouchOwnershipFlags" />
2264         <pad bytes="8" />
2265     </event>
2266
2267     <event name="RawTouchBegin" number="22" xge="true">
2268         <field type="DeviceId"  name="deviceid" altenum="Device" />
2269         <field type="TIMESTAMP" name="time" altenum="Time" />
2270         <!-- event specific fields -->
2271         <field type="CARD32"    name="detail" />
2272         <field type="DeviceId"  name="sourceid" />
2273         <field type="CARD16"    name="valuators_len" />
2274         <field type="CARD32"    name="flags" mask="TouchEventFlags"/>
2275         <pad bytes="4" />
2276         <!-- 32 byte boundary -->
2277         <list type="CARD32" name="valuator_mask">
2278             <fieldref>valuators_len</fieldref>
2279         </list>
2280         <!-- Uninterpreted: list (axisvalues) of FP3232,
2281                             length is <popcount> on valuator_mask list -->
2282         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2283                             length is <popcount> on valuator_mask list -->
2284     </event>
2285
2286     <eventcopy name="RawTouchUpdate" number="23" ref="RawTouchBegin" />
2287     <eventcopy name="RawTouchEnd"    number="24" ref="RawTouchBegin" />
2288
2289     <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2290
2291     <event name="BarrierHit" number="25" xge="true">
2292         <field type="DeviceId"  name="deviceid" altenum="Device" />
2293         <field type="TIMESTAMP" name="time" altenum="Time" />
2294         <!-- event specific fields -->
2295         <field type="CARD32"    name="eventid" />
2296         <field type="WINDOW"    name="root" />
2297         <field type="WINDOW"    name="event" />
2298         <field type="BARRIER"   name="barrier" />
2299         <!-- 32 byte boundary -->
2300         <field type="CARD32"    name="dtime" />
2301         <field type="CARD32"    name="flags" />
2302         <field type="DeviceId"  name="sourceid" altenum="Device" />
2303         <pad bytes="2" />
2304         <field type="FP1616"    name="root_x" />
2305         <field type="FP1616"    name="root_y" />
2306         <field type="FP3232"    name="dx" />
2307         <field type="FP3232"    name="dy" />
2308     </event>
2309
2310     <eventcopy name="BarrierLeave" number="26" ref="BarrierHit" />
2311
2312     <!-- ⋅⋅⋅ Errors (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2313
2314     <error name="Device"     number="0" />
2315     <error name="Event"      number="1" />
2316     <error name="Mode"       number="2" />
2317     <error name="DeviceBusy" number="3" />
2318     <error name="Class"      number="4" />
2319
2320 </xcb>