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