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