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