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