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