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