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