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