xinput: SetDeviceFocus-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         <reply>
632             <pad bytes="1" />
633             <field type="CARD8" name="keysyms_per_keycode" />
634             <pad bytes="23" />
635             <list type="KEYSYM" name="keysyms">
636                 <!-- 'length' is a field in the header -->
637                 <fieldref>length</fieldref>
638             </list>
639         </reply>
640     </request>
641
642     <!-- ChangeDeviceKeyMapping -->
643
644     <request name="ChangeDeviceKeyMapping" opcode="25">
645         <field type="CARD8"   name="device_id" />
646         <field type="KeyCode" name="first_keycode" />
647         <field type="CARD8"   name="keysyms_per_keycode" />
648         <field type="CARD8"   name="keycode_count" />
649         <list type="KEYSYM"   name="keysyms">
650             <op op="*">
651                 <fieldref>keycode_count</fieldref>
652                 <fieldref>keysyms_per_keycode</fieldref>
653             </op>
654         </list>
655     </request>
656
657     <!-- GetDeviceModifierMapping -->
658
659     <request name="GetDeviceModifierMapping" opcode="26">
660         <field type="CARD8" name="device_id" />
661         <pad bytes="3" />
662         <reply>
663             <pad bytes="1" />
664             <field type="CARD8" name="keycodes_per_modifier" />
665             <pad bytes="23" />
666             <list type="CARD8"  name="keymaps">
667                 <op op="*">
668                     <fieldref>keycodes_per_modifier</fieldref>
669                     <value>8</value>
670                 </op>
671             </list>
672         </reply>
673     </request>
674
675     <!-- SetDeviceModifierMapping -->
676
677     <request name="SetDeviceModifierMapping" opcode="27">
678         <field type="CARD8" name="device_id" />
679         <field type="CARD8" name="keycodes_per_modifier" />
680         <pad bytes="2" />
681         <list type="CARD8" name="keymaps">
682             <op op="*">
683                 <fieldref>keycodes_per_modifier</fieldref>
684                 <value>8</value>
685             </op>
686         </list>
687         <reply>
688             <pad bytes="1" />
689             <field type="CARD8" name="status" enum="MappingStatus" />
690             <pad bytes="23" />
691         </reply>
692     </request>
693
694     <!-- GetDeviceButtonMapping -->
695
696     <request name="GetDeviceButtonMapping" opcode="28">
697         <field type="CARD8" name="device_id" />
698         <pad bytes="3" />
699         <reply>
700             <pad bytes="1" />
701             <field type="CARD8" name="map_size" />
702             <pad bytes="23" />
703             <list type="CARD8" name="map">
704                 <fieldref>map_size</fieldref>
705             </list>
706         </reply>
707     </request>
708
709     <!-- SetDeviceButtonMapping -->
710
711     <request name="SetDeviceButtonMapping" opcode="29">
712         <field type="CARD8" name="device_id" />
713         <field type="CARD8" name="map_size" />
714         <pad bytes="2" />
715         <list type="CARD8" name="map">
716             <fieldref>map_size</fieldref>
717         </list>
718         <reply>
719             <pad bytes="1" />
720             <field type="CARD8" name="status" enum="MappingStatus" />
721             <pad bytes="23" />
722         </reply>
723     </request>
724
725     <!-- QueryDeviceState -->
726
727     <struct name="KeyState">
728         <field type="CARD8" name="class_id" enum="InputClass" />
729         <field type="CARD8" name="len" />
730         <field type="CARD8" name="num_keys" />
731         <pad bytes="1" />
732         <list type="CARD8" name="keys">
733             <value>32</value>
734         </list>
735     </struct>
736
737     <struct name="ButtonState">
738         <field type="CARD8" name="class_id" enum="InputClass" />
739         <field type="CARD8" name="len" />
740         <field type="CARD8" name="num_buttons" />
741         <pad bytes="1" />
742         <list type="CARD8" name="buttons">
743             <value>32</value>
744         </list>
745     </struct>
746
747     <struct name="ValuatorState">
748         <field type="CARD8" name="class_id" enum="InputClass" />
749         <field type="CARD8" name="len" />
750         <field type="CARD8" name="num_valuators" />
751         <field type="CARD8" name="mode" />
752         <list type="CARD32" name="valuators">
753             <fieldref>num_valuators</fieldref>
754         </list>
755     </struct>
756
757     <struct name="InputState">
758         <field type="CARD8" name="class_id" enum="InputClass" />
759         <field type="CARD8" name="len" />
760         <field type="CARD8" name="num_items" />
761         <pad bytes="1" />
762         <list type="CARD8" name="uninterpreted_data">
763             <op op="-">
764                 <fieldref>len</fieldref>
765                 <value>4</value>
766             </op>
767         </list>
768     </struct>
769
770     <request name="QueryDeviceState" opcode="30">
771         <field type="CARD8" name="device_id" />
772         <pad bytes="3" />
773         <reply>
774             <pad bytes="1" />
775             <field type="CARD8" name="num_classes" />
776             <pad bytes="23" />
777             <list type="InputState" name="classes">
778                 <fieldref>num_classes</fieldref>
779             </list>
780         </reply>
781     </request>
782
783     <!-- SendExtensionEvent -->
784
785     <request name="SendExtensionEvent" opcode="31">
786         <field type="WINDOW" name="destination" />
787         <field type="CARD8"  name="device_id" />
788         <field type="BOOL"   name="propagate" />
789         <field type="CARD16" name="num_classes" />
790         <field type="CARD8"  name="num_events" />
791         <pad bytes="3" />
792         <list type="CARD8" name="events">
793             <op op="*">
794                 <fieldref>num_events</fieldref>
795                 <value>32</value>
796             </op>
797         </list>
798         <list type="EventClass" name="classes">
799             <fieldref>num_classes</fieldref>
800         </list>
801     </request>
802
803     <!-- DeviceBell -->
804
805     <request name="DeviceBell" opcode="32">
806         <field type="CARD8" name="device_id" />
807         <field type="CARD8" name="feedback_id" />
808         <field type="CARD8" name="feedback_class" />
809         <field type="INT8"  name="percent" />
810     </request>
811
812     <!-- SetDeviceValuators -->
813
814     <request name="SetDeviceValuators" opcode="33">
815         <field type="CARD8" name="device_id" />
816         <field type="CARD8" name="first_valuator" />
817         <field type="CARD8" name="num_valuators" />
818         <pad bytes="1" />
819         <list type="INT32" name="valuators">
820             <fieldref>num_valuators</fieldref>
821         </list>
822         <reply>
823             <pad bytes="1" />
824             <field type="CARD8" name="status" enum="GrabStatus" />
825             <pad bytes="23" />
826         </reply>
827     </request>
828
829     <!-- GetDeviceControl -->
830
831     <enum name="DeviceControl">
832         <item name="resolution"> <value>1</value> </item>
833         <item name="abs_calib">  <value>2</value> </item>
834         <item name="core">       <value>3</value> </item>
835         <item name="enable">     <value>4</value> </item>
836         <item name="abs_area">   <value>5</value> </item>
837     </enum>
838
839     <struct name="DeviceResolutionState">
840         <field type="CARD16" name="control_id" enum="DeviceControl" />
841         <field type="CARD16" name="len" />
842         <field type="CARD32" name="num_valuators" />
843         <list type="CARD32"  name="resolution_values">
844             <fieldref>num_valuators</fieldref>
845         </list>
846         <list type="CARD32" name="resolution_min">
847             <fieldref>num_valuators</fieldref>
848         </list>
849         <list type="CARD32" name="resolution_max">
850             <fieldref>num_valuators</fieldref>
851         </list>
852     </struct>
853
854     <struct name="DeviceAbsCalibState">
855         <field type="CARD16" name="control_id" enum="DeviceControl" />
856         <field type="CARD16" name="len" />
857         <field type="INT32"  name="min_x" />
858         <field type="INT32"  name="max_x" />
859         <field type="INT32"  name="min_y" />
860         <field type="INT32"  name="max_y" />
861         <field type="CARD32" name="flip_x" />
862         <field type="CARD32" name="flip_y" />
863         <field type="CARD32" name="rotation" />
864         <field type="CARD32" name="button_threshold" />
865     </struct>
866
867     <struct name="DeviceAbsAreaState">
868         <field type="CARD16" name="control_id" enum="DeviceControl" />
869         <field type="CARD16" name="len" />
870         <field type="CARD32" name="offset_x" />
871         <field type="CARD32" name="offset_y" />
872         <field type="CARD32" name="width" />
873         <field type="CARD32" name="height" />
874         <field type="CARD32" name="screen" />
875         <field type="CARD32" name="following" />
876     </struct>
877
878     <struct name="DeviceCoreState">
879         <field type="CARD16" name="control_id" enum="DeviceControl" />
880         <field type="CARD16" name="len" />
881         <field type="CARD8"  name="status" />
882         <field type="CARD8"  name="iscore" />
883         <pad bytes="2" />
884     </struct>
885
886     <struct name="DeviceEnableState">
887         <field type="CARD16" name="control_id" enum="DeviceControl" />
888         <field type="CARD16" name="len" />
889         <field type="CARD8"  name="enable" />
890         <pad bytes="3" />
891     </struct>
892
893     <struct name="DeviceState">
894         <field type="CARD16" name="control_id" enum="DeviceControl" />
895         <field type="CARD16" name="len" />
896         <list type="CARD8" name="uninterpreted_data">
897             <op op="-">
898                 <fieldref>len</fieldref>
899                 <value>4</value>
900             </op>
901         </list>
902     </struct>
903
904     <request name="GetDeviceControl" opcode="34">
905         <field type="CARD16" name="control_id" enum="DeviceControl" />
906         <field type="CARD8"  name="device_id" />
907         <pad bytes="1" />
908         <reply>
909             <pad bytes="1" />
910             <field type="CARD8" name="status" altenum="GrabStatus" />
911             <pad bytes="23" />
912             <field type="DeviceState" name="control" />
913         </reply>
914     </request>
915
916     <!-- ChangeDeviceControl -->
917
918     <struct name="DeviceResolutionCtl">
919         <field type="CARD16" name="control_id" enum="DeviceControl" />
920         <field type="CARD16" name="len" />
921         <field type="CARD8"  name="first_valuator" />
922         <field type="CARD8"  name="num_valuators" />
923         <pad bytes="2" />
924         <list type="CARD32"  name="resolution_values">
925             <fieldref>num_valuators</fieldref>
926         </list>
927     </struct>
928
929     <struct name="DeviceAbsCalibCtl">
930         <field type="CARD16" name="control_id" enum="DeviceControl" />
931         <field type="CARD16" name="len" />
932         <field type="INT32"  name="min_x" />
933         <field type="INT32"  name="max_x" />
934         <field type="INT32"  name="min_y" />
935         <field type="INT32"  name="max_y" />
936         <field type="CARD32" name="flip_x" />
937         <field type="CARD32" name="flip_y" />
938         <field type="CARD32" name="rotation" />
939         <field type="CARD32" name="button_threshold" />
940     </struct>
941
942     <struct name="DeviceAbsAreaCtrl">
943         <field type="CARD16" name="control_id" enum="DeviceControl" />
944         <field type="CARD16" name="len" />
945         <field type="CARD32" name="offset_x" />
946         <field type="CARD32" name="offset_y" />
947         <field type="INT32"  name="width" />
948         <field type="INT32"  name="height" />
949         <field type="INT32"  name="screen" />
950         <field type="CARD32" name="following" />
951     </struct>
952
953     <struct name="DeviceCoreCtrl">
954         <field type="CARD16" name="control_id" enum="DeviceControl" />
955         <field type="CARD16" name="len" />
956         <field type="CARD8"  name="status" />
957         <pad bytes="3" />
958     </struct>
959
960     <struct name="DeviceEnableCtrl">
961         <field type="CARD16" name="control_id" enum="DeviceControl" />
962         <field type="CARD16" name="len" />
963         <field type="CARD8"  name="enable" />
964         <pad bytes="3" />
965     </struct>
966
967     <struct name="DeviceCtl">
968         <field type="CARD16" name="control_id" enum="DeviceControl" />
969         <field type="CARD16" name="len" />
970         <list type="CARD8" name="uninterpreted_data">
971             <op op="-">
972                 <fieldref>len</fieldref>
973                 <value>4</value>
974             </op>
975         </list>
976     </struct>
977
978     <request name="ChangeDeviceControl" opcode="35">
979         <field type="CARD16" name="control_id" enum="DeviceControl" />
980         <field type="CARD8"  name="device_id" />
981         <pad bytes="1" />
982         <field type="DeviceCtl" name="control" />
983         <reply>
984             <pad bytes="1" />
985             <field type="CARD8" name="status" altenum="GrabStatus" />
986             <pad bytes="23" />
987         </reply>
988     </request>
989
990     <!-- ⋅⋅⋅ Requests (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
991
992     <!-- ListDeviceProperties -->
993
994     <request name="ListDeviceProperties" opcode="36">
995         <field type="CARD8"  name="device_id" />
996         <pad bytes="3" />
997         <reply>
998             <pad bytes="1" />
999             <field type="CARD16" name="num_atoms" />
1000             <pad bytes="22" />
1001             <list type="ATOM" name="atoms">
1002                 <fieldref>num_atoms</fieldref>
1003             </list>
1004         </reply>
1005     </request>
1006
1007     <!-- ChangeDeviceProperty -->
1008
1009     <enum name="PropertyFormat">
1010         <item name="8Bits">  <value>8</value> </item>
1011         <item name="16Bits"> <value>16</value> </item>
1012         <item name="32Bits"> <value>32</value> </item>
1013     </enum>
1014
1015     <request name="ChangeDeviceProperty" opcode="37">
1016         <field type="ATOM"  name="property" />
1017         <field type="ATOM"  name="type" />
1018         <field type="CARD8" name="device_id" />
1019         <field type="CARD8" name="format" enum="PropertyFormat" />
1020         <field type="CARD8" name="mode" enum="PropMode" />
1021         <pad bytes="1" />
1022         <field type="CARD32" name="num_items" />
1023         <switch name="items">
1024             <fieldref>format</fieldref>
1025             <!-- <bitcase> is not correct, this would need <cases>s.
1026                  It works in that case, because PropertyFormat items can be
1027                  distinguished exactly as their values don't have equal bits.
1028             -->
1029             <bitcase>
1030                 <enumref ref="PropertyFormat">8Bits</enumref>
1031                 <list type="CARD8" name="data8">
1032                     <fieldref>num_items</fieldref>
1033                 </list>
1034             </bitcase>
1035             <bitcase>
1036                 <enumref ref="PropertyFormat">16Bits</enumref>
1037                 <list type="CARD16" name="data16">
1038                     <fieldref>num_items</fieldref>
1039                 </list>
1040             </bitcase>
1041             <bitcase>
1042                 <enumref ref="PropertyFormat">32Bits</enumref>
1043                 <list type="CARD32" name="data32">
1044                     <fieldref>num_items</fieldref>
1045                 </list>
1046             </bitcase>
1047         </switch>
1048     </request>
1049
1050     <!-- DeleteDeviceProperty -->
1051
1052     <request name="DeleteDeviceProperty" opcode="38">
1053         <field type="ATOM"  name="property" />
1054         <field type="CARD8" name="device_id" />
1055         <pad bytes="3" />
1056     </request>
1057
1058     <!-- GetDeviceProperty -->
1059
1060     <request name="GetDeviceProperty" opcode="39">
1061         <field type="ATOM"   name="property" />
1062         <field type="ATOM"   name="type" />
1063         <field type="CARD32" name="offset" />
1064         <field type="CARD32" name="len" />
1065         <field type="CARD8"  name="device_id" />
1066         <field type="BOOL"   name="delete" />
1067         <pad bytes="2" />
1068         <reply>
1069             <pad bytes="1" />
1070             <field type="ATOM"   name="type" />
1071             <field type="CARD32" name="bytes_after" />
1072             <field type="CARD32" name="num_items" />
1073             <field type="CARD8"  name="format" enum="PropertyFormat" />
1074             <field type="CARD8"  name="device_id" />
1075             <pad bytes="10" />
1076             <switch name="items">
1077                 <fieldref>format</fieldref>
1078                 <!-- <bitcase> is not correct, this would need <cases>s.
1079                      It works in that case, because PropertyFormat items can be
1080                      distinguished exactly as their values don't have equal bits.
1081                 -->
1082                 <bitcase>
1083                     <enumref ref="PropertyFormat">8Bits</enumref>
1084                     <list type="CARD8" name="data8">
1085                         <fieldref>num_items</fieldref>
1086                     </list>
1087                 </bitcase>
1088                 <bitcase>
1089                     <enumref ref="PropertyFormat">16Bits</enumref>
1090                     <list type="CARD16" name="data16">
1091                         <fieldref>num_items</fieldref>
1092                     </list>
1093                 </bitcase>
1094                 <bitcase>
1095                     <enumref ref="PropertyFormat">32Bits</enumref>
1096                     <list type="CARD32" name="data32">
1097                         <fieldref>num_items</fieldref>
1098                     </list>
1099                 </bitcase>
1100             </switch>
1101         </reply>
1102     </request>
1103
1104     <!-- ⋅⋅⋅ Requests (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1105
1106     <!-- XIQueryPointer -->
1107
1108     <enum name="Device">
1109         <item name="All">       <value>0</value> </item>
1110         <item name="AllMaster"> <value>1</value> </item>
1111     </enum>
1112
1113     <struct name="GroupInfo">
1114         <field type="CARD8" name="base" />
1115         <field type="CARD8" name="latched" />
1116         <field type="CARD8" name="locked" />
1117         <field type="CARD8" name="effective" />
1118     </struct>
1119
1120     <struct name="ModifierInfo">
1121         <field type="CARD32" name="base" />
1122         <field type="CARD32" name="latched" />
1123         <field type="CARD32" name="locked" />
1124         <field type="CARD32" name="effective" />
1125     </struct>
1126
1127     <request name="XIQueryPointer" opcode="40">
1128         <field type="WINDOW"   name="window" />
1129         <field type="DeviceId" name="deviceid" altenum="Device" />
1130         <pad bytes="2" />
1131         <reply>
1132             <pad bytes="1" />
1133             <field type="WINDOW"       name="root" />
1134             <field type="WINDOW"       name="child" />
1135             <field type="FP1616"       name="root_x" />
1136             <field type="FP1616"       name="root_y" />
1137             <field type="FP1616"       name="win_x" />
1138             <field type="FP1616"       name="win_y" />
1139             <field type="CARD8"        name="same_screen" />
1140             <pad bytes="1" />
1141             <field type="CARD16"       name="buttons_len" />
1142             <field type="ModifierInfo" name="mods" />
1143             <field type="GroupInfo"    name="group" />
1144             <list type="CARD32" name="buttons">
1145                 <fieldref>buttons_len</fieldref>
1146             </list>
1147         </reply>
1148     </request>
1149
1150     <!-- XIWarpPointer -->
1151
1152     <request name="XIWarpPointer" opcode="41">
1153         <field type="WINDOW"   name="src_win" />
1154         <field type="WINDOW"   name="dst_win" />
1155         <field type="FP1616"   name="src_x" />
1156         <field type="FP1616"   name="src_y" />
1157         <field type="CARD16"   name="src_width" />
1158         <field type="CARD16"   name="src_height" />
1159         <field type="FP1616"   name="dst_x" />
1160         <field type="FP1616"   name="dst_y" />
1161         <field type="DeviceId" name="deviceid" altenum="Device" />
1162         <pad bytes="2" />
1163     </request>
1164
1165     <!-- XIChangeCursor -->
1166
1167     <request name="XIChangeCursor" opcode="42">
1168         <field type="WINDOW"   name="window" />
1169         <field type="CURSOR"   name="cursor" />
1170         <field type="DeviceId" name="deviceid" altenum="Device" />
1171         <pad bytes="2" />
1172     </request>
1173
1174     <!-- XIChangeHierarchy -->
1175
1176     <enum name="HierarchyChangeType">
1177         <item name="AddMaster">    <value>1</value> </item>
1178         <item name="RemoveMaster"> <value>2</value> </item>
1179         <item name="AttachSlave">  <value>3</value> </item>
1180         <item name="DetachSlave">  <value>4</value> </item>
1181     </enum>
1182
1183     <enum name="ChangeMode">
1184         <item name="Attach"> <value>1</value> </item>
1185         <item name="Float">  <value>2</value> </item>
1186     </enum>
1187
1188     <struct name="AddMaster">
1189         <field type="CARD16" name="type" enum="HierarchyChangeType" />
1190         <field type="CARD16" name="len" />
1191         <field type="CARD16" name="name_len" />
1192         <field type="CARD8"  name="send_core" />
1193         <field type="CARD8"  name="enable" />
1194         <list type="char" name="name">
1195             <fieldref>name_len</fieldref>
1196         </list>
1197     </struct>
1198
1199     <struct name="RemoveMaster">
1200         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1201         <field type="CARD16"   name="len" />
1202         <field type="DeviceId" name="deviceid" altenum="Device" />
1203         <field type="CARD8"    name="return_mode" enum="ChangeMode" />
1204         <pad bytes="1" />
1205         <field type="DeviceId" name="return_pointer" altenum="Device" />
1206         <field type="DeviceId" name="return_keyboard" altenum="Device" />
1207     </struct>
1208
1209     <struct name="AttachSlave">
1210         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1211         <field type="CARD16"   name="len" />
1212         <field type="DeviceId" name="deviceid" altenum="Device" />
1213         <field type="DeviceId" name="master" altenum="Device" />
1214     </struct>
1215
1216     <struct name="DetachSlave">
1217         <field type="CARD16"   name="type" enum="HierarchyChangeType" />
1218         <field type="CARD16"   name="len" />
1219         <field type="DeviceId" name="deviceid" altenum="Device" />
1220         <pad bytes="2" />
1221     </struct>
1222
1223     <struct name="HierarchyChange">
1224         <field type="CARD16" name="type" enum="HierarchyChangeType" />
1225         <field type="CARD16" name="len" />
1226         <list type="CARD8" name="uninterpreted_data">
1227             <op op="-">
1228                 <op op="*">
1229                     <fieldref>len</fieldref>
1230                     <value>4</value>
1231                 </op>
1232                 <value>4</value>
1233             </op>
1234         </list>
1235     </struct>
1236
1237     <request name="XIChangeHierarchy" opcode="43">
1238         <field type="CARD8" name="num_changes" />
1239         <pad bytes="3" />
1240         <list type="HierarchyChange" name="changes">
1241             <fieldref>num_changes</fieldref>
1242         </list>
1243     </request>
1244
1245     <!-- XISetClientPointer -->
1246
1247     <request name="XISetClientPointer" opcode="44">
1248         <field type="WINDOW"   name="window" />
1249         <field type="DeviceId" name="deviceid" altenum="Device" />
1250         <pad bytes="2" />
1251     </request>
1252
1253     <!-- XIGetClientPointer -->
1254
1255     <request name="XIGetClientPointer" opcode="45">
1256         <field type="WINDOW" name="window" />
1257         <reply>
1258             <pad bytes="1" />
1259             <field type="BOOL"     name="set" />
1260             <pad bytes="1" />
1261             <field type="DeviceId" name="deviceid" altenum="Device" />
1262             <pad bytes="20" />
1263         </reply>
1264     </request>
1265
1266     <!-- XISelectEvents -->
1267
1268     <enum name="XIEventMask">
1269         <item name="DeviceChanged">    <bit>1</bit> </item>
1270         <item name="KeyPress">         <bit>2</bit> </item>
1271         <item name="KeyRelease">       <bit>3</bit> </item>
1272         <item name="ButtonPress">      <bit>4</bit> </item>
1273         <item name="ButtonRelease">    <bit>5</bit> </item>
1274         <item name="Motion">           <bit>6</bit> </item>
1275         <item name="Enter">            <bit>7</bit> </item>
1276         <item name="Leave">            <bit>8</bit> </item>
1277         <item name="FocusIn">          <bit>9</bit> </item>
1278         <item name="FocusOut">         <bit>10</bit> </item>
1279         <item name="Hierarchy">        <bit>11</bit> </item>
1280         <item name="Property">         <bit>12</bit> </item>
1281         <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅ -->
1282         <item name="RawKeyPress">      <bit>13</bit> </item>
1283         <item name="RawKeyRelease">    <bit>14</bit> </item>
1284         <item name="RawButtonPress">   <bit>15</bit> </item>
1285         <item name="RawButtonRelease"> <bit>16</bit> </item>
1286         <item name="RawMotion">        <bit>17</bit> </item>
1287         <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅ -->
1288         <item name="TouchBegin">       <bit>18</bit> </item>
1289         <item name="TouchUpdate">      <bit>19</bit> </item>
1290         <item name="TouchEnd">         <bit>20</bit> </item>
1291         <item name="TouchOwnership">   <bit>21</bit> </item>
1292         <item name="RawTouchBegin">    <bit>22</bit> </item>
1293         <item name="RawTouchUpdate">   <bit>23</bit> </item>
1294         <item name="RawTouchEnd">      <bit>24</bit> </item>
1295         <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅ -->
1296         <item name="BarrierHit">       <bit>25</bit> </item>
1297         <item name="BarrierLeave">     <bit>26</bit> </item>
1298     </enum>
1299
1300     <struct name="EventMask">
1301         <field type="DeviceId" name="deviceid" altenum="Device" />
1302         <field type="CARD16"   name="mask_len" />
1303         <list type="CARD32" name="mask" mask="XIEventMask">
1304             <fieldref>mask_len</fieldref>
1305         </list>
1306     </struct>
1307
1308     <request name="XISelectEvents" opcode="46">
1309         <field type="WINDOW" name="window" />
1310         <field type="CARD16" name="num_mask" />
1311         <pad bytes="2" />
1312         <list type="EventMask" name="masks">
1313             <fieldref>num_mask</fieldref>
1314         </list>
1315     </request>
1316
1317     <!-- XIQueryVersion -->
1318
1319     <request name="XIQueryVersion" opcode="47">
1320         <field type="CARD16" name="major_version" />
1321         <field type="CARD16" name="minor_version" />
1322
1323         <reply>
1324             <pad bytes="1" />
1325             <field type="CARD16" name="major_version" />
1326             <field type="CARD16" name="minor_version" />
1327             <pad bytes="20" />
1328         </reply>
1329     </request>
1330
1331     <!-- XIQueryDevice -->
1332
1333     <enum name="DeviceClassType">
1334         <item name="Key">      <value>0</value> </item>
1335         <item name="Button">   <value>1</value> </item>
1336         <item name="Valuator"> <value>2</value> </item>
1337         <item name="Scroll">   <value>3</value> </item>
1338         <item name="Touch">    <value>8</value> </item>
1339     </enum>
1340
1341     <enum name="DeviceType">
1342         <item name="MasterPointer">  <value>1</value> </item>
1343         <item name="MasterKeyboard"> <value>2</value> </item>
1344         <item name="SlavePointer">   <value>3</value> </item>
1345         <item name="SlaveKeyboard">  <value>4</value> </item>
1346         <item name="FloatingSlave">  <value>5</value> </item>
1347     </enum>
1348
1349     <enum name="ScrollFlags">
1350         <item name="NoEmulation"> <bit>0</bit> </item>
1351         <item name="Preferred">   <bit>1</bit> </item>
1352     </enum>
1353
1354     <enum name="ScrollType">
1355         <item name="Vertical">   <value>1</value> </item>
1356         <item name="Horizontal"> <value>2</value> </item>
1357     </enum>
1358
1359     <enum name="TouchMode">
1360         <item name="Direct">    <value>1</value> </item>
1361         <item name="Dependent"> <value>2</value> </item>
1362     </enum>
1363
1364     <struct name="ButtonClass">
1365         <field type="CARD16"   name="type" enum="DeviceClassType" />
1366         <field type="CARD16"   name="len" />
1367         <field type="DeviceId" name="sourceid" />
1368         <field type="CARD16"   name="num_buttons" />
1369         <list type="CARD32"    name="state">
1370             <op op="/">
1371                 <op op="+">
1372                     <fieldref>num_buttons</fieldref>
1373                     <value>31</value>
1374                 </op>
1375                 <value>32</value>
1376             </op>
1377         </list>
1378         <list type="ATOM" name="labels">
1379             <fieldref>num_buttons</fieldref>
1380         </list>
1381     </struct>
1382
1383     <struct name="KeyClass">
1384         <field type="CARD16"   name="type" enum="DeviceClassType" />
1385         <field type="CARD16"   name="len" />
1386         <field type="DeviceId" name="sourceid" />
1387         <field type="CARD16"   name="num_keys" />
1388         <list type="CARD32" name="keys">
1389             <fieldref>num_keys</fieldref>
1390         </list>
1391     </struct>
1392
1393     <struct name="ScrollClass">
1394         <field type="CARD16"   name="type" enum="DeviceClassType" />
1395         <field type="CARD16"   name="len" />
1396         <field type="DeviceId" name="sourceid" />
1397         <field type="CARD16"   name="number" />
1398         <field type="CARD16"   name="scroll_type" enum="ScrollType" />
1399         <pad bytes="2" />
1400         <field type="CARD32"   name="flags" enum="ScrollFlags" />
1401         <field type="FP3232"   name="increment" />
1402     </struct>
1403
1404     <struct name="TouchClass">
1405         <field type="CARD16"   name="type" enum="DeviceClassType" />
1406         <field type="CARD16"   name="len" />
1407         <field type="DeviceId" name="sourceid" />
1408         <field type="CARD8"    name="mode" enum="TouchMode" />
1409         <field type="CARD8"    name="num_touches" />
1410     </struct>
1411
1412     <struct name="ValuatorClass">
1413         <field type="CARD16"   name="type" enum="DeviceClassType" />
1414         <field type="CARD16"   name="len" />
1415         <field type="DeviceId" name="sourceid" />
1416         <field type="CARD16"   name="number" />
1417         <field type="ATOM"     name="label" />
1418         <field type="FP3232"   name="min" />
1419         <field type="FP3232"   name="max" />
1420         <field type="FP3232"   name="value" />
1421         <field type="CARD32"   name="resolution" />
1422         <field type="CARD8"    name="mode" enum="ValuatorMode" />
1423         <pad bytes="3" />
1424     </struct>
1425
1426     <struct name="DeviceClass">
1427         <field type="CARD16"   name="type" enum="DeviceClassType" />
1428         <field type="CARD16"   name="len" />
1429         <field type="DeviceId" name="sourceid" />
1430         <pad bytes="2" />
1431         <list type="CARD8" name="uninterpreted_data">
1432             <op op="-">
1433                 <op op="*">
1434                     <fieldref>len</fieldref>
1435                     <value>4</value>
1436                 </op>
1437                 <value>8</value>
1438             </op>
1439         </list>
1440     </struct>
1441
1442     <struct name="XIDeviceInfo">
1443         <field type="DeviceId" name="deviceid" altenum="Device" />
1444         <field type="CARD16"   name="type" altenum="DeviceType" />
1445         <field type="DeviceId" name="attachment" altenum="Device" />
1446         <field type="CARD16"   name="num_classes" />
1447         <field type="CARD16"   name="name_len" />
1448         <field type="BOOL"     name="enabled" />
1449         <pad bytes="1" />
1450         <list type="char" name="name">
1451             <!-- name_len is without padding, so we've to pad on our own,
1452                  auto align pad after the list would be helpfull -->
1453             <op op="*">
1454                 <op op="/">
1455                     <op op="+">
1456                         <fieldref>name_len</fieldref>
1457                         <value>3</value>
1458                     </op>
1459                     <value>4</value>
1460                 </op>
1461                 <value>4</value>
1462             </op>
1463         </list>
1464         <list type="DeviceClass" name="classes">
1465             <fieldref>num_classes</fieldref>
1466         </list>
1467     </struct>
1468
1469     <request name="XIQueryDevice" opcode="48">
1470         <field type="DeviceId" name="deviceid" altenum="Device" />
1471         <pad bytes="2" />
1472         <reply>
1473             <pad bytes="1" />
1474             <field type="CARD16" name="num_infos" />
1475             <pad bytes="22" />
1476             <list type="XIDeviceInfo" name="infos">
1477                 <fieldref>num_infos</fieldref>
1478             </list>
1479         </reply>
1480     </request>
1481
1482     <!-- XISetFocus -->
1483
1484     <request name="XISetFocus" opcode="49">
1485         <field type="WINDOW"    name="window" />
1486         <field type="TIMESTAMP" name="time" altenum="Time" />
1487         <field type="DeviceId"  name="deviceid" altenum="Device" />
1488         <pad bytes="2" />
1489     </request>
1490
1491     <!-- XIGetFocus -->
1492
1493     <request name="XIGetFocus" opcode="50">
1494         <field type="DeviceId" name="deviceid" altenum="Device" />
1495         <pad bytes="2" />
1496         <reply>
1497             <pad bytes="1" />
1498             <field type="WINDOW" name="focus" />
1499             <pad bytes="20" />
1500         </reply>
1501     </request>
1502
1503     <!-- XIGrabDevice -->
1504
1505     <enum name="GrabOwner">
1506         <item name="NoOwner"> <value>0</value> </item>
1507         <item name="Owner">   <value>1</value> </item>
1508     </enum>
1509
1510     <request name="XIGrabDevice" opcode="51">
1511         <field type="WINDOW"    name="window" />
1512         <field type="TIMESTAMP" name="time" altenum="Time" />
1513         <field type="CURSOR"    name="cursor" />
1514         <field type="DeviceId"  name="deviceid" altenum="Device" />
1515         <field type="CARD8"     name="mode" enum="GrabMode" />
1516         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1517         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1518         <pad bytes="1" />
1519         <field type="CARD16"    name="mask_len" />
1520         <list type="CARD32" name="mask">
1521             <fieldref>mask_len</fieldref>
1522         </list>
1523         <reply>
1524             <pad bytes="1" />
1525             <field type="CARD8" name="status" enum="GrabStatus" />
1526             <pad bytes="23" />
1527         </reply>
1528     </request>
1529
1530     <!-- XIUngrabDevice -->
1531
1532     <request name="XIUngrabDevice" opcode="52">
1533         <field type="TIMESTAMP" name="time" altenum="Time" />
1534         <field type="DeviceId" name="deviceid" altenum="Device" />
1535         <pad bytes="2" />
1536     </request>
1537
1538     <!-- XIAllowEvents -->
1539
1540     <enum name="EventMode">
1541         <item name="AsyncDevice">       <value>0</value> </item>
1542         <item name="SyncDevice">        <value>1</value> </item>
1543         <item name="ReplayDevice">      <value>2</value> </item>
1544         <item name="AsyncPairedDevice"> <value>3</value> </item>
1545         <item name="AsyncPair">         <value>4</value> </item>
1546         <item name="SyncPair">          <value>5</value> </item>
1547         <item name="AcceptTouch">       <value>6</value> </item>
1548         <item name="RejectTouch">       <value>7</value> </item>
1549     </enum>
1550
1551     <request name="XIAllowEvents" opcode="53">
1552         <field type="TIMESTAMP" name="time" altenum="Time" />
1553         <field type="DeviceId"  name="deviceid" altenum="Device" />
1554         <field type="CARD8"     name="event_mode" enum="EventMode" />
1555         <pad bytes="1" />
1556         <field type="CARD32"    name="touchid" />
1557         <field type="WINDOW"    name="grab_window" />
1558     </request>
1559
1560     <!-- XIPassiveGrabDevice -->
1561
1562     <enum name="GrabMode22">
1563         <item name="Sync">  <value>0</value> </item>
1564         <item name="Async"> <value>1</value> </item>
1565         <item name="Touch"> <value>2</value> </item>
1566     </enum>
1567
1568     <enum name="GrabType">
1569         <item name="Button">     <value>0</value> </item>
1570         <item name="Keycode">    <value>1</value> </item>
1571         <item name="Enter">      <value>2</value> </item>
1572         <item name="FocusIn">    <value>3</value> </item>
1573         <item name="TouchBegin"> <value>4</value> </item>
1574     </enum>
1575
1576     <enum name="ModifierMask">
1577         <item name="Any"> <bit>31</bit> </item>
1578     </enum>
1579
1580     <struct name="GrabModifierInfo">
1581         <field type="CARD32" name="modifiers" altenum="ModifierMask" />
1582         <field type="CARD8"  name="status" enum="GrabStatus" />
1583         <pad bytes="3" />
1584     </struct>
1585
1586     <request name="XIPassiveGrabDevice" opcode="54">
1587         <field type="TIMESTAMP" name="time" altenum="Time" />
1588         <field type="WINDOW"    name="grab_window" />
1589         <field type="CURSOR"    name="cursor" />
1590         <field type="CARD32"    name="detail" />
1591         <field type="DeviceId"  name="deviceid" altenum="Device" />
1592         <field type="CARD16"    name="num_modifiers" />
1593         <field type="CARD16"    name="mask_len" />
1594         <field type="CARD8"     name="grab_type" enum="GrabType" />
1595         <field type="CARD8"     name="grab_mode" enum="GrabMode22" />
1596         <field type="CARD8"     name="paired_device_mode" enum="GrabMode" />
1597         <field type="BOOL"      name="owner_events" enum="GrabOwner" />
1598         <pad bytes="2" />
1599         <list type="CARD32" name="mask">
1600             <fieldref>mask_len</fieldref>
1601         </list>
1602         <list type="CARD32" name="modifiers">
1603             <fieldref>num_modifiers</fieldref>
1604         </list>
1605         <reply>
1606             <pad bytes="1" />
1607             <field type="CARD16" name="num_modifiers" />
1608             <pad bytes="22" />
1609             <list type="GrabModifierInfo" name="modifiers">
1610                 <fieldref>num_modifiers</fieldref>
1611             </list>
1612         </reply>
1613     </request>
1614
1615     <!-- XIPassiveUngrabDevice -->
1616
1617     <request name="XIPassiveUngrabDevice" opcode="55">
1618         <field type="WINDOW"   name="grab_window" />
1619         <field type="CARD32"   name="detail" />
1620         <field type="DeviceId" name="deviceid" altenum="Device" />
1621         <field type="CARD16"   name="num_modifiers" />
1622         <field type="CARD8"    name="grab_type" enum="GrabType" />
1623         <pad bytes="3" />
1624         <list type="CARD32" name="modifiers">
1625             <fieldref>num_modifiers</fieldref>
1626         </list>
1627     </request>
1628
1629     <!-- XIListProperties -->
1630
1631     <request name="XIListProperties" opcode="56">
1632         <field type="DeviceId" name="deviceid" altenum="Device" />
1633         <pad bytes="2" />
1634         <reply>
1635             <pad bytes="1" />
1636             <field type="CARD16" name="num_properties" />
1637             <pad bytes="22" />
1638             <list type="ATOM" name="properties">
1639                 <fieldref>num_properties</fieldref>
1640             </list>
1641         </reply>
1642     </request>
1643
1644     <!-- XIChangeProperty -->
1645
1646     <request name="XIChangeProperty" opcode="57">
1647         <field type="DeviceId" name="deviceid" altenum="Device" />
1648         <field type="CARD8"    name="mode" enum="PropMode" />
1649         <field type="CARD8"    name="format" enum="PropertyFormat" />
1650         <field type="ATOM"     name="property" />
1651         <field type="ATOM"     name="type" />
1652         <field type="CARD32"   name="num_items" />
1653         <switch name="items">
1654             <fieldref>format</fieldref>
1655             <!-- <bitcase> is not correct, this would need <cases>s.
1656                  It works in that case, because PropertyFormat items can be
1657                  distinguished exactly as their values don't have equal bits.
1658             -->
1659             <bitcase>
1660                 <enumref ref="PropertyFormat">8Bits</enumref>
1661                 <list type="CARD8" name="data8">
1662                     <fieldref>num_items</fieldref>
1663                 </list>
1664             </bitcase>
1665             <bitcase>
1666                 <enumref ref="PropertyFormat">16Bits</enumref>
1667                 <list type="CARD16" name="data16">
1668                     <fieldref>num_items</fieldref>
1669                 </list>
1670             </bitcase>
1671             <bitcase>
1672                 <enumref ref="PropertyFormat">32Bits</enumref>
1673                 <list type="CARD32" name="data32">
1674                     <fieldref>num_items</fieldref>
1675                 </list>
1676             </bitcase>
1677         </switch>
1678     </request>
1679
1680     <!-- XIDeleteProperty -->
1681
1682     <request name="XIDeleteProperty" opcode="58">
1683         <field type="DeviceId" name="deviceid" altenum="Device" />
1684         <pad bytes="2" />
1685         <field type="ATOM"     name="property" />
1686     </request>
1687
1688     <!-- XIGetProperty -->
1689
1690     <request name="XIGetProperty" opcode="59">
1691         <field type="DeviceId" name="deviceid" altenum="Device" />
1692         <field type="BOOL"     name="delete" />
1693         <pad bytes="1" />
1694         <field type="ATOM"     name="property" />
1695         <field type="ATOM"     name="type" />
1696         <field type="CARD32"   name="offset" />
1697         <field type="CARD32"   name="len" />
1698         <reply>
1699             <pad bytes="1" />
1700             <field type="ATOM"   name="type" />
1701             <field type="CARD32" name="bytes_after" />
1702             <field type="CARD32" name="num_items" />
1703             <field type="CARD8"  name="format" enum="PropertyFormat" />
1704             <pad bytes="11" />
1705             <switch name="items">
1706                 <fieldref>format</fieldref>
1707                 <!-- <bitcase> is not correct, this would need <cases>s.
1708                      It works in that case, because PropertyFormat items can be
1709                      distinguished exactly as their values don't have equal bits.
1710                 -->
1711                 <bitcase>
1712                     <enumref ref="PropertyFormat">8Bits</enumref>
1713                     <list type="CARD8" name="data8">
1714                         <fieldref>num_items</fieldref>
1715                     </list>
1716                 </bitcase>
1717                 <bitcase>
1718                     <enumref ref="PropertyFormat">16Bits</enumref>
1719                     <list type="CARD16" name="data16">
1720                         <fieldref>num_items</fieldref>
1721                     </list>
1722                 </bitcase>
1723                 <bitcase>
1724                     <enumref ref="PropertyFormat">32Bits</enumref>
1725                     <list type="CARD32" name="data32">
1726                         <fieldref>num_items</fieldref>
1727                     </list>
1728                 </bitcase>
1729             </switch>
1730         </reply>
1731     </request>
1732
1733     <!-- XIGetSelectedEvents -->
1734
1735     <request name="XIGetSelectedEvents" opcode="60">
1736         <field type="WINDOW" name="window" />
1737         <reply>
1738             <pad bytes="1" />
1739             <field type="CARD16" name="num_masks" />
1740             <pad bytes="22" />
1741             <list type="EventMask" name="masks">
1742                 <fieldref>num_masks</fieldref>
1743             </list>
1744         </reply>
1745     </request>
1746
1747     <!-- ⋅⋅⋅ Requests (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1748
1749     <!-- XIBarrierReleasePointer -->
1750
1751     <struct name="BarrierReleasePointerInfo">
1752         <field type="DeviceId" name="deviceid" />
1753         <pad bytes="2" />
1754         <field type="BARRIER"  name="barrier" />
1755         <field type="CARD32"   name="eventid" />
1756     </struct>
1757
1758     <request name="XIBarrierReleasePointer" opcode="61">
1759         <field type="CARD32" name="num_barriers" />
1760         <list type="BarrierReleasePointerInfo" name="barriers">
1761             <fieldref>num_barriers</fieldref>
1762         </list>
1763     </request>
1764
1765     <!-- ⋅⋅⋅ Events (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1766     <!-- Notes:
1767          - A 'len' field in a v1++ structure is in bytes.
1768     -->
1769
1770     <event name="DeviceValuator" number="0">
1771         <field type="CARD8"  name="device_id" />
1772         <field type="CARD16" name="device_state" />
1773         <field type="CARD8"  name="num_valuators" />
1774         <field type="CARD8"  name="first_valuator" />
1775         <list type="INT32"   name="valuators">
1776             <value>6</value>
1777         </list>
1778     </event>
1779
1780     <event name="DeviceKeyPress" number="1">
1781         <field type="BYTE"      name="detail" />
1782         <field type="TIMESTAMP" name="time" />
1783         <field type="WINDOW"    name="root" />
1784         <field type="WINDOW"    name="event" />
1785         <field type="WINDOW"    name="child" altenum="Window" />
1786         <field type="INT16"     name="root_x" />
1787         <field type="INT16"     name="root_y" />
1788         <field type="INT16"     name="event_x" />
1789         <field type="INT16"     name="event_y" />
1790         <field type="CARD16"    name="state" />
1791         <field type="BOOL"      name="same_screen" />
1792         <field type="CARD8"     name="device_id" />
1793     </event>
1794
1795     <eventcopy name="DeviceKeyRelease"    number="2" ref="DeviceKeyPress" />
1796     <eventcopy name="DeviceButtonPress"   number="3" ref="DeviceKeyPress" />
1797     <eventcopy name="DeviceButtonRelease" number="4" ref="DeviceKeyPress" />
1798     <eventcopy name="DeviceMotionNotify"  number="5" ref="DeviceKeyPress" />
1799
1800     <event name="DeviceFocusIn" number="6">
1801         <field type="BYTE"      name="detail" enum="xproto:NotifyDetail" />
1802         <field type="TIMESTAMP" name="time" />
1803         <field type="WINDOW"    name="window" />
1804         <field type="BYTE"      name="mode" enum="xproto:NotifyMode" />
1805         <field type="CARD8"     name="device_id" />
1806         <pad bytes="18" />
1807     </event>
1808
1809     <eventcopy name="DeviceFocusOut" number="7" ref="DeviceFocusIn" />
1810     <eventcopy name="ProximityIn"    number="8" ref="DeviceKeyPress" />
1811     <eventcopy name="ProximityOut"   number="9" ref="DeviceKeyPress" />
1812
1813     <event name="DeviceStateNotify" number="10">
1814         <field type="BYTE"      name="device_id" />
1815         <field type="TIMESTAMP" name="time" />
1816         <field type="CARD8"     name="num_keys" />
1817         <field type="CARD8"     name="num_buttons" />
1818         <field type="CARD8"     name="num_valuators" />
1819         <field type="CARD8"     name="classes_reported" />
1820         <list type="CARD8"      name="buttons">
1821             <value>4</value>
1822         </list>
1823         <list type="CARD8" name="keys">
1824             <value>4</value>
1825         </list>
1826         <list type="CARD32" name="valuators">
1827             <value>3</value>
1828         </list>
1829     </event>
1830
1831     <event name="DeviceMappingNotify" number="11">
1832         <field type="BYTE"    name="device_id" />
1833         <field type="CARD8"   name="request" />
1834         <field type="KeyCode" name="first_keycode" />
1835         <field type="CARD8"   name="count" />
1836         <pad bytes="1" />
1837         <field type="TIMESTAMP" name="time" />
1838         <pad bytes="20" />
1839     </event>
1840
1841     <event name="ChangeDeviceNotify" number="12">
1842         <field type="BYTE"      name="device_id" />
1843         <field type="TIMESTAMP" name="time" />
1844         <field type="CARD8"     name="request" />
1845         <pad bytes="23" />
1846     </event>
1847
1848     <event name="DeviceKeyStateNotify" number="13">
1849         <field type="BYTE" name="device_id" />
1850         <list type="CARD8" name="keys">
1851             <value>28</value>
1852         </list>
1853     </event>
1854
1855     <event name="DeviceButtonStateNotify" number="14">
1856         <field type="BYTE" name="device_id" />
1857         <list type="CARD8" name="buttons">
1858             <value>28</value>
1859         </list>
1860     </event>
1861
1862     <!-- ⋅⋅⋅ Events (v1.4) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1863
1864     <enum name="DeviceChange">
1865         <item name="Added">          <value>0</value> </item>
1866         <item name="Removed">        <value>1</value> </item>
1867         <item name="Enabled">        <value>2</value> </item>
1868         <item name="Disabled">       <value>3</value> </item>
1869         <item name="Unrecoverable">  <value>4</value> </item>
1870         <item name="ControlChanged"> <value>5</value> </item>
1871     </enum>
1872
1873     <event name="DevicePresenceNotify" number="15">
1874         <pad bytes="1" />
1875         <field type="TIMESTAMP" name="time" />
1876         <field type="BYTE"      name="devchange" enum="DeviceChange" />
1877         <field type="BYTE"      name="device_id" />
1878         <field type="CARD16"    name="control" />
1879         <pad bytes="20" />
1880     </event>
1881
1882     <!-- ⋅⋅⋅ Events (v1.5) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1883
1884     <event name="DevicePropertyNotify" number="16">
1885         <field type="BYTE"      name="state" enum="Property" />
1886         <field type="TIMESTAMP" name="time" />
1887         <field type="ATOM"      name="property" />
1888         <pad bytes="19" />
1889         <field type="CARD8"     name="device_id" />
1890     </event>
1891
1892     <!-- ⋅⋅⋅ Events (v2.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
1893     <!-- Notes:
1894          - A 'len' field in a v2++ structure is in 4 byte units.
1895     -->
1896
1897     <enum name="ChangeReason">
1898         <item name="SlaveSwitch">  <value>1</value> </item>
1899         <item name="DeviceChange"> <value>2</value> </item>
1900     </enum>
1901
1902     <event name="DeviceChanged" number="1" xge="true">
1903         <field type="DeviceId"  name="deviceid" altenum="Device" />
1904         <field type="TIMESTAMP" name="time" altenum="Time" />
1905         <!-- event specific fields -->
1906         <field type="CARD16"    name="num_classes" />
1907         <field type="DeviceId"  name="sourceid" altenum="Device" />
1908         <field type="CARD8"     name="reason" enum="ChangeReason" />
1909         <pad bytes="11" />
1910         <!-- 32 byte boundary -->
1911         <list type="DeviceClass" name="classes">
1912             <fieldref>num_classes</fieldref>
1913         </list>
1914     </event>
1915
1916     <enum name="KeyEventFlags">
1917         <item name="KeyRepeat"> <bit>16</bit> </item>
1918     </enum>
1919
1920     <event name="KeyPress" number="2" xge="true">
1921         <field type="DeviceId"  name="deviceid" altenum="Device" />
1922         <field type="TIMESTAMP" name="time" altenum="Time" />
1923         <!-- event specific fields -->
1924         <field type="CARD32"    name="detail" />
1925         <field type="WINDOW"    name="root" />
1926         <field type="WINDOW"    name="event" />
1927         <field type="WINDOW"    name="child" />
1928         <!-- 32 byte boundary -->
1929         <field type="FP1616"    name="root_x" />
1930         <field type="FP1616"    name="root_y" />
1931         <field type="FP1616"    name="event_x" />
1932         <field type="FP1616"    name="event_y" />
1933         <field type="CARD16"    name="buttons_len" />
1934         <field type="CARD16"    name="valuators_len" />
1935         <field type="DeviceId"  name="sourceid" altenum="Device" />
1936         <pad bytes="2" />
1937         <field type="CARD32"       name="flags" mask="KeyEventFlags" />
1938         <field type="ModifierInfo" name="mods" />
1939         <field type="GroupInfo"    name="group" />
1940         <list type="CARD32" name="button_mask">
1941             <fieldref>buttons_len</fieldref>
1942         </list>
1943         <list type="CARD32" name="valuator_mask">
1944             <fieldref>valuators_len</fieldref>
1945         </list>
1946         <!-- Uninterpreted: list (axisvalues) of FP3232,
1947                             length is <popcount> on valuator_mask list -->
1948     </event>
1949
1950     <eventcopy name="KeyRelease" number="3" ref="KeyPress" />
1951
1952     <enum name="PointerEventFlags">
1953         <item name="PointerEmulated"> <bit>16</bit> </item>
1954     </enum>
1955
1956     <event name="ButtonPress" number="4" xge="true">
1957         <field type="DeviceId"  name="deviceid" altenum="Device" />
1958         <field type="TIMESTAMP" name="time" altenum="Time" />
1959         <!-- event specific fields -->
1960         <field type="CARD32"    name="detail" />
1961         <field type="WINDOW"    name="root" />
1962         <field type="WINDOW"    name="event" />
1963         <field type="WINDOW"    name="child" />
1964         <!-- 32 byte boundary -->
1965         <field type="FP1616"    name="root_x" />
1966         <field type="FP1616"    name="root_y" />
1967         <field type="FP1616"    name="event_x" />
1968         <field type="FP1616"    name="event_y" />
1969         <field type="CARD16"    name="buttons_len" />
1970         <field type="CARD16"    name="valuators_len" />
1971         <field type="DeviceId"  name="sourceid" altenum="Device" />
1972         <pad bytes="2" />
1973         <field type="CARD32"       name="flags" mask="PointerEventFlags" />
1974         <field type="ModifierInfo" name="mods" />
1975         <field type="GroupInfo"    name="group" />
1976         <list type="CARD32" name="button_mask">
1977             <fieldref>buttons_len</fieldref>
1978         </list>
1979         <list type="CARD32" name="valuator_mask">
1980             <fieldref>valuators_len</fieldref>
1981         </list>
1982         <!-- Uninterpreted: list (axisvalues) of FP3232,
1983                             length is <popcount> on valuator_mask list -->
1984     </event>
1985
1986     <eventcopy name="ButtonRelease" number="5" ref="ButtonPress" />
1987     <eventcopy name="Motion"        number="6" ref="ButtonPress" />
1988
1989     <enum name="NotifyMode">
1990         <item name="Normal">        <value>0</value> </item>
1991         <item name="Grab">          <value>1</value> </item>
1992         <item name="Ungrab">        <value>2</value> </item>
1993         <item name="WhileGrabbed">  <value>3</value> </item>
1994         <item name="PassiveGrab">   <value>4</value> </item>
1995         <item name="PassiveUngrab"> <value>5</value> </item>
1996     </enum>
1997
1998     <enum name="NotifyDetail">
1999         <item name="Ancestor">         <value>0</value> </item>
2000         <item name="Virtual">          <value>1</value> </item>
2001         <item name="Inferior">         <value>2</value> </item>
2002         <item name="Nonlinear">        <value>3</value> </item>
2003         <item name="NonlinearVirtual"> <value>4</value> </item>
2004         <item name="Pointer">          <value>5</value> </item>
2005         <item name="PointerRoot">      <value>6</value> </item>
2006         <item name="None">             <value>7</value> </item>
2007     </enum>
2008
2009     <event name="Enter" number="7" xge="true">
2010         <field type="DeviceId"  name="deviceid" altenum="Device" />
2011         <field type="TIMESTAMP" name="time" altenum="Time" />
2012         <!-- event specific fields -->
2013         <field type="DeviceId"  name="sourceid" altenum="Device" />
2014         <field type="CARD8"     name="mode" enum="xinput:NotifyMode" />
2015         <field type="CARD8"     name="detail" enum="xinput:NotifyDetail" />
2016         <field type="WINDOW"    name="root" />
2017         <field type="WINDOW"    name="event" />
2018         <field type="WINDOW"    name="child" />
2019         <!-- 32 byte boundary -->
2020         <field type="FP1616"       name="root_x" />
2021         <field type="FP1616"       name="root_y" />
2022         <field type="FP1616"       name="event_x" />
2023         <field type="FP1616"       name="event_y" />
2024         <field type="CARD8"        name="same_screen" />
2025         <field type="CARD8"        name="focus" />
2026         <field type="CARD16"       name="buttons_len" />
2027         <field type="ModifierInfo" name="mods" />
2028         <field type="GroupInfo"    name="group" />
2029         <list type="CARD32" name="buttons">
2030             <fieldref>buttons_len</fieldref>
2031         </list>
2032     </event>
2033
2034     <eventcopy name="Leave"    number="8" ref="Enter" />
2035     <eventcopy name="FocusIn"  number="9" ref="Enter" />
2036     <eventcopy name="FocusOut" number="10" ref="Enter" />
2037
2038     <enum name="HierarchyMask">
2039         <item name="MasterAdded">    <bit>0</bit> </item>
2040         <item name="MasterRemoved">  <bit>1</bit> </item>
2041         <item name="SlaveAdded">     <bit>2</bit> </item>
2042         <item name="SlaveRemoved">   <bit>3</bit> </item>
2043         <item name="SlaveAttached">  <bit>4</bit> </item>
2044         <item name="SlaveDetached">  <bit>5</bit> </item>
2045         <item name="DeviceEnabled">  <bit>6</bit> </item>
2046         <item name="DeviceDisabled"> <bit>7</bit> </item>
2047     </enum>
2048
2049     <struct name="HierarchyInfo">
2050         <field type="DeviceId" name="deviceid" altenum="Device" />
2051         <field type="DeviceId" name="attachment" altenum="Device" />
2052         <field type="CARD8"    name="type" enum="DeviceType"/>
2053         <field type="BOOL"     name="enabled" />
2054         <pad bytes="2" />
2055         <field type="CARD32"   name="flags" mask="HierarchyMask" />
2056     </struct>
2057
2058     <event name="Hierarchy" number="11" xge="true">
2059         <field type="DeviceId"  name="deviceid" altenum="Device" />
2060         <field type="TIMESTAMP" name="time" altenum="Time" />
2061         <!-- event specific fields -->
2062         <field type="CARD32"    name="flags" mask="HierarchyMask" />
2063         <field type="CARD16"    name="num_infos" />
2064         <pad bytes="10" />
2065         <!-- 32 byte boundary -->
2066         <list type="HierarchyInfo" name="infos">
2067             <fieldref>num_infos</fieldref>
2068         </list>
2069     </event>
2070
2071     <enum name="PropertyFlag">
2072         <item name="Deleted">  <value>0</value> </item>
2073         <item name="Created">  <value>1</value> </item>
2074         <item name="Modified"> <value>2</value> </item>
2075     </enum>
2076
2077     <event name="Property" number="12" xge="true">
2078         <field type="DeviceId"  name="deviceid" altenum="Device" />
2079         <field type="TIMESTAMP" name="time" altenum="Time" />
2080         <!-- event specific fields -->
2081         <field type="ATOM"      name="property" />
2082         <field type="CARD8"     name="what" enum="PropertyFlag" />
2083         <pad bytes="11" />
2084         <!-- 32 byte boundary -->
2085     </event>
2086
2087     <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2088
2089     <event name="RawKeyPress" number="13" xge="true">
2090         <field type="DeviceId"  name="deviceid" altenum="Device" />
2091         <field type="TIMESTAMP" name="time" altenum="Time" />
2092         <!-- event specific fields -->
2093         <field type="CARD32"    name="detail" />
2094         <field type="DeviceId"  name="sourceid" />
2095         <field type="CARD16"    name="valuators_len" />
2096         <field type="CARD32"    name="flags" mask="KeyEventFlags"/>
2097         <pad bytes="4" />
2098         <!-- 32 byte boundary -->
2099         <list type="CARD32" name="valuator_mask">
2100             <fieldref>valuators_len</fieldref>
2101         </list>
2102         <!-- Uninterpreted: list (axisvalues) of FP3232,
2103                             length is <popcount> on valuator_mask list -->
2104         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2105                             length is <popcount> on valuator_mask list -->
2106     </event>
2107
2108     <eventcopy name="RawKeyRelease" number="14" ref="RawKeyPress" />
2109
2110     <event name="RawButtonPress" number="15" xge="true">
2111         <field type="DeviceId"  name="deviceid" altenum="Device" />
2112         <field type="TIMESTAMP" name="time" altenum="Time" />
2113         <!-- event specific fields -->
2114         <field type="CARD32"    name="detail" />
2115         <field type="DeviceId"  name="sourceid" />
2116         <field type="CARD16"    name="valuators_len" />
2117         <field type="CARD32"    name="flags" mask="PointerEventFlags"/>
2118         <pad bytes="4" />
2119         <!-- 32 byte boundary -->
2120         <list type="CARD32" name="valuator_mask">
2121             <fieldref>valuators_len</fieldref>
2122         </list>
2123         <!-- Uninterpreted: list (axisvalues) of FP3232,
2124                             length is <popcount> on valuator_mask list -->
2125         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2126                             length is <popcount> on valuator_mask list -->
2127     </event>
2128
2129     <eventcopy name="RawButtonRelease" number="16" ref="RawButtonPress" />
2130     <eventcopy name="RawMotion"        number="17" ref="RawButtonPress" />
2131
2132     <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2133
2134     <enum name="TouchEventFlags">
2135         <item name="TouchPendingEnd">       <bit>16</bit> </item>
2136         <item name="TouchEmulatingPointer"> <bit>17</bit> </item>
2137     </enum>
2138
2139     <event name="TouchBegin" number="18" xge="true">
2140         <field type="DeviceId"  name="deviceid" altenum="Device" />
2141         <field type="TIMESTAMP" name="time" altenum="Time" />
2142         <!-- event specific fields -->
2143         <field type="CARD32"    name="detail" />
2144         <field type="WINDOW"    name="root" />
2145         <field type="WINDOW"    name="event" />
2146         <field type="WINDOW"    name="child" />
2147         <!-- 32 byte boundary -->
2148         <field type="FP1616"    name="root_x" />
2149         <field type="FP1616"    name="root_y" />
2150         <field type="FP1616"    name="event_x" />
2151         <field type="FP1616"    name="event_y" />
2152         <field type="CARD16"    name="buttons_len" />
2153         <field type="CARD16"    name="valuators_len" />
2154         <field type="DeviceId"  name="sourceid" altenum="Device" />
2155         <pad bytes="2" />
2156         <field type="CARD32"       name="flags" mask="TouchEventFlags" />
2157         <field type="ModifierInfo" name="mods" />
2158         <field type="GroupInfo"    name="group" />
2159         <list type="CARD32" name="button_mask">
2160             <fieldref>buttons_len</fieldref>
2161         </list>
2162         <list type="CARD32" name="valuator_mask">
2163             <fieldref>valuators_len</fieldref>
2164         </list>
2165         <!-- Uninterpreted: list (axisvalues) of FP3232,
2166                             length is <popcount> on valuator_mask list -->
2167     </event>
2168
2169     <eventcopy name="TouchUpdate" number="19" ref="TouchBegin" />
2170     <eventcopy name="TouchEnd"    number="20" ref="TouchBegin" />
2171
2172     <enum name="TouchOwnershipFlags">
2173         <!-- XXX: Remove this enum? Currently, no flag is defined. -->
2174         <item name="None"> <value>0</value> </item>
2175     </enum>
2176
2177     <event name="TouchOwnership" number="21" xge="true">
2178         <field type="DeviceId"  name="deviceid" altenum="Device" />
2179         <field type="TIMESTAMP" name="time" altenum="Time" />
2180         <!-- event specific fields -->
2181         <field type="CARD32"    name="touchid" />
2182         <field type="WINDOW"    name="root" />
2183         <field type="WINDOW"    name="event" />
2184         <field type="WINDOW"    name="child" />
2185         <!-- 32 byte boundary -->
2186         <field type="DeviceId"  name="sourceid" altenum="Device" />
2187         <pad bytes="2" />
2188         <field type="CARD32"    name="flags" enum="TouchOwnershipFlags" />
2189         <pad bytes="8" />
2190     </event>
2191
2192     <event name="RawTouchBegin" number="22" xge="true">
2193         <field type="DeviceId"  name="deviceid" altenum="Device" />
2194         <field type="TIMESTAMP" name="time" altenum="Time" />
2195         <!-- event specific fields -->
2196         <field type="CARD32"    name="detail" />
2197         <field type="DeviceId"  name="sourceid" />
2198         <field type="CARD16"    name="valuators_len" />
2199         <field type="CARD32"    name="flags" mask="TouchEventFlags"/>
2200         <pad bytes="4" />
2201         <!-- 32 byte boundary -->
2202         <list type="CARD32" name="valuator_mask">
2203             <fieldref>valuators_len</fieldref>
2204         </list>
2205         <!-- Uninterpreted: list (axisvalues) of FP3232,
2206                             length is <popcount> on valuator_mask list -->
2207         <!-- Uninterpreted: list (axisvalues_raw) of FP3232,
2208                             length is <popcount> on valuator_mask list -->
2209     </event>
2210
2211     <eventcopy name="RawTouchUpdate" number="23" ref="RawTouchBegin" />
2212     <eventcopy name="RawTouchEnd"    number="24" ref="RawTouchBegin" />
2213
2214     <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2215
2216     <event name="BarrierHit" number="25" xge="true">
2217         <field type="DeviceId"  name="deviceid" altenum="Device" />
2218         <field type="TIMESTAMP" name="time" altenum="Time" />
2219         <!-- event specific fields -->
2220         <field type="CARD32"    name="eventid" />
2221         <field type="WINDOW"    name="root" />
2222         <field type="WINDOW"    name="event" />
2223         <field type="BARRIER"   name="barrier" />
2224         <!-- 32 byte boundary -->
2225         <field type="CARD32"    name="dtime" />
2226         <field type="CARD32"    name="flags" />
2227         <field type="DeviceId"  name="sourceid" altenum="Device" />
2228         <pad bytes="2" />
2229         <field type="FP1616"    name="root_x" />
2230         <field type="FP1616"    name="root_y" />
2231         <field type="FP3232"    name="dx" />
2232         <field type="FP3232"    name="dy" />
2233     </event>
2234
2235     <eventcopy name="BarrierLeave" number="26" ref="BarrierHit" />
2236
2237     <!-- ⋅⋅⋅ Errors (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
2238
2239     <error name="Device"     number="0" />
2240     <error name="Event"      number="1" />
2241     <error name="Mode"       number="2" />
2242     <error name="DeviceBusy" number="3" />
2243     <error name="Class"      number="4" />
2244
2245 </xcb>