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