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