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