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