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