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