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