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