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