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