xinput: cleanup the TODO-list
[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                 <!-- <bitcase> is not correct, this would need <cases>s.
1373                      It works in that case, because PropertyFormat items can be
1374                      distinguished exactly as their values don't have equal bits.
1375                 -->
1376                 <bitcase>
1377                     <enumref ref="PropertyFormat">8Bits</enumref>
1378                     <list type="CARD8" name="data8">
1379                         <fieldref>num_items</fieldref>
1380                     </list>
1381                     <pad align="4" />
1382                 </bitcase>
1383                 <bitcase>
1384                     <enumref ref="PropertyFormat">16Bits</enumref>
1385                     <list type="CARD16" name="data16">
1386                         <fieldref>num_items</fieldref>
1387                     </list>
1388                     <pad align="4" />
1389                 </bitcase>
1390                 <bitcase>
1391                     <enumref ref="PropertyFormat">32Bits</enumref>
1392                     <list type="CARD32" name="data32">
1393                         <fieldref>num_items</fieldref>
1394                     </list>
1395                 </bitcase>
1396             </switch>
1397         </reply>
1398     </request>
1399
1400     <!-- ⋅⋅⋅ Requests (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1401
1402     <!-- XIQueryPointer -->
1403
1404     <enum name="Device">
1405         <item name="All">       <value>0</value> </item>
1406         <item name="AllMaster"> <value>1</value> </item>
1407     </enum>
1408
1409     <struct name="GroupInfo">
1410         <field type="CARD8" name="base" />
1411         <field type="CARD8" name="latched" />
1412         <field type="CARD8" name="locked" />
1413         <field type="CARD8" name="effective" />
1414     </struct>
1415
1416     <struct name="ModifierInfo">
1417         <field type="CARD32" name="base" />
1418         <field type="CARD32" name="latched" />
1419         <field type="CARD32" name="locked" />
1420         <field type="CARD32" name="effective" />
1421     </struct>
1422
1423     <request name="XIQueryPointer" opcode="40">
1424         <field type="WINDOW"   name="window" />
1425         <field type="DeviceId" name="deviceid" altenum="Device" />
1426         <pad bytes="2" />
1427         <reply>
1428             <pad bytes="1" />
1429             <field type="WINDOW"       name="root" />
1430             <field type="WINDOW"       name="child" />
1431             <field type="FP1616"       name="root_x" />
1432             <field type="FP1616"       name="root_y" />
1433             <field type="FP1616"       name="win_x" />
1434             <field type="FP1616"       name="win_y" />
1435             <field type="BOOL"         name="same_screen" />
1436             <pad bytes="1" />
1437             <field type="CARD16"       name="buttons_len" />
1438             <field type="ModifierInfo" name="mods" />
1439             <field type="GroupInfo"    name="group" />
1440             <list type="CARD32" name="buttons">
1441                 <fieldref>buttons_len</fieldref>
1442             </list>
1443         </reply>
1444     </request>
1445
1446     <!-- XIWarpPointer -->
1447
1448     <request name="XIWarpPointer" opcode="41">
1449         <field type="WINDOW"   name="src_win" />
1450         <field type="WINDOW"   name="dst_win" />
1451         <field type="FP1616"   name="src_x" />
1452         <field type="FP1616"   name="src_y" />
1453         <field type="CARD16"   name="src_width" />
1454         <field type="CARD16"   name="src_height" />
1455         <field type="FP1616"   name="dst_x" />
1456         <field type="FP1616"   name="dst_y" />
1457         <field type="DeviceId" name="deviceid" altenum="Device" />
1458         <pad bytes="2" />
1459     </request>
1460
1461     <!-- XIChangeCursor -->
1462
1463     <request name="XIChangeCursor" opcode="42">
1464         <field type="WINDOW"   name="window" />
1465         <field type="CURSOR"   name="cursor" />
1466         <field type="DeviceId" name="deviceid" altenum="Device" />
1467         <pad bytes="2" />
1468     </request>
1469
1470     <!-- XIChangeHierarchy -->
1471
1472     <enum name="HierarchyChangeType">
1473         <item name="AddMaster">    <value>1</value> </item>
1474         <item name="RemoveMaster"> <value>2</value> </item>
1475         <item name="AttachSlave">  <value>3</value> </item>
1476         <item name="DetachSlave">  <value>4</value> </item>
1477     </enum>
1478
1479     <enum name="ChangeMode">
1480         <item name="Attach"> <value>1</value> </item>
1481         <item name="Float">  <value>2</value> </item>
1482     </enum>
1483
1484     <struct name="AddMaster">
1485         <field type="CARD16" name="type" enum="HierarchyChangeType" />
1486         <field type="CARD16" name="len" />
1487         <field type="CARD16" name="name_len" />
1488         <field type="BOOL"   name="send_core" />
1489         <field type="BOOL"   name="enable" />
1490         <list type="char" name="name">
1491             <fieldref>name_len</fieldref>
1492         </list>
1493         <pad align="4" />
1494     </struct>
1495
1496     <struct name="RemoveMaster">
1497         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1498         <field type="CARD16"   name="len" />
1499         <field type="DeviceId" name="deviceid" altenum="Device" />
1500         <field type="CARD8"    name="return_mode" enum="ChangeMode" />
1501         <pad bytes="1" />
1502         <field type="DeviceId" name="return_pointer" altenum="Device" />
1503         <field type="DeviceId" name="return_keyboard" altenum="Device" />
1504     </struct>
1505
1506     <struct name="AttachSlave">
1507         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1508         <field type="CARD16"   name="len" />
1509         <field type="DeviceId" name="deviceid" altenum="Device" />
1510         <field type="DeviceId" name="master" altenum="Device" />
1511     </struct>
1512
1513     <struct name="DetachSlave">
1514         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1515         <field type="CARD16"   name="len" />
1516         <field type="DeviceId" name="deviceid" altenum="Device" />
1517         <pad bytes="2" />
1518     </struct>
1519
1520     <struct name="HierarchyChange">
1521         <field type="CARD16" name="type" enum="HierarchyChangeType" />
1522         <field type="CARD16" name="len" />
1523         <switch name="data">
1524             <fieldref>type</fieldref>
1525             <case name="add_master">
1526                 <enumref ref="HierarchyChangeType">AddMaster</enumref>
1527                 <field type="CARD16" name="name_len" />
1528                 <field type="BOOL"   name="send_core" />
1529                 <field type="BOOL"   name="enable" />
1530                 <list type="char" name="name">
1531                     <fieldref>name_len</fieldref>
1532                 </list>
1533                 <pad align="4" />
1534             </case>
1535             <case name="remove_master">
1536                 <enumref ref="HierarchyChangeType">RemoveMaster</enumref>
1537                 <field type="DeviceId" name="deviceid" altenum="Device" />
1538                 <field type="CARD8"    name="return_mode" enum="ChangeMode" />
1539                 <pad bytes="1" />
1540                 <field type="DeviceId" name="return_pointer" altenum="Device" />
1541                 <field type="DeviceId" name="return_keyboard" altenum="Device" />
1542             </case>
1543             <case name="attach_slave">
1544                 <enumref ref="HierarchyChangeType">AttachSlave</enumref>
1545                 <field type="DeviceId" name="deviceid" altenum="Device" />
1546                 <field type="DeviceId" name="master" altenum="Device" />
1547             </case>
1548             <case name="detach_slave">
1549                 <enumref ref="HierarchyChangeType">DetachSlave</enumref>
1550                 <field type="DeviceId" name="deviceid" altenum="Device" />
1551                 <pad bytes="2" />
1552             </case>
1553         </switch>
1554     </struct>
1555
1556     <request name="XIChangeHierarchy" opcode="43">
1557         <field type="CARD8" name="num_changes" />
1558         <pad bytes="3" />
1559         <list type="HierarchyChange" name="changes">
1560             <fieldref>num_changes</fieldref>
1561         </list>
1562     </request>
1563
1564     <!-- XISetClientPointer -->
1565
1566     <request name="XISetClientPointer" opcode="44">
1567         <field type="WINDOW"   name="window" />
1568         <field type="DeviceId" name="deviceid" altenum="Device" />
1569         <pad bytes="2" />
1570     </request>
1571
1572     <!-- XIGetClientPointer -->
1573
1574     <request name="XIGetClientPointer" opcode="45">
1575         <field type="WINDOW" name="window" />
1576         <reply>
1577             <pad bytes="1" />
1578             <field type="BOOL"     name="set" />
1579             <pad bytes="1" />
1580             <field type="DeviceId" name="deviceid" altenum="Device" />
1581             <pad bytes="20" />
1582         </reply>
1583     </request>
1584
1585     <!-- XISelectEvents -->
1586
1587     <enum name="XIEventMask">
1588         <item name="DeviceChanged">    <bit>1</bit> </item>
1589         <item name="KeyPress">         <bit>2</bit> </item>
1590         <item name="KeyRelease">       <bit>3</bit> </item>
1591         <item name="ButtonPress">      <bit>4</bit> </item>
1592         <item name="ButtonRelease">    <bit>5</bit> </item>
1593         <item name="Motion">           <bit>6</bit> </item>
1594         <item name="Enter">            <bit>7</bit> </item>
1595         <item name="Leave">            <bit>8</bit> </item>
1596         <item name="FocusIn">          <bit>9</bit> </item>
1597         <item name="FocusOut">         <bit>10</bit> </item>
1598         <item name="Hierarchy">        <bit>11</bit> </item>
1599         <item name="Property">         <bit>12</bit> </item>
1600         <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅ -->
1601         <item name="RawKeyPress">      <bit>13</bit> </item>
1602         <item name="RawKeyRelease">    <bit>14</bit> </item>
1603         <item name="RawButtonPress">   <bit>15</bit> </item>
1604         <item name="RawButtonRelease"> <bit>16</bit> </item>
1605         <item name="RawMotion">        <bit>17</bit> </item>
1606         <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅ -->
1607         <item name="TouchBegin">       <bit>18</bit> </item>
1608         <item name="TouchUpdate">      <bit>19</bit> </item>
1609         <item name="TouchEnd">         <bit>20</bit> </item>
1610         <item name="TouchOwnership">   <bit>21</bit> </item>
1611         <item name="RawTouchBegin">    <bit>22</bit> </item>
1612         <item name="RawTouchUpdate">   <bit>23</bit> </item>
1613         <item name="RawTouchEnd">      <bit>24</bit> </item>
1614         <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅ -->
1615         <item name="BarrierHit">       <bit>25</bit> </item>
1616         <item name="BarrierLeave">     <bit>26</bit> </item>
1617     </enum>
1618
1619     <struct name="EventMask">
1620         <field type="DeviceId" name="deviceid" altenum="Device" />
1621         <field type="CARD16"   name="mask_len" />
1622         <list type="CARD32" name="mask" mask="XIEventMask">
1623             <fieldref>mask_len</fieldref>
1624         </list>
1625     </struct>
1626
1627     <request name="XISelectEvents" opcode="46">
1628         <field type="WINDOW" name="window" />
1629         <field type="CARD16" name="num_mask" />
1630         <pad bytes="2" />
1631         <list type="EventMask" name="masks">
1632             <fieldref>num_mask</fieldref>
1633         </list>
1634     </request>
1635
1636     <!-- XIQueryVersion -->
1637
1638     <request name="XIQueryVersion" opcode="47">
1639         <field type="CARD16" name="major_version" />
1640         <field type="CARD16" name="minor_version" />
1641
1642         <reply>
1643             <pad bytes="1" />
1644             <field type="CARD16" name="major_version" />
1645             <field type="CARD16" name="minor_version" />
1646             <pad bytes="20" />
1647         </reply>
1648     </request>
1649
1650     <!-- XIQueryDevice -->
1651
1652     <enum name="DeviceClassType">
1653         <item name="Key">      <value>0</value> </item>
1654         <item name="Button">   <value>1</value> </item>
1655         <item name="Valuator"> <value>2</value> </item>
1656         <item name="Scroll">   <value>3</value> </item>
1657         <item name="Touch">    <value>8</value> </item>
1658     </enum>
1659
1660     <enum name="DeviceType">
1661         <item name="MasterPointer">  <value>1</value> </item>
1662         <item name="MasterKeyboard"> <value>2</value> </item>
1663         <item name="SlavePointer">   <value>3</value> </item>
1664         <item name="SlaveKeyboard">  <value>4</value> </item>
1665         <item name="FloatingSlave">  <value>5</value> </item>
1666     </enum>
1667
1668     <enum name="ScrollFlags">
1669         <item name="NoEmulation"> <bit>0</bit> </item>
1670         <item name="Preferred">   <bit>1</bit> </item>
1671     </enum>
1672
1673     <enum name="ScrollType">
1674         <item name="Vertical">   <value>1</value> </item>
1675         <item name="Horizontal"> <value>2</value> </item>
1676     </enum>
1677
1678     <enum name="TouchMode">
1679         <item name="Direct">    <value>1</value> </item>
1680         <item name="Dependent"> <value>2</value> </item>
1681     </enum>
1682
1683     <struct name="ButtonClass">
1684         <field type="CARD16"   name="type" enum="DeviceClassType" />
1685         <field type="CARD16"   name="len" />
1686         <field type="DeviceId" name="sourceid" />
1687         <field type="CARD16"   name="num_buttons" />
1688         <list type="CARD32"    name="state">
1689             <op op="/">
1690                 <op op="+">
1691                     <fieldref>num_buttons</fieldref>
1692                     <value>31</value>
1693                 </op>
1694                 <value>32</value>
1695             </op>
1696         </list>
1697         <list type="ATOM" name="labels">
1698             <fieldref>num_buttons</fieldref>
1699         </list>
1700     </struct>
1701
1702     <struct name="KeyClass">
1703         <field type="CARD16"   name="type" enum="DeviceClassType" />
1704         <field type="CARD16"   name="len" />
1705         <field type="DeviceId" name="sourceid" />
1706         <field type="CARD16"   name="num_keys" />
1707         <list type="CARD32" name="keys">
1708             <fieldref>num_keys</fieldref>
1709         </list>
1710     </struct>
1711
1712     <struct name="ScrollClass">
1713         <field type="CARD16"   name="type" enum="DeviceClassType" />
1714         <field type="CARD16"   name="len" />
1715         <field type="DeviceId" name="sourceid" />
1716         <field type="CARD16"   name="number" />
1717         <field type="CARD16"   name="scroll_type" enum="ScrollType" />
1718         <pad bytes="2" />
1719         <field type="CARD32"   name="flags" mask="ScrollFlags" />
1720         <field type="FP3232"   name="increment" />
1721     </struct>
1722
1723     <struct name="TouchClass">
1724         <field type="CARD16"   name="type" enum="DeviceClassType" />
1725         <field type="CARD16"   name="len" />
1726         <field type="DeviceId" name="sourceid" />
1727         <field type="CARD8"    name="mode" enum="TouchMode" />
1728         <field type="CARD8"    name="num_touches" />
1729     </struct>
1730
1731     <struct name="ValuatorClass">
1732         <field type="CARD16"   name="type" enum="DeviceClassType" />
1733         <field type="CARD16"   name="len" />
1734         <field type="DeviceId" name="sourceid" />
1735         <field type="CARD16"   name="number" />
1736         <field type="ATOM"     name="label" />
1737         <field type="FP3232"   name="min" />
1738         <field type="FP3232"   name="max" />
1739         <field type="FP3232"   name="value" />
1740         <field type="CARD32"   name="resolution" />
1741         <field type="CARD8"    name="mode" enum="ValuatorMode" />
1742         <pad bytes="3" />
1743     </struct>
1744
1745     <struct name="DeviceClass">
1746         <field type="CARD16"   name="type" enum="DeviceClassType" />
1747         <field type="CARD16"   name="len" />
1748         <field type="DeviceId" name="sourceid" />
1749         <switch name="data">
1750             <fieldref>type</fieldref>
1751             <case name="key">
1752                 <enumref ref="DeviceClassType">Key</enumref>
1753                 <field type="CARD16"   name="num_keys" />
1754                 <list type="CARD32" name="keys">
1755                     <fieldref>num_keys</fieldref>
1756                 </list>
1757             </case>
1758             <case name="button">
1759                 <enumref ref="DeviceClassType">Button</enumref>
1760                 <field type="CARD16"   name="num_buttons" />
1761                 <list type="CARD32"    name="state">
1762                     <op op="/">
1763                         <op op="+">
1764                             <fieldref>num_buttons</fieldref>
1765                             <value>31</value>
1766                         </op>
1767                         <value>32</value>
1768                     </op>
1769                 </list>
1770                 <list type="ATOM" name="labels">
1771                     <fieldref>num_buttons</fieldref>
1772                 </list>
1773             </case>
1774             <case name="valuator">
1775                 <enumref ref="DeviceClassType">Valuator</enumref>
1776                 <field type="CARD16"   name="number" />
1777                 <field type="ATOM"     name="label" />
1778                 <field type="FP3232"   name="min" />
1779                 <field type="FP3232"   name="max" />
1780                 <field type="FP3232"   name="value" />
1781                 <field type="CARD32"   name="resolution" />
1782                 <field type="CARD8"    name="mode" enum="ValuatorMode" />
1783                 <pad bytes="3" />
1784             </case>
1785             <case name="scroll">
1786                 <enumref ref="DeviceClassType">Scroll</enumref>
1787                 <field type="CARD16"   name="number" />
1788                 <field type="CARD16"   name="scroll_type" enum="ScrollType" />
1789                 <pad bytes="2" />
1790                 <field type="CARD32"   name="flags" mask="ScrollFlags" />
1791                 <field type="FP3232"   name="increment" />
1792             </case>
1793             <case name="touch">
1794                 <enumref ref="DeviceClassType">Touch</enumref>
1795                 <field type="CARD8"    name="mode" enum="TouchMode" />
1796                 <field type="CARD8"    name="num_touches" />
1797             </case>
1798         </switch>
1799     </struct>
1800
1801     <struct name="XIDeviceInfo">
1802         <field type="DeviceId" name="deviceid" altenum="Device" />
1803         <field type="CARD16"   name="type" enum="DeviceType" />
1804         <field type="DeviceId" name="attachment" altenum="Device" />
1805         <field type="CARD16"   name="num_classes" />
1806         <field type="CARD16"   name="name_len" />
1807         <field type="BOOL"     name="enabled" />
1808         <pad bytes="1" />
1809         <list type="char" name="name">
1810             <fieldref>name_len</fieldref>
1811         </list>
1812         <pad align="4" />
1813         <list type="DeviceClass" name="classes">
1814             <fieldref>num_classes</fieldref>
1815         </list>
1816     </struct>
1817
1818     <request name="XIQueryDevice" opcode="48">
1819         <field type="DeviceId" name="deviceid" altenum="Device" />
1820         <pad bytes="2" />
1821         <reply>
1822             <pad bytes="1" />
1823             <field type="CARD16" name="num_infos" />
1824             <pad bytes="22" />
1825             <list type="XIDeviceInfo" name="infos">
1826                 <fieldref>num_infos</fieldref>
1827             </list>
1828         </reply>
1829     </request>
1830
1831     <!-- XISetFocus -->
1832
1833     <request name="XISetFocus" opcode="49">
1834         <field type="WINDOW"    name="window" />
1835         <field type="TIMESTAMP" name="time" altenum="Time" />
1836         <field type="DeviceId"  name="deviceid" altenum="Device" />
1837         <pad bytes="2" />
1838     </request>
1839
1840     <!-- XIGetFocus -->
1841
1842     <request name="XIGetFocus" opcode="50">
1843         <field type="DeviceId" name="deviceid" altenum="Device" />
1844         <pad bytes="2" />
1845         <reply>
1846             <pad bytes="1" />
1847             <field type="WINDOW" name="focus" />
1848             <pad bytes="20" />
1849         </reply>
1850     </request>
1851
1852     <!-- XIGrabDevice -->
1853
1854     <enum name="GrabOwner">
1855         <item name="NoOwner"> <value>0</value> </item>
1856         <item name="Owner">   <value>1</value> </item>
1857     </enum>
1858
1859     <request name="XIGrabDevice" opcode="51">
1860         <field type="WINDOW"    name="window" />
1861         <field type="TIMESTAMP" name="time" altenum="Time" />
1862         <field type="CURSOR"    name="cursor" />
1863         <field type="DeviceId"  name="deviceid" altenum="Device" />
1864         <field type="CARD8"     name="mode" enum="GrabMode" />
1865         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1866         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1867         <pad bytes="1" />
1868         <field type="CARD16"    name="mask_len" />
1869         <list type="CARD32" name="mask">
1870             <fieldref>mask_len</fieldref>
1871         </list>
1872         <reply>
1873             <pad bytes="1" />
1874             <field type="CARD8" name="status" enum="GrabStatus" />
1875             <pad bytes="23" />
1876         </reply>
1877     </request>
1878
1879     <!-- XIUngrabDevice -->
1880
1881     <request name="XIUngrabDevice" opcode="52">
1882         <field type="TIMESTAMP" name="time" altenum="Time" />
1883         <field type="DeviceId" name="deviceid" altenum="Device" />
1884         <pad bytes="2" />
1885     </request>
1886
1887     <!-- XIAllowEvents -->
1888
1889     <enum name="EventMode">
1890         <item name="AsyncDevice">       <value>0</value> </item>
1891         <item name="SyncDevice">        <value>1</value> </item>
1892         <item name="ReplayDevice">      <value>2</value> </item>
1893         <item name="AsyncPairedDevice"> <value>3</value> </item>
1894         <item name="AsyncPair">         <value>4</value> </item>
1895         <item name="SyncPair">          <value>5</value> </item>
1896         <item name="AcceptTouch">       <value>6</value> </item>
1897         <item name="RejectTouch">       <value>7</value> </item>
1898     </enum>
1899
1900     <request name="XIAllowEvents" opcode="53">
1901         <field type="TIMESTAMP" name="time" altenum="Time" />
1902         <field type="DeviceId"  name="deviceid" altenum="Device" />
1903         <field type="CARD8"     name="event_mode" enum="EventMode" />
1904         <pad bytes="1" />
1905         <field type="CARD32"    name="touchid" />
1906         <field type="WINDOW"    name="grab_window" />
1907     </request>
1908
1909     <!-- XIPassiveGrabDevice -->
1910
1911     <enum name="GrabMode22">
1912         <item name="Sync">  <value>0</value> </item>
1913         <item name="Async"> <value>1</value> </item>
1914         <item name="Touch"> <value>2</value> </item>
1915     </enum>
1916
1917     <enum name="GrabType">
1918         <item name="Button">     <value>0</value> </item>
1919         <item name="Keycode">    <value>1</value> </item>
1920         <item name="Enter">      <value>2</value> </item>
1921         <item name="FocusIn">    <value>3</value> </item>
1922         <item name="TouchBegin"> <value>4</value> </item>
1923     </enum>
1924
1925     <enum name="ModifierMask">
1926         <item name="Any"> <bit>31</bit> </item>
1927     </enum>
1928
1929     <struct name="GrabModifierInfo">
1930         <field type="CARD32" name="modifiers" altenum="ModifierMask" />
1931         <field type="CARD8"  name="status" enum="GrabStatus" />
1932         <pad bytes="3" />
1933     </struct>
1934
1935     <request name="XIPassiveGrabDevice" opcode="54">
1936         <!-- field "time" is unused and its value is undefined -->
1937         <field type="TIMESTAMP" name="time" altenum="Time" />
1938         <field type="WINDOW"    name="grab_window" />
1939         <field type="CURSOR"    name="cursor" />
1940         <field type="CARD32"    name="detail" />
1941         <field type="DeviceId"  name="deviceid" altenum="Device" />
1942         <field type="CARD16"    name="num_modifiers" />
1943         <field type="CARD16"    name="mask_len" />
1944         <field type="CARD8"     name="grab_type" enum="GrabType" />
1945         <field type="CARD8"     name="grab_mode" enum="GrabMode22" />
1946         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1947         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1948         <pad bytes="2" />
1949         <list type="CARD32" name="mask">
1950             <fieldref>mask_len</fieldref>
1951         </list>
1952         <list type="CARD32" name="modifiers">
1953             <fieldref>num_modifiers</fieldref>
1954         </list>
1955         <reply>
1956             <pad bytes="1" />
1957             <field type="CARD16" name="num_modifiers" />
1958             <pad bytes="22" />
1959             <list type="GrabModifierInfo" name="modifiers">
1960                 <fieldref>num_modifiers</fieldref>
1961             </list>
1962         </reply>
1963     </request>
1964
1965     <!-- XIPassiveUngrabDevice -->
1966
1967     <request name="XIPassiveUngrabDevice" opcode="55">
1968         <field type="WINDOW"   name="grab_window" />
1969         <field type="CARD32"   name="detail" />
1970         <field type="DeviceId" name="deviceid" altenum="Device" />
1971         <field type="CARD16"   name="num_modifiers" />
1972         <field type="CARD8"    name="grab_type" enum="GrabType" />
1973         <pad bytes="3" />
1974         <list type="CARD32" name="modifiers">
1975             <fieldref>num_modifiers</fieldref>
1976         </list>
1977     </request>
1978
1979     <!-- XIListProperties -->
1980
1981     <request name="XIListProperties" opcode="56">
1982         <field type="DeviceId" name="deviceid" altenum="Device" />
1983         <pad bytes="2" />
1984         <reply>
1985             <pad bytes="1" />
1986             <field type="CARD16" name="num_properties" />
1987             <pad bytes="22" />
1988             <list type="ATOM" name="properties">
1989                 <fieldref>num_properties</fieldref>
1990             </list>
1991         </reply>
1992     </request>
1993
1994     <!-- XIChangeProperty -->
1995
1996     <request name="XIChangeProperty" opcode="57">
1997         <field type="DeviceId" name="deviceid" altenum="Device" />
1998         <field type="CARD8"    name="mode" enum="PropMode" />
1999         <field type="CARD8"    name="format" enum="PropertyFormat" />
2000         <field type="ATOM"     name="property" />
2001         <field type="ATOM"     name="type" />
2002         <field type="CARD32"   name="num_items" />
2003         <switch name="items">
2004             <fieldref>format</fieldref>
2005             <!-- <bitcase> is not correct, this would need <cases>s.
2006                  It works in that case, because PropertyFormat items can be
2007                  distinguished exactly as their values don't have equal bits.
2008             -->
2009             <bitcase>
2010                 <enumref ref="PropertyFormat">8Bits</enumref>
2011                 <list type="CARD8" name="data8">
2012                     <fieldref>num_items</fieldref>
2013                 </list>
2014             </bitcase>
2015             <bitcase>
2016                 <enumref ref="PropertyFormat">16Bits</enumref>
2017                 <list type="CARD16" name="data16">
2018                     <fieldref>num_items</fieldref>
2019                 </list>
2020             </bitcase>
2021             <bitcase>
2022                 <enumref ref="PropertyFormat">32Bits</enumref>
2023                 <list type="CARD32" name="data32">
2024                     <fieldref>num_items</fieldref>
2025                 </list>
2026             </bitcase>
2027         </switch>
2028     </request>
2029
2030     <!-- XIDeleteProperty -->
2031
2032     <request name="XIDeleteProperty" opcode="58">
2033         <field type="DeviceId" name="deviceid" altenum="Device" />
2034         <pad bytes="2" />
2035         <field type="ATOM"     name="property" />
2036     </request>
2037
2038     <!-- XIGetProperty -->
2039
2040     <request name="XIGetProperty" opcode="59">
2041         <field type="DeviceId" name="deviceid" altenum="Device" />
2042         <field type="BOOL"     name="delete" />
2043         <pad bytes="1" />
2044         <field type="ATOM"     name="property" />
2045         <field type="ATOM"     name="type" />
2046         <field type="CARD32"   name="offset" />
2047         <field type="CARD32"   name="len" />
2048         <reply>
2049             <pad bytes="1" />
2050             <field type="ATOM"   name="type" />
2051             <field type="CARD32" name="bytes_after" />
2052             <field type="CARD32" name="num_items" />
2053             <field type="CARD8"  name="format" enum="PropertyFormat" />
2054             <pad bytes="11" />
2055             <switch name="items">
2056                 <fieldref>format</fieldref>
2057                 <!-- <bitcase> is not correct, this would need <cases>s.
2058                      It works in that case, because PropertyFormat items can be
2059                      distinguished exactly as their values don't have equal bits.
2060                 -->
2061                 <bitcase>
2062                     <enumref ref="PropertyFormat">8Bits</enumref>
2063                     <list type="CARD8" name="data8">
2064                         <fieldref>num_items</fieldref>
2065                     </list>
2066                     <pad align="4" />
2067                 </bitcase>
2068                 <bitcase>
2069                     <enumref ref="PropertyFormat">16Bits</enumref>
2070                     <list type="CARD16" name="data16">
2071                         <fieldref>num_items</fieldref>
2072                     </list>
2073                     <pad align="4" />
2074                 </bitcase>
2075                 <bitcase>
2076                     <enumref ref="PropertyFormat">32Bits</enumref>
2077                     <list type="CARD32" name="data32">
2078                         <fieldref>num_items</fieldref>
2079                     </list>
2080                 </bitcase>
2081             </switch>
2082         </reply>
2083     </request>
2084
2085     <!-- XIGetSelectedEvents -->
2086
2087     <request name="XIGetSelectedEvents" opcode="60">
2088         <field type="WINDOW" name="window" />
2089         <reply>
2090             <pad bytes="1" />
2091             <field type="CARD16" name="num_masks" />
2092             <pad bytes="22" />
2093             <list type="EventMask" name="masks">
2094                 <fieldref>num_masks</fieldref>
2095             </list>
2096         </reply>
2097     </request>
2098
2099     <!-- ⋅⋅⋅ Requests (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2100
2101     <!-- XIBarrierReleasePointer -->
2102
2103     <struct name="BarrierReleasePointerInfo">
2104         <field type="DeviceId" name="deviceid" />
2105         <pad bytes="2" />
2106         <field type="BARRIER"  name="barrier" />
2107         <field type="CARD32"   name="eventid" />
2108     </struct>
2109
2110     <request name="XIBarrierReleasePointer" opcode="61">
2111         <field type="CARD32" name="num_barriers" />
2112         <list type="BarrierReleasePointerInfo" name="barriers">
2113             <fieldref>num_barriers</fieldref>
2114         </list>
2115     </request>
2116
2117     <!-- ⋅⋅⋅ Events (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2118     <!-- Notes:
2119          - A 'len' field in a v1++ structure is in bytes.
2120     -->
2121
2122     <event name="DeviceValuator" number="0">
2123         <field type="CARD8"  name="device_id" />
2124         <field type="CARD16" name="device_state" />
2125         <field type="CARD8"  name="num_valuators" />
2126         <field type="CARD8"  name="first_valuator" />
2127         <list type="INT32"   name="valuators">
2128             <value>6</value>
2129         </list>
2130     </event>
2131
2132     <!-- the highest bit in a CARD8 device_id-field indicates that more
2133         events will follow -->
2134     <enum name="MoreEventsMask">
2135         <item name="MoreEvents"> <bit>7</bit> </item> <!-- 0x80 -->
2136     </enum>
2137
2138     <event name="DeviceKeyPress" number="1">
2139         <field type="BYTE"      name="detail" />
2140         <field type="TIMESTAMP" name="time" />
2141         <field type="WINDOW"    name="root" />
2142         <field type="WINDOW"    name="event" />
2143         <field type="WINDOW"    name="child" altenum="Window" />
2144         <field type="INT16"     name="root_x" />
2145         <field type="INT16"     name="root_y" />
2146         <field type="INT16"     name="event_x" />
2147         <field type="INT16"     name="event_y" />
2148         <field type="CARD16"    name="state" mask="KeyButMask" />
2149         <field type="BOOL"      name="same_screen" />
2150         <field type="CARD8"     name="device_id" altmask="MoreEventsMask" />
2151     </event>
2152
2153     <eventcopy name="DeviceKeyRelease"    number="2" ref="DeviceKeyPress" />
2154     <eventcopy name="DeviceButtonPress"   number="3" ref="DeviceKeyPress" />
2155     <eventcopy name="DeviceButtonRelease" number="4" ref="DeviceKeyPress" />
2156     <eventcopy name="DeviceMotionNotify"  number="5" ref="DeviceKeyPress" />
2157
2158     <event name="DeviceFocusIn" number="6">
2159         <field type="BYTE"      name="detail" enum="xproto:NotifyDetail" />
2160         <field type="TIMESTAMP" name="time" />
2161         <field type="WINDOW"    name="window" />
2162         <field type="BYTE"      name="mode" enum="xproto:NotifyMode" />
2163         <field type="CARD8"     name="device_id" />
2164         <pad bytes="18" />
2165     </event>
2166
2167     <eventcopy name="DeviceFocusOut" number="7" ref="DeviceFocusIn" />
2168     <eventcopy name="ProximityIn"    number="8" ref="DeviceKeyPress" />
2169     <eventcopy name="ProximityOut"   number="9" ref="DeviceKeyPress" />
2170
2171     <enum name="ClassesReportedMask">
2172         <item name="OutOfProximity">     <bit>7</bit> </item> <!-- 0x80 -->
2173             <!-- 0 = InProxmity, 1 = OutOfProximity -->
2174
2175         <item name="DeviceModeAbsolute"> <bit>6</bit> </item> <!-- 0x40 -->
2176             <!-- 0 = Relative, 1 = Absolute -->
2177
2178         <item name="ReportingValuators"> <bit>2</bit> </item> <!-- 0x04 -->
2179         <item name="ReportingButtons">   <bit>1</bit> </item> <!-- 0x02 -->
2180         <item name="ReportingKeys">      <bit>0</bit> </item> <!-- 0x01 -->
2181     </enum>
2182
2183     <event name="DeviceStateNotify" number="10">
2184         <field type="BYTE"      name="device_id" altmask="MoreEventsMask" />
2185         <field type="TIMESTAMP" name="time" />
2186         <field type="CARD8"     name="num_keys" />
2187         <field type="CARD8"     name="num_buttons" />
2188         <field type="CARD8"     name="num_valuators" />
2189         <field type="CARD8"     name="classes_reported" mask="ClassesReportedMask" />
2190         <list type="CARD8"      name="buttons">
2191             <value>4</value>
2192         </list>
2193         <list type="CARD8" name="keys">
2194             <value>4</value>
2195         </list>
2196         <list type="CARD32" name="valuators">
2197             <value>3</value>
2198         </list>
2199     </event>
2200
2201     <event name="DeviceMappingNotify" number="11">
2202         <field type="BYTE"    name="device_id" />
2203         <field type="CARD8"   name="request" enum="Mapping" />
2204         <field type="KeyCode" name="first_keycode" />
2205         <field type="CARD8"   name="count" />
2206         <pad bytes="1" />
2207         <field type="TIMESTAMP" name="time" />
2208         <pad bytes="20" />
2209     </event>
2210
2211     <enum name="ChangeDevice">
2212         <item name="NewPointer">  <value>0</value> </item>
2213         <item name="NewKeyboard"> <value>1</value> </item>
2214     </enum>
2215
2216     <event name="ChangeDeviceNotify" number="12">
2217         <field type="BYTE"      name="device_id" />
2218         <field type="TIMESTAMP" name="time" />
2219         <field type="CARD8"     name="request" enum="ChangeDevice" />
2220         <pad bytes="23" />
2221     </event>
2222
2223     <event name="DeviceKeyStateNotify" number="13">
2224         <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
2225         <list type="CARD8" name="keys">
2226             <value>28</value>
2227         </list>
2228     </event>
2229
2230     <event name="DeviceButtonStateNotify" number="14">
2231         <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
2232         <list type="CARD8" name="buttons">
2233             <value>28</value>
2234         </list>
2235     </event>
2236
2237     <!-- ⋅⋅⋅ Events (v1.4) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2238
2239     <enum name="DeviceChange">
2240         <item name="Added">          <value>0</value> </item>
2241         <item name="Removed">        <value>1</value> </item>
2242         <item name="Enabled">        <value>2</value> </item>
2243         <item name="Disabled">       <value>3</value> </item>
2244         <item name="Unrecoverable">  <value>4</value> </item>
2245         <item name="ControlChanged"> <value>5</value> </item>
2246     </enum>
2247
2248     <event name="DevicePresenceNotify" number="15">
2249         <pad bytes="1" />
2250         <field type="TIMESTAMP" name="time" />
2251         <field type="BYTE"      name="devchange" enum="DeviceChange" />
2252         <field type="BYTE"      name="device_id" />
2253         <field type="CARD16"    name="control" />
2254         <pad bytes="20" />
2255     </event>
2256
2257     <!-- ⋅⋅⋅ Events (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2258
2259     <event name="DevicePropertyNotify" number="16">
2260         <field type="BYTE"      name="state" enum="Property" />
2261         <field type="TIMESTAMP" name="time" />
2262         <field type="ATOM"      name="property" />
2263         <pad bytes="19" />
2264         <field type="CARD8"     name="device_id" />
2265     </event>
2266
2267     <!-- ⋅⋅⋅ Events (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2268     <!-- Notes:
2269          - A 'len' field in a v2++ structure is in 4 byte units.
2270     -->
2271
2272     <enum name="ChangeReason">
2273         <item name="SlaveSwitch">  <value>1</value> </item>
2274         <item name="DeviceChange"> <value>2</value> </item>
2275     </enum>
2276
2277     <event name="DeviceChanged" number="1" xge="true">
2278         <field type="DeviceId"  name="deviceid" altenum="Device" />
2279         <field type="TIMESTAMP" name="time" altenum="Time" />
2280         <!-- event specific fields -->
2281         <field type="CARD16"    name="num_classes" />
2282         <field type="DeviceId"  name="sourceid" altenum="Device" />
2283         <field type="CARD8"     name="reason" enum="ChangeReason" />
2284         <pad bytes="11" />
2285         <!-- 32 byte boundary -->
2286         <list type="DeviceClass" name="classes">
2287             <fieldref>num_classes</fieldref>
2288         </list>
2289     </event>
2290
2291     <enum name="KeyEventFlags">
2292         <item name="KeyRepeat"> <bit>16</bit> </item>
2293     </enum>
2294
2295     <event name="KeyPress" number="2" xge="true">
2296         <field type="DeviceId"  name="deviceid" altenum="Device" />
2297         <field type="TIMESTAMP" name="time" altenum="Time" />
2298         <!-- event specific fields -->
2299         <field type="CARD32"    name="detail" />
2300         <field type="WINDOW"    name="root" />
2301         <field type="WINDOW"    name="event" />
2302         <field type="WINDOW"    name="child" />
2303         <!-- 32 byte boundary -->
2304         <field type="FP1616"    name="root_x" />
2305         <field type="FP1616"    name="root_y" />
2306         <field type="FP1616"    name="event_x" />
2307         <field type="FP1616"    name="event_y" />
2308         <field type="CARD16"    name="buttons_len" />
2309         <field type="CARD16"    name="valuators_len" />
2310         <field type="DeviceId"  name="sourceid" altenum="Device" />
2311         <pad bytes="2" />
2312         <field type="CARD32"       name="flags" mask="KeyEventFlags" />
2313         <field type="ModifierInfo" name="mods" />
2314         <field type="GroupInfo"    name="group" />
2315         <list type="CARD32" name="button_mask">
2316             <fieldref>buttons_len</fieldref>
2317         </list>
2318         <list type="CARD32" name="valuator_mask">
2319             <fieldref>valuators_len</fieldref>
2320         </list>
2321         <!-- Uninterpreted: list (axisvalues) of FP3232,
2322                             length is <popcount> on valuator_mask list -->
2323     </event>
2324
2325     <eventcopy name="KeyRelease" number="3" ref="KeyPress" />
2326
2327     <enum name="PointerEventFlags">
2328         <item name="PointerEmulated"> <bit>16</bit> </item>
2329     </enum>
2330
2331     <event name="ButtonPress" number="4" xge="true">
2332         <field type="DeviceId"  name="deviceid" altenum="Device" />
2333         <field type="TIMESTAMP" name="time" altenum="Time" />
2334         <!-- event specific fields -->
2335         <field type="CARD32"    name="detail" />
2336         <field type="WINDOW"    name="root" />
2337         <field type="WINDOW"    name="event" />
2338         <field type="WINDOW"    name="child" />
2339         <!-- 32 byte boundary -->
2340         <field type="FP1616"    name="root_x" />
2341         <field type="FP1616"    name="root_y" />
2342         <field type="FP1616"    name="event_x" />
2343         <field type="FP1616"    name="event_y" />
2344         <field type="CARD16"    name="buttons_len" />
2345         <field type="CARD16"    name="valuators_len" />
2346         <field type="DeviceId"  name="sourceid" altenum="Device" />
2347         <pad bytes="2" />
2348         <field type="CARD32"       name="flags" mask="PointerEventFlags" />
2349         <field type="ModifierInfo" name="mods" />
2350         <field type="GroupInfo"    name="group" />
2351         <list type="CARD32" name="button_mask">
2352             <fieldref>buttons_len</fieldref>
2353         </list>
2354         <list type="CARD32" name="valuator_mask">
2355             <fieldref>valuators_len</fieldref>
2356         </list>
2357         <!-- Uninterpreted: list (axisvalues) of FP3232,
2358                             length is <popcount> on valuator_mask list -->
2359     </event>
2360
2361     <eventcopy name="ButtonRelease" number="5" ref="ButtonPress" />
2362     <eventcopy name="Motion"        number="6" ref="ButtonPress" />
2363
2364     <enum name="NotifyMode">
2365         <item name="Normal">        <value>0</value> </item>
2366         <item name="Grab">          <value>1</value> </item>
2367         <item name="Ungrab">        <value>2</value> </item>
2368         <item name="WhileGrabbed">  <value>3</value> </item>
2369         <item name="PassiveGrab">   <value>4</value> </item>
2370         <item name="PassiveUngrab"> <value>5</value> </item>
2371     </enum>
2372
2373     <enum name="NotifyDetail">
2374         <item name="Ancestor">         <value>0</value> </item>
2375         <item name="Virtual">          <value>1</value> </item>
2376         <item name="Inferior">         <value>2</value> </item>
2377         <item name="Nonlinear">        <value>3</value> </item>
2378         <item name="NonlinearVirtual"> <value>4</value> </item>
2379         <item name="Pointer">          <value>5</value> </item>
2380         <item name="PointerRoot">      <value>6</value> </item>
2381         <item name="None">             <value>7</value> </item>
2382     </enum>
2383
2384     <event name="Enter" number="7" xge="true">
2385         <field type="DeviceId"  name="deviceid" altenum="Device" />
2386         <field type="TIMESTAMP" name="time" altenum="Time" />
2387         <!-- event specific fields -->
2388         <field type="DeviceId"  name="sourceid" altenum="Device" />
2389         <field type="CARD8"     name="mode" enum="xinput:NotifyMode" />
2390         <field type="CARD8"     name="detail" enum="xinput:NotifyDetail" />
2391         <field type="WINDOW"    name="root" />
2392         <field type="WINDOW"    name="event" />
2393         <field type="WINDOW"    name="child" />
2394         <!-- 32 byte boundary -->
2395         <field type="FP1616"       name="root_x" />
2396         <field type="FP1616"       name="root_y" />
2397         <field type="FP1616"       name="event_x" />
2398         <field type="FP1616"       name="event_y" />
2399         <field type="BOOL"         name="same_screen" />
2400         <field type="BOOL"         name="focus" />
2401         <field type="CARD16"       name="buttons_len" />
2402         <field type="ModifierInfo" name="mods" />
2403         <field type="GroupInfo"    name="group" />
2404         <list type="CARD32" name="buttons">
2405             <fieldref>buttons_len</fieldref>
2406         </list>
2407     </event>
2408
2409     <eventcopy name="Leave"    number="8" ref="Enter" />
2410     <eventcopy name="FocusIn"  number="9" ref="Enter" />
2411     <eventcopy name="FocusOut" number="10" ref="Enter" />
2412
2413     <enum name="HierarchyMask">
2414         <item name="MasterAdded">    <bit>0</bit> </item>
2415         <item name="MasterRemoved">  <bit>1</bit> </item>
2416         <item name="SlaveAdded">     <bit>2</bit> </item>
2417         <item name="SlaveRemoved">   <bit>3</bit> </item>
2418         <item name="SlaveAttached">  <bit>4</bit> </item>
2419         <item name="SlaveDetached">  <bit>5</bit> </item>
2420         <item name="DeviceEnabled">  <bit>6</bit> </item>
2421         <item name="DeviceDisabled"> <bit>7</bit> </item>
2422     </enum>
2423
2424     <struct name="HierarchyInfo">
2425         <field type="DeviceId" name="deviceid" altenum="Device" />
2426         <field type="DeviceId" name="attachment" altenum="Device" />
2427         <field type="CARD8"    name="type" enum="DeviceType"/>
2428         <field type="BOOL"     name="enabled" />
2429         <pad bytes="2" />
2430         <field type="CARD32"   name="flags" mask="HierarchyMask" />
2431     </struct>
2432
2433     <event name="Hierarchy" number="11" xge="true">
2434         <field type="DeviceId"  name="deviceid" altenum="Device" />
2435         <field type="TIMESTAMP" name="time" altenum="Time" />
2436         <!-- event specific fields -->
2437         <field type="CARD32"    name="flags" mask="HierarchyMask" />
2438         <field type="CARD16"    name="num_infos" />
2439         <pad bytes="10" />
2440         <!-- 32 byte boundary -->
2441         <list type="HierarchyInfo" name="infos">
2442             <fieldref>num_infos</fieldref>
2443         </list>
2444     </event>
2445
2446     <enum name="PropertyFlag">
2447         <item name="Deleted">  <value>0</value> </item>
2448         <item name="Created">  <value>1</value> </item>
2449         <item name="Modified"> <value>2</value> </item>
2450     </enum>
2451
2452     <event name="Property" number="12" 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="ATOM"      name="property" />
2457         <field type="CARD8"     name="what" enum="PropertyFlag" />
2458         <pad bytes="11" />
2459         <!-- 32 byte boundary -->
2460     </event>
2461
2462     <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2463
2464     <event name="RawKeyPress" number="13" xge="true">
2465         <field type="DeviceId"  name="deviceid" altenum="Device" />
2466         <field type="TIMESTAMP" name="time" altenum="Time" />
2467         <!-- event specific fields -->
2468         <field type="CARD32"    name="detail" />
2469         <field type="DeviceId"  name="sourceid" />
2470         <field type="CARD16"    name="valuators_len" />
2471         <field type="CARD32"    name="flags" mask="KeyEventFlags"/>
2472         <pad bytes="4" />
2473         <!-- 32 byte boundary -->
2474         <list type="CARD32" name="valuator_mask">
2475             <fieldref>valuators_len</fieldref>
2476         </list>
2477         <!-- Uninterpreted: list (axisvalues) of FP3232,
2478                             length is <popcount> on valuator_mask list -->
2479         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2480                             length is <popcount> on valuator_mask list -->
2481     </event>
2482
2483     <eventcopy name="RawKeyRelease" number="14" ref="RawKeyPress" />
2484
2485     <event name="RawButtonPress" number="15" xge="true">
2486         <field type="DeviceId"  name="deviceid" altenum="Device" />
2487         <field type="TIMESTAMP" name="time" altenum="Time" />
2488         <!-- event specific fields -->
2489         <field type="CARD32"    name="detail" />
2490         <field type="DeviceId"  name="sourceid" />
2491         <field type="CARD16"    name="valuators_len" />
2492         <field type="CARD32"    name="flags" mask="PointerEventFlags"/>
2493         <pad bytes="4" />
2494         <!-- 32 byte boundary -->
2495         <list type="CARD32" name="valuator_mask">
2496             <fieldref>valuators_len</fieldref>
2497         </list>
2498         <!-- Uninterpreted: list (axisvalues) of FP3232,
2499                             length is <popcount> on valuator_mask list -->
2500         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2501                             length is <popcount> on valuator_mask list -->
2502     </event>
2503
2504     <eventcopy name="RawButtonRelease" number="16" ref="RawButtonPress" />
2505     <eventcopy name="RawMotion"        number="17" ref="RawButtonPress" />
2506
2507     <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2508
2509     <enum name="TouchEventFlags">
2510         <item name="TouchPendingEnd">       <bit>16</bit> </item>
2511         <item name="TouchEmulatingPointer"> <bit>17</bit> </item>
2512     </enum>
2513
2514     <event name="TouchBegin" number="18" xge="true">
2515         <field type="DeviceId"  name="deviceid" altenum="Device" />
2516         <field type="TIMESTAMP" name="time" altenum="Time" />
2517         <!-- event specific fields -->
2518         <field type="CARD32"    name="detail" />
2519         <field type="WINDOW"    name="root" />
2520         <field type="WINDOW"    name="event" />
2521         <field type="WINDOW"    name="child" />
2522         <!-- 32 byte boundary -->
2523         <field type="FP1616"    name="root_x" />
2524         <field type="FP1616"    name="root_y" />
2525         <field type="FP1616"    name="event_x" />
2526         <field type="FP1616"    name="event_y" />
2527         <field type="CARD16"    name="buttons_len" />
2528         <field type="CARD16"    name="valuators_len" />
2529         <field type="DeviceId"  name="sourceid" altenum="Device" />
2530         <pad bytes="2" />
2531         <field type="CARD32"       name="flags" mask="TouchEventFlags" />
2532         <field type="ModifierInfo" name="mods" />
2533         <field type="GroupInfo"    name="group" />
2534         <list type="CARD32" name="button_mask">
2535             <fieldref>buttons_len</fieldref>
2536         </list>
2537         <list type="CARD32" name="valuator_mask">
2538             <fieldref>valuators_len</fieldref>
2539         </list>
2540         <!-- Uninterpreted: list (axisvalues) of FP3232,
2541                             length is <popcount> on valuator_mask list -->
2542     </event>
2543
2544     <eventcopy name="TouchUpdate" number="19" ref="TouchBegin" />
2545     <eventcopy name="TouchEnd"    number="20" ref="TouchBegin" />
2546
2547     <enum name="TouchOwnershipFlags">
2548         <!-- XXX: Remove this enum? Currently, no flag is defined. -->
2549         <item name="None"> <value>0</value> </item>
2550     </enum>
2551
2552     <event name="TouchOwnership" number="21" xge="true">
2553         <field type="DeviceId"  name="deviceid" altenum="Device" />
2554         <field type="TIMESTAMP" name="time" altenum="Time" />
2555         <!-- event specific fields -->
2556         <field type="CARD32"    name="touchid" />
2557         <field type="WINDOW"    name="root" />
2558         <field type="WINDOW"    name="event" />
2559         <field type="WINDOW"    name="child" />
2560         <!-- 32 byte boundary -->
2561         <field type="DeviceId"  name="sourceid" altenum="Device" />
2562         <pad bytes="2" />
2563         <field type="CARD32"    name="flags" enum="TouchOwnershipFlags" />
2564         <pad bytes="8" />
2565     </event>
2566
2567     <event name="RawTouchBegin" number="22" xge="true">
2568         <field type="DeviceId"  name="deviceid" altenum="Device" />
2569         <field type="TIMESTAMP" name="time" altenum="Time" />
2570         <!-- event specific fields -->
2571         <field type="CARD32"    name="detail" />
2572         <field type="DeviceId"  name="sourceid" />
2573         <field type="CARD16"    name="valuators_len" />
2574         <field type="CARD32"    name="flags" mask="TouchEventFlags"/>
2575         <pad bytes="4" />
2576         <!-- 32 byte boundary -->
2577         <list type="CARD32" name="valuator_mask">
2578             <fieldref>valuators_len</fieldref>
2579         </list>
2580         <!-- Uninterpreted: list (axisvalues) of FP3232,
2581                             length is <popcount> on valuator_mask list -->
2582         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2583                             length is <popcount> on valuator_mask list -->
2584     </event>
2585
2586     <eventcopy name="RawTouchUpdate" number="23" ref="RawTouchBegin" />
2587     <eventcopy name="RawTouchEnd"    number="24" ref="RawTouchBegin" />
2588
2589     <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2590
2591     <enum name="BarrierFlags">
2592         <item name="PointerReleased"> <bit>0</bit> </item>
2593         <item name="DeviceIsGrabbed"> <bit>1</bit> </item>
2594     </enum>
2595
2596     <event name="BarrierHit" number="25" xge="true">
2597         <field type="DeviceId"  name="deviceid" altenum="Device" />
2598         <field type="TIMESTAMP" name="time" altenum="Time" />
2599         <!-- event specific fields -->
2600         <field type="CARD32"    name="eventid" />
2601         <field type="WINDOW"    name="root" />
2602         <field type="WINDOW"    name="event" />
2603         <field type="BARRIER"   name="barrier" />
2604         <!-- 32 byte boundary -->
2605         <field type="CARD32"    name="dtime" />
2606         <field type="CARD32"    name="flags" mask="BarrierFlags" />
2607         <field type="DeviceId"  name="sourceid" altenum="Device" />
2608         <pad bytes="2" />
2609         <field type="FP1616"    name="root_x" />
2610         <field type="FP1616"    name="root_y" />
2611         <field type="FP3232"    name="dx" />
2612         <field type="FP3232"    name="dy" />
2613     </event>
2614
2615     <eventcopy name="BarrierLeave" number="26" ref="BarrierHit" />
2616
2617     <!-- ⋅⋅⋅ Errors (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2618
2619     <error name="Device"     number="0" />
2620     <error name="Event"      number="1" />
2621     <error name="Mode"       number="2" />
2622     <error name="DeviceBusy" number="3" />
2623     <error name="Class"      number="4" />
2624
2625 </xcb>