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