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