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