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