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