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