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