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