xinput: struct XIDeviceInfo.name: cleanup of padding
[free-sw/xcb/proto] / src / xinput.xml
index 3883b93..0c036bd 100644 (file)
@@ -34,6 +34,7 @@ authorization from the authors.
 
 <xcb header="xinput" extension-xname="XInputExtension" extension-name="Input"
      major-version="2" minor-version="3">
+    <import>xfixes</import>
     <import>xproto</import>
 
     <!-- ⋅⋅⋅ Types (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
@@ -51,10 +52,6 @@ authorization from the authors.
         <field type="CARD32" name="frac" />
     </struct>
 
-    <!-- ⋅⋅⋅ Types (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
-
-    <typedef oldname="CARD32" newname="Barrier" />
-
     <!-- ⋅⋅⋅ Requests (v1.0) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
 
     <!-- GetExtensionVersion -->
@@ -92,6 +89,17 @@ authorization from the authors.
         <item name="Proximity"> <value>4</value> </item>
         <item name="Focus">     <value>5</value> </item>
         <item name="Other">     <value>6</value> </item>
+        <!--
+               value Attach=7 is still contained in XI.h as "#define AttachClass"
+               but it was never transmitted over the protocol.
+               (It was used to tag a fake class created by libXi).
+
+               Even the creation of that fake class has been dropped
+               from libXi in 2009 by the following change:
+               http://cgit.freedesktop.org/xorg/lib/libXi/commit/?id=62858c426e6de1b99df660251737233afd335302
+
+               <item name="Attach">    <value>7</value> </item>
+        -->
     </enum>
 
     <enum name="ValuatorMode">
@@ -182,6 +190,7 @@ authorization from the authors.
             <list type="InputClassInfo" name="class_info">
                 <fieldref>num_classes</fieldref>
             </list>
+            <pad align="4" />
         </reply>
     </request>
 
@@ -269,7 +278,7 @@ authorization from the authors.
 
     <struct name="DeviceTimeCoord">
         <field type="TIMESTAMP" name="time" />
-        <!-- Uninterpreted: list (axisvalues) of CARD32,
+        <!-- Uninterpreted: list (axisvalues) of INT32,
                             length is num_axes from GetDeviceMotionEvents -->
     </struct>
 
@@ -277,6 +286,7 @@ authorization from the authors.
         <field type="TIMESTAMP" name="start" />
         <field type="TIMESTAMP" name="stop" altenum="Time" />
         <field type="CARD8"     name="device_id" />
+        <pad bytes="3"/>
         <reply>
             <pad bytes="1" />
             <field type="CARD32" name="num_events" />
@@ -294,7 +304,10 @@ authorization from the authors.
         <pad bytes="3" />
         <reply>
             <pad bytes="1" />
-            <field type="CARD8" name="status" altenum="GrabStatus" />
+            <!-- only the following GrabStatus-values are valid here:
+                 "Success", "AlreadyGrabbed", and "Frozen"
+            -->
+            <field type="CARD8" name="status" enum="GrabStatus" />
             <pad bytes="23" />
         </reply>
     </request>
@@ -308,7 +321,10 @@ authorization from the authors.
         <pad bytes="1" />
         <reply>
             <pad bytes="1" />
-            <field type="CARD8" name="status" altenum="GrabStatus" />
+            <!-- only the following GrabStatus-values are valid here:
+                 "Success", "AlreadyGrabbed", and "Frozen"
+            -->
+            <field type="CARD8" name="status" enum="GrabStatus" />
             <pad bytes="23" />
         </reply>
     </request>
@@ -339,15 +355,20 @@ authorization from the authors.
     <request name="UngrabDevice" opcode="14">
         <field type="TIMESTAMP" name="time" altenum="Time" />
         <field type="CARD8"     name="device_id" />
+        <pad bytes="3" />
     </request>
 
     <!-- GrabDeviceKey -->
 
+    <enum name="ModifierDevice">
+       <item name="UseXKeyboard"><value>255</value></item> <!-- 0xff -->
+    </enum>
+
     <request name="GrabDeviceKey" opcode="15">
         <field type="WINDOW" name="grab_window" />
         <field type="CARD16" name="num_classes" />
         <field type="CARD16" name="modifiers" mask="ModMask" />
-        <field type="CARD8"  name="modifier_device" />
+        <field type="CARD8"  name="modifier_device" altenum="ModifierDevice" />
         <field type="CARD8"  name="grabbed_device" />
         <field type="CARD8"  name="key" altenum="Grab" />
         <field type="CARD8"  name="this_device_mode" enum="GrabMode" />
@@ -364,7 +385,7 @@ authorization from the authors.
     <request name="UngrabDeviceKey" opcode="16">
         <field type="WINDOW" name="grabWindow" />
         <field type="CARD16" name="modifiers" mask="ModMask" />
-        <field type="CARD8"  name="modifier_device" />
+        <field type="CARD8"  name="modifier_device" altenum="ModifierDevice" />
         <field type="CARD8"  name="key" altenum="Grab" />
         <field type="CARD8"  name="grabbed_device" />
     </request>
@@ -374,13 +395,13 @@ authorization from the authors.
     <request name="GrabDeviceButton" opcode="17">
         <field type="WINDOW" name="grab_window" />
         <field type="CARD8"  name="grabbed_device" />
-        <field type="CARD8"  name="modifier_device" />
+        <field type="CARD8"  name="modifier_device" altenum="ModifierDevice" />
         <field type="CARD16" name="num_classes" />
         <field type="CARD16" name="modifiers" mask="ModMask" />
         <field type="CARD8"  name="this_device_mode" enum="GrabMode" />
         <field type="CARD8"  name="other_device_mode" enum="GrabMode" />
         <field type="CARD8"  name="button" altenum="Grab" />
-        <field type="CARD8"  name="owner_events" />
+        <field type="BOOL"   name="owner_events" />
         <pad bytes="2" />
         <list type="EventClass" name="classes">
             <fieldref>num_classes</fieldref>
@@ -392,26 +413,28 @@ authorization from the authors.
     <request name="UngrabDeviceButton" opcode="18">
         <field type="WINDOW" name="grab_window" />
         <field type="CARD16" name="modifiers" mask="ModMask" />
-        <field type="CARD8"  name="modifier_device" />
+        <field type="CARD8"  name="modifier_device" altenum="ModifierDevice" />
         <field type="CARD8"  name="button" altenum="Grab" />
         <field type="CARD8"  name="grabbed_device" />
+        <pad bytes="3" />
     </request>
 
     <!-- AllowDeviceEvents -->
 
     <enum name="DeviceInputMode">
-        <item name="AsyncThisDevice" />
-        <item name="SyncThisDevice" />
-        <item name="ReplayThisDevice" />
-        <item name="AsyncOtherDevices" />
-        <item name="AsyncAll" />
-        <item name="SyncAll" />
+        <item name="AsyncThisDevice">   <value>0</value> </item>
+        <item name="SyncThisDevice">    <value>1</value> </item>
+        <item name="ReplayThisDevice">  <value>2</value> </item>
+        <item name="AsyncOtherDevices"> <value>3</value> </item>
+        <item name="AsyncAll">          <value>4</value> </item>
+        <item name="SyncAll">           <value>5</value> </item>
     </enum>
 
     <request name="AllowDeviceEvents" opcode="19">
         <field type="TIMESTAMP" name="time" altenum="Time" />
         <field type="CARD8"     name="mode" enum="DeviceInputMode" />
         <field type="CARD8"     name="device_id" />
+        <pad bytes="2" />
     </request>
 
     <!-- GetDeviceFocus -->
@@ -435,17 +458,18 @@ authorization from the authors.
         <field type="TIMESTAMP" name="time" altenum="Time" />
         <field type="CARD8"     name="revert_to" enum="InputFocus" />
         <field type="CARD8"     name="device_id" />
+        <pad bytes="2" />
     </request>
 
     <!-- GetFeedbackControl -->
 
     <enum name="FeedbackClass">
-        <item name="Keyboard" />
-        <item name="Pointer" />
-        <item name="String" />
-        <item name="Integer" />
-        <item name="Led" />
-        <item name="Bell" />
+        <item name="Keyboard"> <value>0</value> </item>
+        <item name="Pointer">  <value>1</value> </item>
+        <item name="String">   <value>2</value> </item>
+        <item name="Integer">  <value>3</value> </item>
+        <item name="Led">      <value>4</value> </item>
+        <item name="Bell">     <value>5</value> </item>
     </enum>
 
     <struct name="KbdFeedbackState">
@@ -517,6 +541,12 @@ authorization from the authors.
         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
         <field type="CARD8"  name="feedback_id" />
         <field type="CARD16" name="len" />
+        <list type="CARD8" name="uninterpreted_data">
+            <op op="-">
+                <fieldref>len</fieldref>
+                <value>4</value>
+            </op>
+        </list>
     </struct>
 
     <request name="GetFeedbackControl" opcode="22">
@@ -526,7 +556,9 @@ authorization from the authors.
             <pad bytes="1" />
             <field type="CARD16" name="num_feedbacks" />
             <pad bytes="22" />
-            <!-- Uninterpreted: list (feedbacks) of FeedbackState structures -->
+            <list type="FeedbackState" name="feedbacks">
+                <fieldref>num_feedbacks</fieldref>
+            </list>
         </reply>
     </request>
 
@@ -596,13 +628,36 @@ authorization from the authors.
         <field type="CARD8"  name="class_id" enum="FeedbackClass" />
         <field type="CARD8"  name="feedback_id" />
         <field type="CARD16" name="len" />
+        <list type="CARD8" name="uninterpreted_data">
+            <op op="-">
+                <fieldref>len</fieldref>
+                <value>4</value>
+            </op>
+        </list>
     </struct>
 
+    <enum name="ChangeFeedbackControlMask">
+        <item name="KeyClickPercent">  <bit>0</bit> </item> <!-- 0x01 -->
+        <item name="Percent">          <bit>1</bit> </item> <!-- 0x02 -->
+        <item name="Pitch">            <bit>2</bit> </item> <!-- 0x04 -->
+        <item name="Duration">         <bit>3</bit> </item> <!-- 0x08 -->
+        <item name="Led">              <bit>4</bit> </item> <!-- 0x10 -->
+        <item name="LedMode">          <bit>5</bit> </item> <!-- 0x20 -->
+        <item name="Key">              <bit>6</bit> </item> <!-- 0x40 -->
+        <item name="AutoRepeatMode">   <bit>7</bit> </item> <!-- 0x80 -->
+        <item name="String">           <bit>0</bit> </item> <!-- 0x01 -->
+        <item name="Integer">          <bit>0</bit> </item> <!-- 0x01 -->
+        <item name="AccelNum">         <bit>0</bit> </item> <!-- 0x01 -->
+        <item name="AccelDenom">       <bit>1</bit> </item> <!-- 0x02 -->
+        <item name="Threshold">        <bit>2</bit> </item> <!-- 0x04 -->
+    </enum>
+
     <request name="ChangeFeedbackControl" opcode="23">
-        <field type="CARD32"      name="mask" />
+        <field type="CARD32"      name="mask" mask="ChangeFeedbackControlMask" />
         <field type="CARD8"       name="device_id" />
         <field type="CARD8"       name="feedback_id" />
-        <!-- Uninterpreted: field (feedback) of FeedbackCtl structure -->
+        <pad bytes="2" />
+        <field type="FeedbackCtl" name="feedback" />
     </request>
 
     <!-- GetDeviceKeyMapping -->
@@ -611,6 +666,7 @@ authorization from the authors.
         <field type="CARD8"   name="device_id" />
         <field type="KeyCode" name="first_keycode" />
         <field type="CARD8"   name="count" />
+        <pad bytes="1" />
         <reply>
             <pad bytes="1" />
             <field type="CARD8" name="keysyms_per_keycode" />
@@ -660,7 +716,7 @@ authorization from the authors.
     <request name="SetDeviceModifierMapping" opcode="27">
         <field type="CARD8" name="device_id" />
         <field type="CARD8" name="keycodes_per_modifier" />
-        <pad bytes="1" />
+        <pad bytes="2" />
         <list type="CARD8" name="keymaps">
             <op op="*">
                 <fieldref>keycodes_per_modifier</fieldref>
@@ -686,6 +742,7 @@ authorization from the authors.
             <list type="CARD8" name="map">
                 <fieldref>map_size</fieldref>
             </list>
+            <pad align="4" />
         </reply>
     </request>
 
@@ -727,11 +784,16 @@ authorization from the authors.
         </list>
     </struct>
 
+    <enum name="ValuatorStateModeMask">
+        <item name="DeviceModeAbsolute"> <bit>0</bit> </item>
+        <item name="OutOfProximity">     <bit>1</bit> </item>
+    </enum>
+
     <struct name="ValuatorState">
         <field type="CARD8" name="class_id" enum="InputClass" />
         <field type="CARD8" name="len" />
         <field type="CARD8" name="num_valuators" />
-        <field type="CARD8" name="mode" />
+        <field type="CARD8" name="mode" mask="ValuatorStateModeMask" />
         <list type="CARD32" name="valuators">
             <fieldref>num_valuators</fieldref>
         </list>
@@ -741,6 +803,13 @@ authorization from the authors.
         <field type="CARD8" name="class_id" enum="InputClass" />
         <field type="CARD8" name="len" />
         <field type="CARD8" name="num_items" />
+        <pad bytes="1" />
+        <list type="CARD8" name="uninterpreted_data">
+            <op op="-">
+                <fieldref>len</fieldref>
+                <value>4</value>
+            </op>
+        </list>
     </struct>
 
     <request name="QueryDeviceState" opcode="30">
@@ -750,7 +819,9 @@ authorization from the authors.
             <pad bytes="1" />
             <field type="CARD8" name="num_classes" />
             <pad bytes="23" />
-            <!-- Uninterpreted: list (classes) of InputState structures -->
+            <list type="InputState" name="classes">
+                <fieldref>num_classes</fieldref>
+            </list>
         </reply>
     </request>
 
@@ -867,6 +938,12 @@ authorization from the authors.
     <struct name="DeviceState">
         <field type="CARD16" name="control_id" enum="DeviceControl" />
         <field type="CARD16" name="len" />
+        <list type="CARD8" name="uninterpreted_data">
+            <op op="-">
+                <fieldref>len</fieldref>
+                <value>4</value>
+            </op>
+        </list>
     </struct>
 
     <request name="GetDeviceControl" opcode="34">
@@ -877,7 +954,7 @@ authorization from the authors.
             <pad bytes="1" />
             <field type="CARD8" name="status" altenum="GrabStatus" />
             <pad bytes="23" />
-            <!-- Uninterpreted: field (control) of DeviceState structure -->
+            <field type="DeviceState" name="control" />
         </reply>
     </request>
 
@@ -888,6 +965,7 @@ authorization from the authors.
         <field type="CARD16" name="len" />
         <field type="CARD8"  name="first_valuator" />
         <field type="CARD8"  name="num_valuators" />
+        <pad bytes="2" />
         <list type="CARD32"  name="resolution_values">
             <fieldref>num_valuators</fieldref>
         </list>
@@ -934,13 +1012,19 @@ authorization from the authors.
     <struct name="DeviceCtl">
         <field type="CARD16" name="control_id" enum="DeviceControl" />
         <field type="CARD16" name="len" />
+        <list type="CARD8" name="uninterpreted_data">
+            <op op="-">
+                <fieldref>len</fieldref>
+                <value>4</value>
+            </op>
+        </list>
     </struct>
 
     <request name="ChangeDeviceControl" opcode="35">
         <field type="CARD16" name="control_id" enum="DeviceControl" />
         <field type="CARD8"  name="device_id" />
         <pad bytes="1" />
-        <!-- Uninterpreted: field (control) of DeviceCtl structure -->
+        <field type="DeviceCtl" name="control" />
         <reply>
             <pad bytes="1" />
             <field type="CARD8" name="status" altenum="GrabStatus" />
@@ -968,7 +1052,7 @@ authorization from the authors.
     <!-- ChangeDeviceProperty -->
 
     <enum name="PropertyFormat">
-        <item name="8Bits">  <value> 8</value> </item>
+        <item name="8Bits">  <value>8</value> </item>
         <item name="16Bits"> <value>16</value> </item>
         <item name="32Bits"> <value>32</value> </item>
     </enum>
@@ -992,12 +1076,14 @@ authorization from the authors.
                 <list type="CARD8" name="data8">
                     <fieldref>num_items</fieldref>
                 </list>
+                <pad align="4" />
             </bitcase>
             <bitcase>
                 <enumref ref="PropertyFormat">16Bits</enumref>
                 <list type="CARD16" name="data16">
                     <fieldref>num_items</fieldref>
                 </list>
+                <pad align="4" />
             </bitcase>
             <bitcase>
                 <enumref ref="PropertyFormat">32Bits</enumref>
@@ -1045,12 +1131,14 @@ authorization from the authors.
                     <list type="CARD8" name="data8">
                         <fieldref>num_items</fieldref>
                     </list>
+                    <pad align="4" />
                 </bitcase>
                 <bitcase>
                     <enumref ref="PropertyFormat">16Bits</enumref>
                     <list type="CARD16" name="data16">
                         <fieldref>num_items</fieldref>
                     </list>
+                    <pad align="4" />
                 </bitcase>
                 <bitcase>
                     <enumref ref="PropertyFormat">32Bits</enumref>
@@ -1067,8 +1155,8 @@ authorization from the authors.
     <!-- XIQueryPointer -->
 
     <enum name="Device">
-        <item name="All" />
-        <item name="AllMaster" />
+        <item name="All">       <value>0</value> </item>
+        <item name="AllMaster"> <value>1</value> </item>
     </enum>
 
     <struct name="GroupInfo">
@@ -1097,7 +1185,7 @@ authorization from the authors.
             <field type="FP1616"       name="root_y" />
             <field type="FP1616"       name="win_x" />
             <field type="FP1616"       name="win_y" />
-            <field type="CARD8"        name="same_screen" />
+            <field type="BOOL"         name="same_screen" />
             <pad bytes="1" />
             <field type="CARD16"       name="buttons_len" />
             <field type="ModifierInfo" name="mods" />
@@ -1150,11 +1238,12 @@ authorization from the authors.
         <field type="CARD16" name="type" enum="HierarchyChangeType" />
         <field type="CARD16" name="len" />
         <field type="CARD16" name="name_len" />
-        <field type="CARD8"  name="send_core" />
-        <field type="CARD8"  name="enable" />
+        <field type="BOOL"   name="send_core" />
+        <field type="BOOL"   name="enable" />
         <list type="char" name="name">
             <fieldref>name_len</fieldref>
         </list>
+        <pad align="4" />
     </struct>
 
     <struct name="RemoveMaster">
@@ -1184,11 +1273,23 @@ authorization from the authors.
     <struct name="HierarchyChange">
         <field type="CARD16" name="type" enum="HierarchyChangeType" />
         <field type="CARD16" name="len" />
+        <list type="CARD8" name="uninterpreted_data">
+            <op op="-">
+                <op op="*">
+                    <fieldref>len</fieldref>
+                    <value>4</value>
+                </op>
+                <value>4</value>
+            </op>
+        </list>
     </struct>
 
     <request name="XIChangeHierarchy" opcode="43">
         <field type="CARD8" name="num_changes" />
-        <!-- Uninterpreted: list (changes) of HierarchyChange structures -->
+        <pad bytes="3" />
+        <list type="HierarchyChange" name="changes">
+            <fieldref>num_changes</fieldref>
+        </list>
     </request>
 
     <!-- XISetClientPointer -->
@@ -1214,10 +1315,42 @@ authorization from the authors.
 
     <!-- XISelectEvents -->
 
+    <enum name="XIEventMask">
+        <item name="DeviceChanged">    <bit>1</bit> </item>
+        <item name="KeyPress">         <bit>2</bit> </item>
+        <item name="KeyRelease">       <bit>3</bit> </item>
+        <item name="ButtonPress">      <bit>4</bit> </item>
+        <item name="ButtonRelease">    <bit>5</bit> </item>
+        <item name="Motion">           <bit>6</bit> </item>
+        <item name="Enter">            <bit>7</bit> </item>
+        <item name="Leave">            <bit>8</bit> </item>
+        <item name="FocusIn">          <bit>9</bit> </item>
+        <item name="FocusOut">         <bit>10</bit> </item>
+        <item name="Hierarchy">        <bit>11</bit> </item>
+        <item name="Property">         <bit>12</bit> </item>
+        <!-- ⋅⋅⋅ Events (v2.1) ⋅⋅⋅ -->
+        <item name="RawKeyPress">      <bit>13</bit> </item>
+        <item name="RawKeyRelease">    <bit>14</bit> </item>
+        <item name="RawButtonPress">   <bit>15</bit> </item>
+        <item name="RawButtonRelease"> <bit>16</bit> </item>
+        <item name="RawMotion">        <bit>17</bit> </item>
+        <!-- ⋅⋅⋅ Events (v2.2) ⋅⋅⋅ -->
+        <item name="TouchBegin">       <bit>18</bit> </item>
+        <item name="TouchUpdate">      <bit>19</bit> </item>
+        <item name="TouchEnd">         <bit>20</bit> </item>
+        <item name="TouchOwnership">   <bit>21</bit> </item>
+        <item name="RawTouchBegin">    <bit>22</bit> </item>
+        <item name="RawTouchUpdate">   <bit>23</bit> </item>
+        <item name="RawTouchEnd">      <bit>24</bit> </item>
+        <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅ -->
+        <item name="BarrierHit">       <bit>25</bit> </item>
+        <item name="BarrierLeave">     <bit>26</bit> </item>
+    </enum>
+
     <struct name="EventMask">
         <field type="DeviceId" name="deviceid" altenum="Device" />
         <field type="CARD16"   name="mask_len" />
-        <list type="CARD32" name="mask"> <!-- set of EventMaskBit -->
+        <list type="CARD32" name="mask" mask="XIEventMask">
             <fieldref>mask_len</fieldref>
         </list>
     </struct>
@@ -1314,7 +1447,7 @@ authorization from the authors.
         <field type="CARD16"   name="number" />
         <field type="CARD16"   name="scroll_type" enum="ScrollType" />
         <pad bytes="2" />
-        <field type="CARD32"   name="flags" enum="ScrollFlags" />
+        <field type="CARD32"   name="flags" mask="ScrollFlags" />
         <field type="FP3232"   name="increment" />
     </struct>
 
@@ -1345,31 +1478,32 @@ authorization from the authors.
         <field type="CARD16"   name="len" />
         <field type="DeviceId" name="sourceid" />
         <pad bytes="2" />
+        <list type="CARD8" name="uninterpreted_data">
+            <op op="-">
+                <op op="*">
+                    <fieldref>len</fieldref>
+                    <value>4</value>
+                </op>
+                <value>8</value>
+            </op>
+        </list>
     </struct>
 
     <struct name="XIDeviceInfo">
         <field type="DeviceId" name="deviceid" altenum="Device" />
-        <field type="CARD16"   name="type" altenum="DeviceType" />
+        <field type="CARD16"   name="type" enum="DeviceType" />
         <field type="DeviceId" name="attachment" altenum="Device" />
         <field type="CARD16"   name="num_classes" />
         <field type="CARD16"   name="name_len" />
         <field type="BOOL"     name="enabled" />
         <pad bytes="1" />
         <list type="char" name="name">
-            <!-- name_len is without padding, so we've to pad on our own,
-                 auto align pad after the list would be helpfull -->
-            <op op="*">
-                <op op="/">
-                    <op op="+">
-                        <fieldref>name_len</fieldref>
-                        <value>3</value>
-                    </op>
-                    <value>4</value>
-                </op>
-                <value>4</value>
-            </op>
+            <fieldref>name_len</fieldref>
+        </list>
+        <pad align="4" />
+        <list type="DeviceClass" name="classes">
+            <fieldref>num_classes</fieldref>
         </list>
-        <!-- Uninterpreted: list (classes) of DeviceClass structures -->
     </struct>
 
     <request name="XIQueryDevice" opcode="48">
@@ -1409,8 +1543,8 @@ authorization from the authors.
     <!-- XIGrabDevice -->
 
     <enum name="GrabOwner">
-        <item name="NoOwner" />
-        <item name="Owner" />
+        <item name="NoOwner"> <value>0</value> </item>
+        <item name="Owner">   <value>1</value> </item>
     </enum>
 
     <request name="XIGrabDevice" opcode="51">
@@ -1444,14 +1578,14 @@ authorization from the authors.
     <!-- XIAllowEvents -->
 
     <enum name="EventMode">
-        <item name="AsyncDevice" />
-        <item name="SyncDevice" />
-        <item name="ReplayDevice" />
-        <item name="AsyncPairedDevice" />
-        <item name="AsyncPair" />
-        <item name="SyncPair" />
-        <item name="AcceptTouch" />
-        <item name="RejectTouch" />
+        <item name="AsyncDevice">       <value>0</value> </item>
+        <item name="SyncDevice">        <value>1</value> </item>
+        <item name="ReplayDevice">      <value>2</value> </item>
+        <item name="AsyncPairedDevice"> <value>3</value> </item>
+        <item name="AsyncPair">         <value>4</value> </item>
+        <item name="SyncPair">          <value>5</value> </item>
+        <item name="AcceptTouch">       <value>6</value> </item>
+        <item name="RejectTouch">       <value>7</value> </item>
     </enum>
 
     <request name="XIAllowEvents" opcode="53">
@@ -1466,17 +1600,17 @@ authorization from the authors.
     <!-- XIPassiveGrabDevice -->
 
     <enum name="GrabMode22">
-        <item name="Sync" />
-        <item name="Async" />
-        <item name="Touch" />
+        <item name="Sync">  <value>0</value> </item>
+        <item name="Async"> <value>1</value> </item>
+        <item name="Touch"> <value>2</value> </item>
     </enum>
 
     <enum name="GrabType">
-        <item name="Button" />
-        <item name="Keycode" />
-        <item name="Enter" />
-        <item name="FocusIn" />
-        <item name="TouchBegin" />
+        <item name="Button">     <value>0</value> </item>
+        <item name="Keycode">    <value>1</value> </item>
+        <item name="Enter">      <value>2</value> </item>
+        <item name="FocusIn">    <value>3</value> </item>
+        <item name="TouchBegin"> <value>4</value> </item>
     </enum>
 
     <enum name="ModifierMask">
@@ -1490,6 +1624,7 @@ authorization from the authors.
     </struct>
 
     <request name="XIPassiveGrabDevice" opcode="54">
+        <!-- field "time" is unused and its value is undefined -->
         <field type="TIMESTAMP" name="time" altenum="Time" />
         <field type="WINDOW"    name="grab_window" />
         <field type="CURSOR"    name="cursor" />
@@ -1619,12 +1754,14 @@ authorization from the authors.
                     <list type="CARD8" name="data8">
                         <fieldref>num_items</fieldref>
                     </list>
+                    <pad align="4" />
                 </bitcase>
                 <bitcase>
                     <enumref ref="PropertyFormat">16Bits</enumref>
                     <list type="CARD16" name="data16">
                         <fieldref>num_items</fieldref>
                     </list>
+                    <pad align="4" />
                 </bitcase>
                 <bitcase>
                     <enumref ref="PropertyFormat">32Bits</enumref>
@@ -1657,7 +1794,7 @@ authorization from the authors.
     <struct name="BarrierReleasePointerInfo">
         <field type="DeviceId" name="deviceid" />
         <pad bytes="2" />
-        <field type="Barrier"  name="barrier" />
+        <field type="BARRIER"  name="barrier" />
         <field type="CARD32"   name="eventid" />
     </struct>
 
@@ -1683,6 +1820,12 @@ authorization from the authors.
         </list>
     </event>
 
+    <!-- the highest bit in a CARD8 device_id-field indicates that more
+       events will follow -->
+    <enum name="MoreEventsMask">
+       <item name="MoreEvents"> <bit>7</bit> </item> <!-- 0x80 -->
+    </enum>
+
     <event name="DeviceKeyPress" number="1">
         <field type="BYTE"      name="detail" />
         <field type="TIMESTAMP" name="time" />
@@ -1693,9 +1836,9 @@ authorization from the authors.
         <field type="INT16"     name="root_y" />
         <field type="INT16"     name="event_x" />
         <field type="INT16"     name="event_y" />
-        <field type="CARD16"    name="state" />
+        <field type="CARD16"    name="state" mask="KeyButMask" />
         <field type="BOOL"      name="same_screen" />
-        <field type="CARD8"     name="device_id" />
+        <field type="CARD8"     name="device_id" altmask="MoreEventsMask" />
     </event>
 
     <eventcopy name="DeviceKeyRelease"    number="2" ref="DeviceKeyPress" />
@@ -1704,10 +1847,10 @@ authorization from the authors.
     <eventcopy name="DeviceMotionNotify"  number="5" ref="DeviceKeyPress" />
 
     <event name="DeviceFocusIn" number="6">
-        <field type="BYTE"      name="detail" enum="NotifyDetail" />
+        <field type="BYTE"      name="detail" enum="xproto:NotifyDetail" />
         <field type="TIMESTAMP" name="time" />
         <field type="WINDOW"    name="window" />
-        <field type="BYTE"      name="mode" enum="NotifyMode" />
+        <field type="BYTE"      name="mode" enum="xproto:NotifyMode" />
         <field type="CARD8"     name="device_id" />
         <pad bytes="18" />
     </event>
@@ -1716,13 +1859,25 @@ authorization from the authors.
     <eventcopy name="ProximityIn"    number="8" ref="DeviceKeyPress" />
     <eventcopy name="ProximityOut"   number="9" ref="DeviceKeyPress" />
 
+    <enum name="ClassesReportedMask">
+        <item name="OutOfProximity">     <bit>7</bit> </item> <!-- 0x80 -->
+            <!-- 0 = InProxmity, 1 = OutOfProximity -->
+
+        <item name="DeviceModeAbsolute"> <bit>6</bit> </item> <!-- 0x40 -->
+            <!-- 0 = Relative, 1 = Absolute -->
+
+        <item name="ReportingValuators"> <bit>2</bit> </item> <!-- 0x04 -->
+        <item name="ReportingButtons">   <bit>1</bit> </item> <!-- 0x02 -->
+        <item name="ReportingKeys">      <bit>0</bit> </item> <!-- 0x01 -->
+    </enum>
+
     <event name="DeviceStateNotify" number="10">
-        <field type="BYTE"      name="device_id" />
+        <field type="BYTE"      name="device_id" altmask="MoreEventsMask" />
         <field type="TIMESTAMP" name="time" />
         <field type="CARD8"     name="num_keys" />
         <field type="CARD8"     name="num_buttons" />
         <field type="CARD8"     name="num_valuators" />
-        <field type="CARD8"     name="classes_reported" />
+        <field type="CARD8"     name="classes_reported" mask="ClassesReportedMask" />
         <list type="CARD8"      name="buttons">
             <value>4</value>
         </list>
@@ -1736,7 +1891,7 @@ authorization from the authors.
 
     <event name="DeviceMappingNotify" number="11">
         <field type="BYTE"    name="device_id" />
-        <field type="CARD8"   name="request" />
+        <field type="CARD8"   name="request" enum="Mapping" />
         <field type="KeyCode" name="first_keycode" />
         <field type="CARD8"   name="count" />
         <pad bytes="1" />
@@ -1744,22 +1899,27 @@ authorization from the authors.
         <pad bytes="20" />
     </event>
 
+    <enum name="ChangeDevice">
+       <item name="NewPointer">  <value>0</value> </item>
+       <item name="NewKeyboard"> <value>1</value> </item>
+    </enum>
+
     <event name="ChangeDeviceNotify" number="12">
         <field type="BYTE"      name="device_id" />
         <field type="TIMESTAMP" name="time" />
-        <field type="CARD8"     name="request" />
+        <field type="CARD8"     name="request" enum="ChangeDevice" />
         <pad bytes="23" />
     </event>
 
     <event name="DeviceKeyStateNotify" number="13">
-        <field type="BYTE" name="device_id" />
+        <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
         <list type="CARD8" name="keys">
             <value>28</value>
         </list>
     </event>
 
     <event name="DeviceButtonStateNotify" number="14">
-        <field type="BYTE" name="device_id" />
+        <field type="BYTE" name="device_id" altmask="MoreEventsMask" />
         <list type="CARD8" name="buttons">
             <value>28</value>
         </list>
@@ -1768,12 +1928,12 @@ authorization from the authors.
     <!-- ⋅⋅⋅ Events (v1.4) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
 
     <enum name="DeviceChange">
-        <item name="Added" />
-        <item name="Removed" />
-        <item name="Enabled" />
-        <item name="Disabled" />
-        <item name="Unrecoverable" />
-        <item name="ControlChanged" />
+        <item name="Added">          <value>0</value> </item>
+        <item name="Removed">        <value>1</value> </item>
+        <item name="Enabled">        <value>2</value> </item>
+        <item name="Disabled">       <value>3</value> </item>
+        <item name="Unrecoverable">  <value>4</value> </item>
+        <item name="ControlChanged"> <value>5</value> </item>
     </enum>
 
     <event name="DevicePresenceNotify" number="15">
@@ -1893,23 +2053,23 @@ authorization from the authors.
     <eventcopy name="Motion"        number="6" ref="ButtonPress" />
 
     <enum name="NotifyMode">
-        <item name="Normal" />
-        <item name="Grab" />
-        <item name="Ungrab" />
-        <item name="WhileGrabbed" />
-        <item name="PassiveGrab" />
-        <item name="PassiveUngrab" />
+        <item name="Normal">        <value>0</value> </item>
+        <item name="Grab">          <value>1</value> </item>
+        <item name="Ungrab">        <value>2</value> </item>
+        <item name="WhileGrabbed">  <value>3</value> </item>
+        <item name="PassiveGrab">   <value>4</value> </item>
+        <item name="PassiveUngrab"> <value>5</value> </item>
     </enum>
 
     <enum name="NotifyDetail">
-        <item name="Ancestor" />
-        <item name="Virtual" />
-        <item name="Inferior" />
-        <item name="Nonlinear" />
-        <item name="NonlinearVirtual" />
-        <item name="Pointer" />
-        <item name="PointerRoot" />
-        <item name="None" />
+        <item name="Ancestor">         <value>0</value> </item>
+        <item name="Virtual">          <value>1</value> </item>
+        <item name="Inferior">         <value>2</value> </item>
+        <item name="Nonlinear">        <value>3</value> </item>
+        <item name="NonlinearVirtual"> <value>4</value> </item>
+        <item name="Pointer">          <value>5</value> </item>
+        <item name="PointerRoot">      <value>6</value> </item>
+        <item name="None">             <value>7</value> </item>
     </enum>
 
     <event name="Enter" number="7" xge="true">
@@ -1917,8 +2077,8 @@ authorization from the authors.
         <field type="TIMESTAMP" name="time" altenum="Time" />
         <!-- event specific fields -->
         <field type="DeviceId"  name="sourceid" altenum="Device" />
-        <field type="CARD8"     name="mode" enum="NotifyMode" />
-        <field type="CARD8"     name="detail" enum="NotifyDetail" />
+        <field type="CARD8"     name="mode" enum="xinput:NotifyMode" />
+        <field type="CARD8"     name="detail" enum="xinput:NotifyDetail" />
         <field type="WINDOW"    name="root" />
         <field type="WINDOW"    name="event" />
         <field type="WINDOW"    name="child" />
@@ -1927,8 +2087,8 @@ authorization from the authors.
         <field type="FP1616"       name="root_y" />
         <field type="FP1616"       name="event_x" />
         <field type="FP1616"       name="event_y" />
-        <field type="CARD8"        name="same_screen" />
-        <field type="CARD8"        name="focus" />
+        <field type="BOOL"         name="same_screen" />
+        <field type="BOOL"         name="focus" />
         <field type="CARD16"       name="buttons_len" />
         <field type="ModifierInfo" name="mods" />
         <field type="GroupInfo"    name="group" />
@@ -1975,9 +2135,9 @@ authorization from the authors.
     </event>
 
     <enum name="PropertyFlag">
-        <item name="Deleted" />
-        <item name="Created" />
-        <item name="Modified" />
+        <item name="Deleted">  <value>0</value> </item>
+        <item name="Created">  <value>1</value> </item>
+        <item name="Modified"> <value>2</value> </item>
     </enum>
 
     <event name="Property" number="12" xge="true">
@@ -2077,7 +2237,7 @@ authorization from the authors.
 
     <enum name="TouchOwnershipFlags">
         <!-- XXX: Remove this enum? Currently, no flag is defined. -->
-        <item name="None" />
+        <item name="None"> <value>0</value> </item>
     </enum>
 
     <event name="TouchOwnership" number="21" xge="true">
@@ -2119,6 +2279,11 @@ authorization from the authors.
 
     <!-- ⋅⋅⋅ Events (v2.3) ⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅ -->
 
+    <enum name="BarrierFlags">
+       <item name="PointerReleased"> <bit>0</bit> </item>
+       <item name="DeviceIsGrabbed"> <bit>1</bit> </item>
+    </enum>
+
     <event name="BarrierHit" number="25" xge="true">
         <field type="DeviceId"  name="deviceid" altenum="Device" />
         <field type="TIMESTAMP" name="time" altenum="Time" />
@@ -2126,10 +2291,10 @@ authorization from the authors.
         <field type="CARD32"    name="eventid" />
         <field type="WINDOW"    name="root" />
         <field type="WINDOW"    name="event" />
-        <field type="Barrier"   name="barrier" />
+        <field type="BARRIER"   name="barrier" />
         <!-- 32 byte boundary -->
         <field type="CARD32"    name="dtime" />
-        <field type="CARD32"    name="flags" />
+        <field type="CARD32"    name="flags" mask="BarrierFlags" />
         <field type="DeviceId"  name="sourceid" altenum="Device" />
         <pad bytes="2" />
         <field type="FP1616"    name="root_x" />