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