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