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