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