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