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