Add XML description for the Generic Event extension.
[free-sw/xcb/proto] / src / xproto.xml
index 7b6f4d5..6295dae 100644 (file)
@@ -26,7 +26,241 @@ sale, use or other dealings in this Software without prior written
 authorization from the authors.
 -->
 <xcb header="xproto">
-  <!-- Core event and error types -->
+  <!-- Core protocol types -->
+  
+  <struct name="CHAR2B">
+    <field type="CARD8" name="byte1" />
+    <field type="CARD8" name="byte2" />
+  </struct>
+  
+  <xidtype name="WINDOW" />
+  
+  <xidtype name="PIXMAP" />
+  
+  <xidtype name="CURSOR" />
+  
+  <xidtype name="FONT" />
+  
+  <xidtype name="GCONTEXT" />
+  
+  <xidtype name="COLORMAP" />
+  
+  <xidtype name="ATOM" />
+  
+  <xidunion name="DRAWABLE">
+    <type>WINDOW</type>
+    <type>PIXMAP</type>
+  </xidunion>
+  
+  <xidunion name="FONTABLE">
+    <type>FONT</type>
+    <type>GCONTEXT</type>
+  </xidunion>
+  
+  <typedef oldname="CARD32" newname="VISUALID" />
+
+  <typedef oldname="CARD32" newname="TIMESTAMP" />
+
+  <typedef oldname="CARD32" newname="KEYSYM" />
+
+  <typedef oldname="CARD8" newname="KEYCODE" />
+
+  <typedef oldname="CARD8" newname="BUTTON" />
+
+  <struct name="POINT">
+    <field type="INT16" name="x" />
+    <field type="INT16" name="y" />
+  </struct>
+
+  <struct name="RECTANGLE">
+    <field type="INT16" name="x" />
+    <field type="INT16" name="y" />
+    <field type="CARD16" name="width" />
+    <field type="CARD16" name="height" />
+  </struct>
+
+  <struct name="ARC">
+    <field type="INT16" name="x" />
+    <field type="INT16" name="y" />
+    <field type="CARD16" name="width" />
+    <field type="CARD16" name="height" />
+    <field type="INT16" name="angle1" />
+    <field type="INT16" name="angle2" />
+  </struct>
+
+  <!-- Connection setup-related types -->
+
+  <struct name="FORMAT">
+    <field type="CARD8" name="depth" />
+    <field type="CARD8" name="bits_per_pixel" />
+    <field type="CARD8" name="scanline_pad" />
+    <pad bytes="5" />
+  </struct>
+
+  <enum name="VisualClass">
+    <item name="StaticGray"> <value>0</value></item>
+    <item name="GrayScale">  <value>1</value></item>
+    <item name="StaticColor"><value>2</value></item>
+    <item name="PseudoColor"><value>3</value></item>
+    <item name="TrueColor">  <value>4</value></item>
+    <item name="DirectColor"><value>5</value></item>
+  </enum>
+
+  <struct name="VISUALTYPE">
+    <field type="VISUALID" name="visual_id" />
+    <field type="CARD8" name="class" enum="VisualClass" />
+    <field type="CARD8" name="bits_per_rgb_value" />
+    <field type="CARD16" name="colormap_entries" />
+    <field type="CARD32" name="red_mask" />
+    <field type="CARD32" name="green_mask" />
+    <field type="CARD32" name="blue_mask" />
+    <pad bytes="4" />
+  </struct>
+
+  <struct name="DEPTH">
+    <field type="CARD8" name="depth" />
+    <pad bytes="1" />
+    <field type="CARD16" name="visuals_len" />
+    <pad bytes="4" />
+    <list type="VISUALTYPE" name="visuals">
+      <fieldref>visuals_len</fieldref>
+    </list>
+  </struct>
+
+  <enum name="EventMask">
+    <item name="NoEvent">           <value>0</value></item>
+    <item name="KeyPress">            <bit>0</bit></item>
+    <item name="KeyRelease">          <bit>1</bit></item>
+    <item name="ButtonPress">         <bit>2</bit></item>
+    <item name="ButtonRelease">       <bit>3</bit></item>
+    <item name="EnterWindow">         <bit>4</bit></item>
+    <item name="LeaveWindow">         <bit>5</bit></item>
+    <item name="PointerMotion">       <bit>6</bit></item>
+    <item name="PointerMotionHint">   <bit>7</bit></item>
+    <item name="Button1Motion">       <bit>8</bit></item>
+    <item name="Button2Motion">       <bit>9</bit></item>
+    <item name="Button3Motion">       <bit>10</bit></item>
+    <item name="Button4Motion">       <bit>11</bit></item>
+    <item name="Button5Motion">       <bit>12</bit></item>
+    <item name="ButtonMotion">        <bit>13</bit></item>
+    <item name="KeymapState">         <bit>14</bit></item>
+    <item name="Exposure">            <bit>15</bit></item>
+    <item name="VisibilityChange">    <bit>16</bit></item>
+    <item name="StructureNotify">     <bit>17</bit></item>
+    <item name="ResizeRedirect">      <bit>18</bit></item>
+    <item name="SubstructureNotify">  <bit>19</bit></item>
+    <item name="SubstructureRedirect"><bit>20</bit></item>
+    <item name="FocusChange">         <bit>21</bit></item>
+    <item name="PropertyChange">      <bit>22</bit></item>
+    <item name="ColorMapChange">      <bit>23</bit></item>
+    <item name="OwnerGrabButton">     <bit>24</bit></item>
+  </enum>
+
+  <enum name="BackingStore">
+    <item name="NotUseful"> <value>0</value></item>
+    <item name="WhenMapped"><value>1</value></item>
+    <item name="Always">    <value>2</value></item>
+  </enum>
+
+  <struct name="SCREEN">
+    <field type="WINDOW" name="root" />
+    <field type="COLORMAP" name="default_colormap" />
+    <field type="CARD32" name="white_pixel" />
+    <field type="CARD32" name="black_pixel" />
+    <field type="CARD32" name="current_input_masks" mask="EventMask" />
+    <field type="CARD16" name="width_in_pixels" />
+    <field type="CARD16" name="height_in_pixels" />
+    <field type="CARD16" name="width_in_millimeters" />
+    <field type="CARD16" name="height_in_millimeters" />
+    <field type="CARD16" name="min_installed_maps" />
+    <field type="CARD16" name="max_installed_maps" />
+    <field type="VISUALID" name="root_visual" />
+    <field type="BYTE" name="backing_stores" enum="BackingStore" />
+    <field type="BOOL" name="save_unders" />
+    <field type="CARD8" name="root_depth" />
+    <field type="CARD8" name="allowed_depths_len" />
+    <list type="DEPTH" name="allowed_depths">
+      <fieldref>allowed_depths_len</fieldref>
+    </list>
+  </struct>
+
+  <struct name="SetupRequest">
+    <field type="CARD8" name="byte_order" />
+    <pad bytes="1" />
+    <field type="CARD16" name="protocol_major_version" />
+    <field type="CARD16" name="protocol_minor_version" />
+    <field type="CARD16" name="authorization_protocol_name_len" />
+    <field type="CARD16" name="authorization_protocol_data_len" />
+    <pad bytes="2" />
+    <list type="char" name="authorization_protocol_name">
+      <fieldref>authorization_protocol_name_len</fieldref>
+    </list>
+    <list type="char" name="authorization_protocol_data">
+      <fieldref>authorization_protocol_data_len</fieldref>
+    </list>
+  </struct>
+
+  <struct name="SetupFailed">
+    <field type="CARD8" name="status" /> <!-- always 0 -> Failed -->
+    <field type="CARD8" name="reason_len" />
+    <field type="CARD16" name="protocol_major_version" />
+    <field type="CARD16" name="protocol_minor_version" />
+    <field type="CARD16" name="length" />
+    <list type="char" name="reason">
+      <fieldref>reason_len</fieldref>
+    </list>
+  </struct>
+
+  <struct name="SetupAuthenticate">
+    <field type="CARD8" name="status" /> <!-- always 2 -> Authenticate -->
+    <pad bytes="5" />
+    <field type="CARD16" name="length" />
+    <list type="char" name="reason">
+      <op op="*">
+        <fieldref>length</fieldref>
+        <value>4</value>
+      </op>
+    </list>
+  </struct>
+
+  <enum name="ImageOrder">
+    <item name="LSBFirst"><value>0</value></item>
+    <item name="MSBFirst"><value>1</value></item>
+  </enum>
+
+  <struct name="Setup">
+    <field type="CARD8" name="status" /> <!-- always 1 -> Success -->
+    <pad bytes="1" />
+    <field type="CARD16" name="protocol_major_version" />
+    <field type="CARD16" name="protocol_minor_version" />
+    <field type="CARD16" name="length" />
+    <field type="CARD32" name="release_number" />
+    <field type="CARD32" name="resource_id_base" />
+    <field type="CARD32" name="resource_id_mask" />
+    <field type="CARD32" name="motion_buffer_size" />
+    <field type="CARD16" name="vendor_len" />
+    <field type="CARD16" name="maximum_request_length" />
+    <field type="CARD8" name="roots_len" />
+    <field type="CARD8" name="pixmap_formats_len" />
+    <field type="CARD8" name="image_byte_order" enum="ImageOrder" />
+    <field type="CARD8" name="bitmap_format_bit_order" enum="ImageOrder" />
+    <field type="CARD8" name="bitmap_format_scanline_unit" />
+    <field type="CARD8" name="bitmap_format_scanline_pad" />
+    <field type="KEYCODE" name="min_keycode" />
+    <field type="KEYCODE" name="max_keycode" />
+    <pad bytes="4" />
+    <list type="char" name="vendor">
+      <fieldref>vendor_len</fieldref>
+    </list>
+    <list type="FORMAT" name="pixmap_formats">
+      <fieldref>pixmap_formats_len</fieldref>
+    </list>
+    <list type="SCREEN" name="roots">
+      <fieldref>roots_len</fieldref>
+    </list>
+  </struct>
+
+  <!-- Core event types -->
   
   <enum name="ModMask">
     <item name="Shift">  <bit>0</bit></item>
@@ -37,6 +271,27 @@ authorization from the authors.
     <item name="3">      <bit>5</bit></item>
     <item name="4">      <bit>6</bit></item>
     <item name="5">      <bit>7</bit></item>
+    <item name="Any">    <bit>15</bit></item>
+  </enum>
+
+  <enum name="KeyButMask">
+    <item name="Shift">  <bit>0</bit></item>
+    <item name="Lock">   <bit>1</bit></item>
+    <item name="Control"><bit>2</bit></item>
+    <item name="Mod1">   <bit>3</bit></item>
+    <item name="Mod2">   <bit>4</bit></item>
+    <item name="Mod3">   <bit>5</bit></item>
+    <item name="Mod4">   <bit>6</bit></item>
+    <item name="Mod5">   <bit>7</bit></item>
+    <item name="Button1"><bit>8</bit></item>
+    <item name="Button2"><bit>9</bit></item>
+    <item name="Button3"><bit>10</bit></item>
+    <item name="Button4"><bit>11</bit></item>
+    <item name="Button5"><bit>12</bit></item>
+  </enum>
+
+  <enum name="Window">
+    <item name="None"> <value>0</value></item>
   </enum>
 
   <event name="KeyPress" number="2">
@@ -44,13 +299,14 @@ authorization from the authors.
     <field type="TIMESTAMP" name="time" />
     <field type="WINDOW" name="root" />
     <field type="WINDOW" name="event" />
-    <field type="WINDOW" name="child" />
+    <field type="WINDOW" name="child" altenum="Window" />
     <field type="INT16" name="root_x" />
     <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" />
+    <pad bytes="1" />
   </event>
 
   <eventcopy name="KeyRelease" number="3" ref="KeyPress" />
@@ -69,52 +325,79 @@ authorization from the authors.
     <field type="TIMESTAMP" name="time" />
     <field type="WINDOW" name="root" />
     <field type="WINDOW" name="event" />
-    <field type="WINDOW" name="child" />
+    <field type="WINDOW" name="child" altenum="Window" />
     <field type="INT16" name="root_x" />
     <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" />
+    <pad bytes="1" />
   </event>
 
   <eventcopy name="ButtonRelease" number="5" ref="ButtonPress" />
 
+  <!-- MotionNotify detail -->
+  <enum name="Motion">
+    <item name="Normal"><value>0</value></item>
+    <item name="Hint">  <value>1</value></item>
+  </enum>
+
   <event name="MotionNotify" number="6">
-    <field type="BYTE" name="detail" />
+    <field type="BYTE" name="detail" enum="Motion" />
     <field type="TIMESTAMP" name="time" />
     <field type="WINDOW" name="root" />
     <field type="WINDOW" name="event" />
-    <field type="WINDOW" name="child" />
+    <field type="WINDOW" name="child" altenum="Window" />
     <field type="INT16" name="root_x" />
     <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" />
+    <pad bytes="1" />
   </event>
 
+  <enum name="NotifyDetail">
+    <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>
+
+  <enum name="NotifyMode">
+    <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>
+  </enum>
+
   <event name="EnterNotify" number="7">
-    <field type="BYTE" name="detail" />
+    <field type="BYTE" name="detail" enum="NotifyDetail" />
     <field type="TIMESTAMP" name="time" />
     <field type="WINDOW" name="root" />
     <field type="WINDOW" name="event" />
-    <field type="WINDOW" name="child" />
+    <field type="WINDOW" name="child" altenum="Window" />
     <field type="INT16" name="root_x" />
     <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="BYTE" name="mode" />
+    <field type="CARD16" name="state" mask="KeyButMask" />
+    <field type="BYTE" name="mode" enum="NotifyMode" />
     <field type="BYTE" name="same_screen_focus" />
   </event>
 
   <eventcopy name="LeaveNotify" number="8" ref="EnterNotify" />
 
   <event name="FocusIn" number="9">
-    <field type="BYTE" name="detail" />
+    <field type="BYTE" name="detail" enum="NotifyDetail" />
     <field type="WINDOW" name="event" />
-    <field type="BYTE" name="mode" />
+    <field type="BYTE" name="mode" enum="NotifyMode" />
+    <pad bytes="3" />
   </event>
 
   <eventcopy name="FocusOut" number="10" ref="FocusIn" />
@@ -131,6 +414,7 @@ authorization from the authors.
     <field type="CARD16" name="width" />
     <field type="CARD16" name="height" />
     <field type="CARD16" name="count" />
+    <pad bytes="2" />
   </event>
 
   <event name="GraphicsExposure" number="13">
@@ -143,6 +427,7 @@ authorization from the authors.
     <field type="CARD16" name="minor_opcode" />
     <field type="CARD16" name="count" />
     <field type="CARD8" name="major_opcode" />
+    <pad bytes="3" />
   </event>
 
   <event name="NoExposure" number="14">
@@ -150,12 +435,20 @@ authorization from the authors.
     <field type="DRAWABLE" name="drawable" />
     <field type="CARD16" name="minor_opcode" />
     <field type="CARD8" name="major_opcode" />
+    <pad bytes="1" />
   </event>
 
+  <enum name="Visibility">
+    <item name="Unobscured">       <value>0</value></item>
+    <item name="PartiallyObscured"><value>1</value></item>
+    <item name="FullyObscured">    <value>2</value></item>
+  </enum>
+
   <event name="VisibilityNotify" number="15">
     <pad bytes="1" />
     <field type="WINDOW" name="window" />
-    <field type="BYTE" name="state" />
+    <field type="BYTE" name="state" enum="Visibility" />
+    <pad bytes="3" />
   </event>
 
   <event name="CreateNotify" number="16">
@@ -168,6 +461,7 @@ authorization from the authors.
     <field type="CARD16" name="height" />
     <field type="CARD16" name="border_width" />
     <field type="BOOL" name="override_redirect" />
+    <pad bytes="1" />
   </event>
 
   <event name="DestroyNotify" number="17">
@@ -181,6 +475,7 @@ authorization from the authors.
     <field type="WINDOW" name="event" />
     <field type="WINDOW" name="window" />
     <field type="BOOL" name="from_configure" />
+    <pad bytes="3" />
   </event>
 
   <event name="MapNotify" number="19">
@@ -188,6 +483,7 @@ authorization from the authors.
     <field type="WINDOW" name="event" />
     <field type="WINDOW" name="window" />
     <field type="BOOL" name="override_redirect" />
+    <pad bytes="3" />
   </event>
 
   <event name="MapRequest" number="20">
@@ -204,32 +500,34 @@ authorization from the authors.
     <field type="INT16" name="x" />
     <field type="INT16" name="y" />
     <field type="BOOL" name="override_redirect" />
+    <pad bytes="3" />
   </event>
 
   <event name="ConfigureNotify" number="22">
     <pad bytes="1" />
     <field type="WINDOW" name="event" />
     <field type="WINDOW" name="window" />
-    <field type="WINDOW" name="above_sibling" />
+    <field type="WINDOW" name="above_sibling" altenum="Window" />
     <field type="INT16" name="x" />
     <field type="INT16" name="y" />
     <field type="CARD16" name="width" />
     <field type="CARD16" name="height" />
     <field type="CARD16" name="border_width" />
     <field type="BOOL" name="override_redirect" />
+    <pad bytes="1" />
   </event>
 
   <event name="ConfigureRequest" number="23">
-    <field type="BYTE" name="stack_mode" />
+    <field type="BYTE" name="stack_mode" enum="StackMode" />
     <field type="WINDOW" name="parent" />
     <field type="WINDOW" name="window" />
-    <field type="WINDOW" name="sibling" />
+    <field type="WINDOW" name="sibling" altenum="Window" />
     <field type="INT16" name="x" />
     <field type="INT16" name="y" />
     <field type="CARD16" name="width" />
     <field type="CARD16" name="height" />
     <field type="CARD16" name="border_width" />
-    <field type="CARD16" name="value_mask" />
+    <field type="CARD16" name="value_mask" mask="ConfigWindow" />
   </event>
 
   <event name="GravityNotify" number="24">
@@ -247,12 +545,18 @@ authorization from the authors.
     <field type="CARD16" name="height" />
   </event>
 
+  <enum name="Place">
+    <item name="OnTop">   <value>0</value></item>
+    <item name="OnBottom"><value>1</value></item>
+  </enum>
+
   <event name="CirculateNotify" number="26">
     <pad bytes="1" />
     <field type="WINDOW" name="event" />
     <field type="WINDOW" name="window" />
     <pad bytes="4" />
-    <field type="BYTE" name="place" />
+    <field type="BYTE" name="place" enum="Place" />
+    <pad bytes="3" />
   </event>
 
   <eventcopy name="CirculateRequest" number="27" ref="CirculateNotify" />
@@ -267,7 +571,8 @@ authorization from the authors.
     <field type="WINDOW" name="window" />
     <field type="ATOM" name="atom" />
     <field type="TIMESTAMP" name="time" />
-    <field type="BYTE" name="state" />
+    <field type="BYTE" name="state" enum="Property" />
+    <pad bytes="3" />
   </event>
 
   <event name="SelectionClear" number="29">
@@ -277,31 +582,49 @@ authorization from the authors.
     <field type="ATOM" name="selection" />
   </event>
 
+  <enum name="Time">
+    <item name="CurrentTime"> <value>0</value> </item>
+  </enum>
+
+  <enum name="Atom">
+    <item name="None"> <value>0</value></item>
+  </enum>
+
   <event name="SelectionRequest" number="30">
     <pad bytes="1" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
     <field type="WINDOW" name="owner" />
     <field type="WINDOW" name="requestor" />
     <field type="ATOM" name="selection" />
     <field type="ATOM" name="target" />
-    <field type="ATOM" name="property" />
+    <field type="ATOM" name="property" altenum="Atom" />
   </event>
 
   <event name="SelectionNotify" number="31">
     <pad bytes="1" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
     <field type="WINDOW" name="requestor" />
     <field type="ATOM" name="selection" />
     <field type="ATOM" name="target" />
-    <field type="ATOM" name="property" />
+    <field type="ATOM" name="property" altenum="Atom" />
   </event>
 
+  <enum name="ColormapState">
+    <item name="Uninstalled"><value>0</value></item>
+    <item name="Installed">  <value>1</value></item>
+  </enum>
+
+  <enum name="Colormap">
+    <item name="None"> <value>0</value></item>
+  </enum>
+
   <event name="ColormapNotify" number="32">
     <pad bytes="1" />
     <field type="WINDOW" name="window" />
-    <field type="COLORMAP" name="colormap" />
+    <field type="COLORMAP" name="colormap" altenum="Colormap" />
     <field type="BOOL" name="new" />
-    <field type="BYTE" name="state" />
+    <field type="BYTE" name="state" enum="ColormapState" />
+    <pad bytes="2" />
   </event>
 
   <union name="ClientMessageData">
@@ -327,21 +650,30 @@ authorization from the authors.
 
   <event name="MappingNotify" number="34">
     <pad bytes="1" />
-    <field type="BYTE" name="request" />
+    <field type="BYTE" name="request" enum="Mapping" />
     <field type="KEYCODE" name="first_keycode" />
     <field type="CARD8" name="count" />
+    <pad bytes="1" />
   </event>
 
+
+
+  <!-- Core error types -->
+
+
+
   <error name="Request" number="1">
     <field type="CARD32" name="bad_value" />
     <field type="CARD16" name="minor_opcode" />
     <field type="CARD8" name="major_opcode" />
+    <pad bytes="1" />
   </error>
 
   <error name="Value" number="2">
     <field type="CARD32" name="bad_value" />
     <field type="CARD16" name="minor_opcode" />
     <field type="CARD8" name="major_opcode" />
+    <pad bytes="1" />
   </error>
 
   <errorcopy name="Window" number="3" ref="Value" />
@@ -360,10 +692,12 @@ authorization from the authors.
   <errorcopy name="Length" number="16" ref="Request" />
   <errorcopy name="Implementation" number="17" ref="Request" />
 
-  <!-- The requests, in major number order. -->
+
+
+  <!-- The core requests, in major number order. -->
   <!-- It is the caller's responsibility to free returned XCB*Rep objects. -->
 
-  <!-- FIXME: The ListFontsWithInfo request is not supported by XCB. -->
+
 
   <enum name="WindowClass">
     <item name="CopyFromParent"><value>0</value></item>
@@ -390,39 +724,24 @@ authorization from the authors.
     <item name="Cursor">          <bit>14</bit></item>
   </enum>
   
-  <enum name="BackingStore">
-    <item name="NotUseful"> <value>0</value></item>
-    <item name="WhenMapped"><value>1</value></item>
-    <item name="Always">    <value>2</value></item>
+  <enum name="BackPixmap">
+    <item name="None">          <value>0</value></item>
+    <item name="ParentRelative"><value>1</value></item>
   </enum>
 
-  <enum name="EventMask">
-    <item name="NoEvent">           <value>0</value></item>
-    <item name="KeyPress">            <bit>0</bit></item>
-    <item name="KeyRelease">          <bit>1</bit></item>
-    <item name="ButtonPress">         <bit>2</bit></item>
-    <item name="ButtonRelease">       <bit>3</bit></item>
-    <item name="EnterWindow">         <bit>4</bit></item>
-    <item name="LeaveWindow">         <bit>5</bit></item>
-    <item name="PointerMotion">       <bit>6</bit></item>
-    <item name="PointerMotionHint">   <bit>7</bit></item>
-    <item name="Button1Motion">       <bit>8</bit></item>
-    <item name="Button2Motion">       <bit>9</bit></item>
-    <item name="Button3Motion">       <bit>10</bit></item>
-    <item name="Button4Motion">       <bit>11</bit></item>
-    <item name="Button5Motion">       <bit>12</bit></item>
-    <item name="ButtonMotion">        <bit>13</bit></item>
-    <item name="KeymapState">         <bit>14</bit></item>
-    <item name="Exposure">            <bit>15</bit></item>
-    <item name="VisibilityChange">    <bit>16</bit></item>
-    <item name="StructureNotify">     <bit>17</bit></item>
-    <item name="ResizeRedirect">      <bit>18</bit></item>
-    <item name="SubstructureNotify">  <bit>19</bit></item>
-    <item name="SubstructureRedirect"><bit>20</bit></item>
-    <item name="FocusChange">         <bit>21</bit></item>
-    <item name="PropertyChange">      <bit>22</bit></item>
-    <item name="ColorMapChange">      <bit>23</bit></item>
-    <item name="OwnerGrabButton">     <bit>24</bit></item>
+  <enum name="Gravity">
+    <item name="BitForget"><value>0</value></item>
+    <item name="WinUnmap"> <value>0</value></item>
+    <item name="NorthWest"><value>1</value></item>
+    <item name="North">    <value>2</value></item>
+    <item name="NorthEast"><value>3</value></item>
+    <item name="West">     <value>4</value></item>
+    <item name="Center">   <value>5</value></item>
+    <item name="East">     <value>6</value></item>
+    <item name="SouthWest"><value>7</value></item>
+    <item name="South">    <value>8</value></item>
+    <item name="SouthEast"><value>9</value></item>
+    <item name="Static">   <value>10</value></item>
   </enum>
 
   <request name="CreateWindow" opcode="1">
@@ -434,7 +753,7 @@ authorization from the authors.
     <field type="CARD16" name="width" />
     <field type="CARD16" name="height" />
     <field type="CARD16" name="border_width" />
-    <field type="CARD16" name="class" />
+    <field type="CARD16" name="class" enum="WindowClass" />
     <field type="VISUALID" name="visual" />
     <valueparam value-mask-type="CARD32"
                 value-mask-name="value_mask"
@@ -459,21 +778,22 @@ authorization from the authors.
     <pad bytes="1" />
     <field type="WINDOW" name="window" />
     <reply>
-      <field type="CARD8" name="backing_store" />
+      <field type="CARD8" name="backing_store" enum="BackingStore" />
       <field type="VISUALID" name="visual" />
-      <field type="CARD16" name="class" />
-      <field type="CARD8" name="bit_gravity" />
-      <field type="CARD8" name="win_gravity" />
+      <field type="CARD16" name="class" enum="WindowClass" />
+      <field type="CARD8" name="bit_gravity" enum="Gravity" />
+      <field type="CARD8" name="win_gravity" enum="Gravity" />
       <field type="CARD32" name="backing_planes" />
       <field type="CARD32" name="backing_pixel" />
       <field type="BOOL" name="save_under" />
       <field type="BOOL" name="map_is_installed" />
-      <field type="CARD8" name="map_state" />
+      <field type="CARD8" name="map_state" enum="MapState" />
       <field type="BOOL" name="override_redirect" />
-      <field type="COLORMAP" name="colormap" />
-      <field type="CARD32" name="all_event_masks" />
-      <field type="CARD32" name="your_event_mask" />
-      <field type="CARD16" name="do_not_propagate_mask" />
+      <field type="COLORMAP" name="colormap" altenum="Colormap" />
+      <field type="CARD32" name="all_event_masks" mask="EventMask" />
+      <field type="CARD32" name="your_event_mask" mask="EventMask" />
+      <field type="CARD16" name="do_not_propagate_mask" mask="EventMask" />
+      <pad bytes="2" />
     </reply>
   </request>
 
@@ -493,7 +813,7 @@ authorization from the authors.
   </enum>
 
   <request name="ChangeSaveSet" opcode="6">
-    <field type="BYTE" name="mode" />
+    <field type="BYTE" name="mode" enum="SetMode" />
     <field type="WINDOW" name="window" />
   </request>
 
@@ -534,17 +854,31 @@ authorization from the authors.
     <item name="Sibling">    <bit>5</bit></item>
     <item name="StackMode">  <bit>6</bit></item>
   </enum>
+  
+  <enum name="StackMode">
+    <item name="Above">   <value>0</value></item>
+    <item name="Below">   <value>1</value></item>
+    <item name="TopIf">   <value>2</value></item>
+    <item name="BottomIf"><value>3</value></item>
+    <item name="Opposite"><value>4</value></item>
+  </enum>
 
   <request name="ConfigureWindow" opcode="12">
     <pad bytes="1" />
     <field type="WINDOW" name="window" />
     <valueparam value-mask-type="CARD16"
                 value-mask-name="value_mask"
+                value-mask-pad="2"
                 value-list-name="value_list" />
   </request>
 
+  <enum name="Circulate">
+    <item name="RaiseLowest"> <value>0</value></item>
+    <item name="LowerHighest"><value>1</value></item>
+  </enum>
+
   <request name="CirculateWindow" opcode="13">
-    <field type="CARD8" name="direction" />
+    <field type="CARD8" name="direction" enum="Circulate" />
     <field type="WINDOW" name="window" />
   </request>
 
@@ -559,6 +893,7 @@ authorization from the authors.
       <field type="CARD16" name="width" />
       <field type="CARD16" name="height" />
       <field type="CARD16" name="border_width" />
+      <pad bytes="2" />
     </reply>
   </request>
 
@@ -568,7 +903,7 @@ authorization from the authors.
     <reply>
       <pad bytes="1" />
       <field type="WINDOW" name="root" />
-      <field type="WINDOW" name="parent" />
+      <field type="WINDOW" name="parent" altenum="Window" />
       <field type="CARD16" name="children_len" />
       <pad bytes="14" />
       <list type="WINDOW" name="children">
@@ -586,7 +921,7 @@ authorization from the authors.
     </list>
     <reply>
       <pad bytes="1" />
-      <field type="ATOM" name="atom" />
+      <field type="ATOM" name="atom" altenum="Atom" />
     </reply>
   </request>
 
@@ -597,7 +932,7 @@ authorization from the authors.
       <pad bytes="1" />
       <field type="CARD16" name="name_len" />
       <pad bytes="22" />
-      <list type="CARD8" name="name">
+      <list type="char" name="name">
         <fieldref>name_len</fieldref>
       </list>
     </reply>
@@ -610,7 +945,7 @@ authorization from the authors.
   </enum>
 
   <request name="ChangeProperty" opcode="18">
-    <field type="CARD8" name="mode" />
+    <field type="CARD8" name="mode" enum="PropMode" />
     <field type="WINDOW" name="window" />
     <field type="ATOM" name="property" />
     <field type="ATOM" name="type" />
@@ -642,7 +977,7 @@ authorization from the authors.
     <field type="BOOL" name="delete" />
     <field type="WINDOW" name="window" />
     <field type="ATOM" name="property" />
-    <field type="ATOM" name="type" />
+    <field type="ATOM" name="type" altenum="GetPropertyType" />
     <field type="CARD32" name="long_offset" />
     <field type="CARD32" name="long_length" />
     <reply>
@@ -652,7 +987,13 @@ authorization from the authors.
       <field type="CARD32" name="value_len" />
       <pad bytes="12" />
       <list type="void" name="value">
-        <fieldref>value_len</fieldref>
+       <op op="*">
+         <fieldref>value_len</fieldref>
+         <op op="/">
+           <fieldref>format</fieldref>
+           <value>8</value>
+         </op>
+       </op>
       </list>
     </reply>
   </request>
@@ -672,9 +1013,9 @@ authorization from the authors.
 
   <request name="SetSelectionOwner" opcode="22">
     <pad bytes="1" />
-    <field type="WINDOW" name="owner" />
+    <field type="WINDOW" name="owner" altenum="Window" />
     <field type="ATOM" name="selection" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
   </request>
 
   <request name="GetSelectionOwner" opcode="23">
@@ -682,7 +1023,7 @@ authorization from the authors.
     <field type="ATOM" name="selection" />
     <reply>
       <pad bytes="1" />
-      <field type="WINDOW" name="owner" />
+      <field type="WINDOW" name="owner" altenum="Window" />
     </reply>
   </request>
 
@@ -691,37 +1032,59 @@ authorization from the authors.
     <field type="WINDOW" name="requestor" />
     <field type="ATOM" name="selection" />
     <field type="ATOM" name="target" />
-    <field type="ATOM" name="property" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="ATOM" name="property" altenum="Atom" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
   </request>
 
+  <enum name="SendEventDest">
+    <item name="PointerWindow"><value>0</value></item>
+    <item name="ItemFocus">    <value>1</value></item>
+  </enum>
+
   <request name="SendEvent" opcode="25">
     <field type="BOOL" name="propagate" />
-    <field type="WINDOW" name="destination" />
-    <field type="CARD32" name="event_mask" />
+    <field type="WINDOW" name="destination" altenum="SendEventDest" />
+    <field type="CARD32" name="event_mask" mask="EventMask" />
     <list type="char" name="event"><value>32</value></list>
   </request>
 
+  <enum name="GrabMode">
+    <item name="Sync"> <value>0</value></item>
+    <item name="Async"><value>1</value></item>
+  </enum>
+
+  <enum name="GrabStatus">
+    <item name="Success">       <value>0</value></item>
+    <item name="AlreadyGrabbed"><value>1</value></item>
+    <item name="InvalidTime">   <value>2</value></item>
+    <item name="NotViewable">   <value>3</value></item>
+    <item name="Frozen">        <value>4</value></item>
+  </enum>
+
+  <enum name="Cursor">
+    <item name="None"> <value>0</value></item>
+  </enum>
+
   <request name="GrabPointer" opcode="26">
     <field type="BOOL" name="owner_events" />
     <field type="WINDOW" name="grab_window" />
-    <field type="CARD16" name="event_mask" />
-    <field type="BYTE" name="pointer_mode" />
-    <field type="BYTE" name="keyboard_mode" />
-    <field type="WINDOW" name="confine_to" />
-    <field type="CURSOR" name="cursor" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="CARD16" name="event_mask" mask="EventMask" />
+    <field type="BYTE" name="pointer_mode" enum="GrabMode" />
+    <field type="BYTE" name="keyboard_mode" enum="GrabMode" />
+    <field type="WINDOW" name="confine_to" altenum="Window" />
+    <field type="CURSOR" name="cursor" altenum="Cursor" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
     <reply>
-      <field type="BYTE" name="status" />
+      <field type="BYTE" name="status" enum="GrabStatus" />
     </reply>
   </request>
 
   <request name="UngrabPointer" opcode="27">
     <pad bytes="1" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
   </request>
 
-  <enum name="Button">
+  <enum name="ButtonIndex">
      <item name="Any"><value>0</value></item>
      <item name="1">  <value>1</value></item>
      <item name="2">  <value>2</value></item>
@@ -733,64 +1096,84 @@ authorization from the authors.
   <request name="GrabButton" opcode="28">
     <field type="BOOL" name="owner_events" />
     <field type="WINDOW" name="grab_window" />
-    <field type="CARD16" name="event_mask" />
-    <field type="CARD8" name="pointer_mode" />
-    <field type="CARD8" name="keyboard_mode" />
-    <field type="WINDOW" name="confine_to" />
-    <field type="CURSOR" name="cursor" />
-    <field type="CARD8" name="button" />
+    <field type="CARD16" name="event_mask" mask="EventMask" />
+    <field type="CARD8" name="pointer_mode" enum="GrabMode" />
+    <field type="CARD8" name="keyboard_mode" enum="GrabMode" />
+    <field type="WINDOW" name="confine_to" altenum="Window" />
+    <field type="CURSOR" name="cursor" altenum="Cursor" />
+    <field type="CARD8" name="button" enum="ButtonIndex" />
     <pad bytes="1" />
-    <field type="CARD16" name="modifiers" />
+    <field type="CARD16" name="modifiers" mask="ModMask" />
   </request>
 
   <request name="UngrabButton" opcode="29">
-    <field type="CARD8" name="button" />
+    <field type="CARD8" name="button" enum="ButtonIndex" />
     <field type="WINDOW" name="grab_window" />
-    <field type="CARD16" name="modifiers" />
+    <field type="CARD16" name="modifiers" mask="ModMask" />
     <pad bytes="2" />
   </request>
 
   <request name="ChangeActivePointerGrab" opcode="30">
     <pad bytes="1" />
-    <field type="CURSOR" name="cursor" />
-    <field type="TIMESTAMP" name="time" />
-    <field type="CARD16" name="event_mask" />
+    <field type="CURSOR" name="cursor" altenum="Cursor" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
+    <field type="CARD16" name="event_mask" mask="EventMask" />
+    <pad bytes="2" />
   </request>
 
   <request name="GrabKeyboard" opcode="31">
     <field type="BOOL" name="owner_events" />
     <field type="WINDOW" name="grab_window" />
-    <field type="TIMESTAMP" name="time" />
-    <field type="BYTE" name="pointer_mode" />
-    <field type="BYTE" name="keyboard_mode" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
+    <field type="BYTE" name="pointer_mode" enum="GrabMode" />
+    <field type="BYTE" name="keyboard_mode" enum="GrabMode" />
+    <pad bytes="2" />
     <reply>
-      <field type="BYTE" name="status" />
+      <field type="BYTE" name="status" enum="GrabStatus" />
     </reply>
   </request>
 
   <request name="UngrabKeyboard" opcode="32">
     <pad bytes="1" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
   </request>
 
+  <!-- Use KEYCODE any = { XCBGrabAny }; to grab any key -->
+  <enum name="Grab">
+    <item name="Any"><value>0</value></item>
+  </enum>
+
   <request name="GrabKey" opcode="33">
     <field type="BOOL" name="owner_events" />
     <field type="WINDOW" name="grab_window" />
-    <field type="CARD16" name="modifiers" />
-    <field type="KEYCODE" name="key" />
-    <field type="CARD8" name="pointer_mode" />
-    <field type="CARD8" name="keyboard_mode" />
+    <field type="CARD16" name="modifiers" mask="ModMask" />
+    <field type="KEYCODE" name="key" altenum="Grab" />
+    <field type="CARD8" name="pointer_mode" enum="GrabMode" />
+    <field type="CARD8" name="keyboard_mode" enum="GrabMode" />
+    <pad bytes="3" />
   </request>
 
   <request name="UngrabKey" opcode="34">
-    <field type="CARD8" name="key" />
+    <field type="KEYCODE" name="key" altenum="Grab" />
     <field type="WINDOW" name="grab_window" />
-    <field type="CARD16" name="modifiers" />
+    <field type="CARD16" name="modifiers" mask="ModMask" />
+    <pad bytes="2" />
   </request>
 
+  <enum name="Allow">
+    <item name="AsyncPointer">  <value>0</value></item>
+    <item name="SyncPointer">   <value>1</value></item>
+    <item name="ReplayPointer"> <value>2</value></item>
+    <item name="AsyncKeyboard"> <value>3</value></item>
+    <item name="SyncKeyboard">  <value>4</value></item>
+    <item name="ReplayKeyboard"><value>5</value></item>
+    <item name="AsyncBoth">     <value>6</value></item>
+    <item name="SyncBoth">      <value>7</value></item>
+  </enum>
+
   <request name="AllowEvents" opcode="35">
-    <field type="CARD8" name="mode" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="CARD8" name="mode" enum="Allow" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
   </request>
 
   <request name="GrabServer" opcode="36" />
@@ -803,12 +1186,13 @@ authorization from the authors.
     <reply>
       <field type="BOOL" name="same_screen" />
       <field type="WINDOW" name="root" />
-      <field type="WINDOW" name="child" />
+      <field type="WINDOW" name="child" altenum="Window" />
       <field type="INT16" name="root_x" />
       <field type="INT16" name="root_y" />
       <field type="INT16" name="win_x" />
       <field type="INT16" name="win_y" />
-      <field type="CARD16" name="mask" />
+      <field type="CARD16" name="mask" mask="KeyButMask" />
+      <pad bytes="2" />
     </reply>
   </request>
 
@@ -821,8 +1205,8 @@ authorization from the authors.
   <request name="GetMotionEvents" opcode="39">
     <pad bytes="1" />
     <field type="WINDOW" name="window" />
-    <field type="TIMESTAMP" name="start" />
-    <field type="TIMESTAMP" name="stop" />
+    <field type="TIMESTAMP" name="start" altenum="Time" />
+    <field type="TIMESTAMP" name="stop" altenum="Time" />
     <reply>
       <pad bytes="1" />
       <field type="CARD32" name="events_len" />
@@ -841,7 +1225,7 @@ authorization from the authors.
     <field type="INT16" name="src_y" />
     <reply>
       <field type="BOOL" name="same_screen" />
-      <field type="WINDOW" name="child" />
+      <field type="WINDOW" name="child" altenum="Window" />
       <field type="CARD16" name="dst_x" />
       <field type="CARD16" name="dst_y" />
     </reply>
@@ -849,8 +1233,8 @@ authorization from the authors.
 
   <request name="WarpPointer" opcode="41">
     <pad bytes="1" />
-    <field type="WINDOW" name="src_window" />
-    <field type="WINDOW" name="dst_window" />
+    <field type="WINDOW" name="src_window" altenum="Window" />
+    <field type="WINDOW" name="dst_window" altenum="Window" />
     <field type="INT16" name="src_x" />
     <field type="INT16" name="src_y" />
     <field type="CARD16" name="src_width" />
@@ -859,16 +1243,24 @@ authorization from the authors.
     <field type="INT16" name="dst_y" />
   </request>
 
+  <!-- used for revert_to and focus -->
+  <enum name="InputFocus">
+    <item name="None">       <value>0</value></item>
+    <item name="PointerRoot"><value>1</value></item>
+    <item name="Parent">     <value>2</value></item>  <!-- revert_to only -->
+    <item name="FollowKeyboard"><value>3</value></item>  <!-- xinput extension only -->
+  </enum>
+
   <request name="SetInputFocus" opcode="42">
-    <field type="CARD8" name="revert_to" />
-    <field type="WINDOW" name="focus" />
-    <field type="TIMESTAMP" name="time" />
+    <field type="CARD8" name="revert_to" enum="InputFocus" />
+    <field type="WINDOW" name="focus" altenum="InputFocus" />
+    <field type="TIMESTAMP" name="time" altenum="Time" />
   </request>
 
   <request name="GetInputFocus" opcode="43">
     <reply>
-      <field type="CARD8" name="revert_to" />
-      <field type="WINDOW" name="focus" />
+      <field type="CARD8" name="revert_to" enum="InputFocus" />
+      <field type="WINDOW" name="focus" altenum="InputFocus" />
     </reply>
   </request>
 
@@ -883,6 +1275,7 @@ authorization from the authors.
     <pad bytes="1" />
     <field type="FONT" name="fid" />
     <field type="CARD16" name="name_len" />
+    <pad bytes="2" />
     <list type="char" name="name">
       <fieldref>name_len</fieldref>
     </list>
@@ -893,6 +1286,11 @@ authorization from the authors.
     <field type="FONT" name="font" />
   </request>
 
+  <enum name="FontDraw">
+    <item name="LeftToRight"><value>0</value></item>
+    <item name="RightToLeft"><value>1</value></item>
+  </enum>
+
   <struct name="FONTPROP">
     <field type="ATOM" name="name" />
     <field type="CARD32" name="value" />
@@ -920,7 +1318,7 @@ authorization from the authors.
       <field type="CARD16" name="max_char_or_byte2" />
       <field type="CARD16" name="default_char" />
       <field type="CARD16" name="properties_len" />
-      <field type="BYTE" name="draw_direction" />
+      <field type="BYTE" name="draw_direction" enum="FontDraw" />
       <field type="CARD8" name="min_byte1" />
       <field type="CARD8" name="max_byte1" />
       <field type="BOOL" name="all_chars_exist" />
@@ -943,7 +1341,7 @@ authorization from the authors.
     <field type="FONTABLE" name="font" />
     <list type="CHAR2B" name="string" />
     <reply>
-      <field type="BYTE" name="draw_direction" />
+      <field type="BYTE" name="draw_direction" enum="FontDraw" />
       <field type="INT16" name="font_ascent" />
       <field type="INT16" name="font_descent" />
       <field type="INT16" name="overall_ascent" />
@@ -995,7 +1393,7 @@ authorization from the authors.
       <field type="CARD16" name="max_char_or_byte2" />
       <field type="CARD16" name="default_char" />
       <field type="CARD16" name="properties_len" />
-      <field type="BYTE" name="draw_direction" />
+      <field type="BYTE" name="draw_direction" enum="FontDraw" />
       <field type="CARD8" name="min_byte1" />
       <field type="CARD8" name="max_byte1" />
       <field type="BOOL" name="all_chars_exist" />
@@ -1061,7 +1459,7 @@ authorization from the authors.
     <item name="GraphicsExposures"> <bit>16</bit></item>
     <item name="ClipOriginX">       <bit>17</bit></item>
     <item name="ClipOriginY">       <bit>18</bit></item>
-    <item name="Mask">              <bit>19</bit></item>
+    <item name="ClipMask">          <bit>19</bit></item>
     <item name="DashOffset">        <bit>20</bit></item>
     <item name="DashList">          <bit>21</bit></item>
     <item name="ArcMode">           <bit>22</bit></item>
@@ -1069,22 +1467,22 @@ authorization from the authors.
 
   <!-- GC Function values -->
   <enum name="GX">
-    <item name="clear">       <value>0x0</value></item>
-    <item name="and">         <value>0x1</value></item>
-    <item name="andReverse">  <value>0x2</value></item>
-    <item name="copy">        <value>0x3</value></item>
-    <item name="andInverted"> <value>0x4</value></item>
-    <item name="noop">        <value>0x5</value></item>
-    <item name="xor">         <value>0x6</value></item>
-    <item name="or">          <value>0x7</value></item>
-    <item name="nor">         <value>0x8</value></item>
-    <item name="equiv">       <value>0x9</value></item>
-    <item name="invert">      <value>0xa</value></item>
-    <item name="orReverse">   <value>0xb</value></item>
-    <item name="copyInverted"><value>0xc</value></item>
-    <item name="orInverted">  <value>0xd</value></item>
-    <item name="nand">        <value>0xe</value></item>
-    <item name="set">         <value>0xf</value></item>
+    <item name="clear">       <value>0</value></item>
+    <item name="and">         <value>1</value></item>
+    <item name="andReverse">  <value>2</value></item>
+    <item name="copy">        <value>3</value></item>
+    <item name="andInverted"> <value>4</value></item>
+    <item name="noop">        <value>5</value></item>
+    <item name="xor">         <value>6</value></item>
+    <item name="or">          <value>7</value></item>
+    <item name="nor">         <value>8</value></item>
+    <item name="equiv">       <value>9</value></item>
+    <item name="invert">      <value>10</value></item>
+    <item name="orReverse">   <value>11</value></item>
+    <item name="copyInverted"><value>12</value></item>
+    <item name="orInverted">  <value>13</value></item>
+    <item name="nand">        <value>14</value></item>
+    <item name="set">         <value>15</value></item>
   </enum>
 
   <enum name="LineStyle">
@@ -1095,13 +1493,13 @@ authorization from the authors.
 
   <enum name="CapStyle">
     <item name="NotLast">   <value>0</value></item>
-    <item name="Cap">       <value>1</value></item>
-    <item name="Butt">      <value>2</value></item>
+    <item name="Butt">      <value>1</value></item>
+    <item name="Round">     <value>2</value></item>
     <item name="Projecting"><value>3</value></item>
   </enum>
 
   <enum name="JoinStyle">
-    <item name="Mitre">     <value>0</value></item>
+    <item name="Miter">     <value>0</value></item>
     <item name="Round">     <value>1</value></item>
     <item name="Bevel">     <value>2</value></item>
   </enum>
@@ -1149,7 +1547,7 @@ authorization from the authors.
     <pad bytes="1" />
     <field type="GCONTEXT" name="src_gc" />
     <field type="GCONTEXT" name="dst_gc" />
-    <field type="CARD32" name="value_mask" />
+    <field type="CARD32" name="value_mask" mask="GC" />
   </request>
 
   <request name="SetDashes" opcode="58">
@@ -1162,8 +1560,15 @@ authorization from the authors.
     </list>
   </request>
 
+  <enum name="ClipOrdering">
+    <item name="Unsorted"><value>0</value></item>
+    <item name="YSorted"> <value>1</value></item>
+    <item name="YXSorted"><value>2</value></item>
+    <item name="YXBanded"><value>3</value></item>
+  </enum>
+
   <request name="SetClipRectangles" opcode="59">
-    <field type="BYTE" name="ordering" />
+    <field type="BYTE" name="ordering" enum="ClipOrdering" />
     <field type="GCONTEXT" name="gc" />
     <field type="INT16" name="clip_x_origin" />
     <field type="INT16" name="clip_y_origin" />
@@ -1216,15 +1621,16 @@ authorization from the authors.
     <item name="Previous"><value>1</value></item>
   </enum>
 
-  <request name="PolyPoint" opcode="64" combine-adjacent="true">
-    <field type="BYTE" name="coordinate_mode" />
+  <!-- combine-adjacent doesn't work for mode==Relative -->
+  <request name="PolyPoint" opcode="64">
+    <field type="BYTE" name="coordinate_mode" enum="CoordMode" />
     <field type="DRAWABLE" name="drawable" />
     <field type="GCONTEXT" name="gc" />
     <list type="POINT" name="points" />
   </request>
 
   <request name="PolyLine" opcode="65" combine-adjacent="true">
-    <field type="BYTE" name="coordinate_mode" />
+    <field type="BYTE" name="coordinate_mode" enum="CoordMode" />
     <field type="DRAWABLE" name="drawable" />
     <field type="GCONTEXT" name="gc" />
     <list type="POINT" name="points" />
@@ -1263,12 +1669,19 @@ authorization from the authors.
     <list type="ARC" name="arcs" />
   </request>
 
+  <enum name="PolyShape">
+    <item name="Complex">  <value>0</value></item>
+    <item name="Nonconvex"><value>1</value></item>
+    <item name="Convex">   <value>2</value></item>
+  </enum>
+
   <request name="FillPoly" opcode="69">
     <pad bytes="1" />
     <field type="DRAWABLE" name="drawable" />
     <field type="GCONTEXT" name="gc" />
-    <field type="CARD8" name="shape" />
-    <field type="CARD8" name="coordinate_mode" />
+    <field type="CARD8" name="shape" enum="PolyShape" />
+    <field type="CARD8" name="coordinate_mode" enum="CoordMode" />
+    <pad bytes="2" />
     <list type="POINT" name="points" />
   </request>
 
@@ -1292,13 +1705,8 @@ authorization from the authors.
     <item name="ZPixmap"> <value>2</value></item>
   </enum>
 
-  <enum name="ImageOrder">
-    <item name="LSBFirst"><value>0</value></item>
-    <item name="MSBFirst"><value>1</value></item>
-  </enum>
-
   <request name="PutImage" opcode="72">
-    <field type="CARD8" name="format" />
+    <field type="CARD8" name="format" enum="ImageFormat" />
     <field type="DRAWABLE" name="drawable" />
     <field type="GCONTEXT" name="gc" />
     <field type="CARD16" name="width" />
@@ -1307,12 +1715,13 @@ authorization from the authors.
     <field type="INT16" name="dst_y" />
     <field type="CARD8" name="left_pad" />
     <field type="CARD8" name="depth" />
+    <pad bytes="2" />
     <list type="BYTE" name="data" />
   </request>
 
   <!-- FIXME: data array in reply will include padding, but ought not to. -->
   <request name="GetImage" opcode="73">
-    <field type="CARD8" name="format" />
+    <field type="CARD8" name="format" enum="ImageFormat" />
     <field type="DRAWABLE" name="drawable" />
     <field type="INT16" name="x" />
     <field type="INT16" name="y" />
@@ -1372,8 +1781,13 @@ authorization from the authors.
     </list>
   </request>
 
+  <enum name= "ColormapAlloc">
+    <item name="None"><value>0</value></item>
+    <item name="All"> <value>1</value></item>
+  </enum>
+
   <request name="CreateColormap" opcode="78">
-    <field type="BYTE" name="alloc" />
+    <field type="BYTE" name="alloc" enum="ColormapAlloc" />
     <field type="COLORMAP" name="mid" />
     <field type="WINDOW" name="window" />
     <field type="VISUALID" name="visual" />
@@ -1419,6 +1833,7 @@ authorization from the authors.
     <field type="CARD16" name="red" />
     <field type="CARD16" name="green" />
     <field type="CARD16" name="blue" />
+    <pad bytes="2" />
     <reply>
       <pad bytes="1" />
       <field type="CARD16" name="red" />
@@ -1433,6 +1848,7 @@ authorization from the authors.
     <pad bytes="1" />
     <field type="COLORMAP" name="cmap" />
     <field type="CARD16" name="name_len" />
+    <pad bytes="2" />
     <list type="char" name="name">
       <fieldref>name_len</fieldref>
     </list>
@@ -1495,12 +1911,18 @@ authorization from the authors.
     <list type="CARD32" name="pixels" />
   </request>
 
+  <enum name="ColorFlag">
+    <item name="Red">  <bit>0</bit></item>
+    <item name="Green"><bit>1</bit></item>
+    <item name="Blue"> <bit>2</bit></item>
+  </enum>
+
   <struct name="COLORITEM">
     <field type="CARD32" name="pixel" />
     <field type="CARD16" name="red" />
     <field type="CARD16" name="green" />
     <field type="CARD16" name="blue" />
-    <field type="BYTE" name="flags" />
+    <field type="BYTE" name="flags" mask="ColorFlag" />
     <pad bytes="1" />
   </struct>
   
@@ -1511,10 +1933,11 @@ authorization from the authors.
   </request>
 
   <request name="StoreNamedColor" opcode="90">
-    <field type="CARD8" name="flags" />
+    <field type="CARD8" name="flags" mask="ColorFlag" />
     <field type="COLORMAP" name="cmap" />
     <field type="CARD32" name="pixel" />
     <field type="CARD16" name="name_len" />
+    <pad bytes="2" />
     <list type="char" name="name">
       <fieldref>name_len</fieldref>
     </list>
@@ -1545,6 +1968,7 @@ authorization from the authors.
     <pad bytes="1" />
     <field type="COLORMAP" name="cmap" />
     <field type="CARD16" name="name_len" />
+    <pad bytes="2" />
     <list type="char" name="name">
       <fieldref>name_len</fieldref>
     </list>
@@ -1559,11 +1983,15 @@ authorization from the authors.
     </reply>
   </request>
 
+  <enum name="Pixmap">
+    <item name="None"> <value>0</value></item>
+  </enum>
+
   <request name="CreateCursor" opcode="93">
     <pad bytes="1" />
     <field type="CURSOR" name="cid" />
     <field type="PIXMAP" name="source" />
-    <field type="PIXMAP" name="mask" />
+    <field type="PIXMAP" name="mask" altenum="Pixmap" />
     <field type="CARD16" name="fore_red" />
     <field type="CARD16" name="fore_green" />
     <field type="CARD16" name="fore_blue" />
@@ -1574,11 +2002,15 @@ authorization from the authors.
     <field type="CARD16" name="y" />
   </request>
 
+  <enum name="Font">
+    <item name="None"> <value>0</value></item>
+  </enum>
+
   <request name="CreateGlyphCursor" opcode="94">
     <pad bytes="1" />
     <field type="CURSOR" name="cid" />
     <field type="FONT" name="source_font" />
-    <field type="FONT" name="mask_font" />
+    <field type="FONT" name="mask_font" altenum="Font" />
     <field type="CARD16" name="source_char" />
     <field type="CARD16" name="mask_char" />
     <field type="CARD16" name="fore_red" />
@@ -1605,8 +2037,14 @@ authorization from the authors.
     <field type="CARD16" name="back_blue" />
   </request>
 
+  <enum name="QueryShapeOf">
+    <item name="LargestCursor"> <value>0</value></item>
+    <item name="FastestTile">   <value>1</value></item>
+    <item name="FastestStipple"><value>2</value></item>    
+  </enum>
+
   <request name="QueryBestSize" opcode="97">
-    <field type="CARD8" name="class" />
+    <field type="CARD8" name="class" enum="QueryShapeOf" />
     <field type="DRAWABLE" name="drawable" />
     <field type="CARD16" name="width" />
     <field type="CARD16" name="height" />
@@ -1620,6 +2058,7 @@ authorization from the authors.
   <request name="QueryExtension" opcode="98">
     <pad bytes="1" />
     <field type="CARD16" name="name_len" />
+    <pad bytes="2" />
     <list type="char" name="name">
       <fieldref>name_len</fieldref>
     </list>
@@ -1662,14 +2101,33 @@ authorization from the authors.
       <field type="BYTE" name="keysyms_per_keycode" />
       <pad bytes="24" />
       <list type="KEYSYM" name="keysyms">
-        <op op="*">
-          <fieldref>length</fieldref>
-          <value>4</value>
-        </op>
+        <fieldref>length</fieldref>
       </list>
     </reply>
   </request>
 
+  <enum name="KB">
+    <item name="KeyClickPercent"><bit>0</bit></item>
+    <item name="BellPercent">    <bit>1</bit></item>
+    <item name="BellPitch">      <bit>2</bit></item>
+    <item name="BellDuration">   <bit>3</bit></item>
+    <item name="Led">            <bit>4</bit></item>
+    <item name="LedMode">        <bit>5</bit></item>
+    <item name="Key">            <bit>6</bit></item>
+    <item name="AutoRepeatMode"> <bit>7</bit></item>
+  </enum>
+
+  <enum name="LedMode">
+    <item name="Off"><value>0</value></item>
+    <item name="On"> <value>1</value></item>
+  </enum>
+
+  <enum name="AutoRepeatMode">
+    <item name="Off">    <value>0</value></item>
+    <item name="On">     <value>1</value></item>
+    <item name="Default"><value>2</value></item>
+  </enum>
+
   <request name="ChangeKeyboardControl" opcode="102">
     <pad bytes="1" />
     <valueparam value-mask-type="CARD32"
@@ -1679,7 +2137,7 @@ authorization from the authors.
 
   <request name="GetKeyboardControl" opcode="103">
     <reply>
-      <field type="BYTE" name="global_auto_repeat" />
+      <field type="BYTE" name="global_auto_repeat" enum="AutoRepeatMode" />
       <field type="CARD32" name="led_mask" />
       <field type="CARD8" name="key_click_percent" />
       <field type="CARD8" name="bell_percent" />
@@ -1709,15 +2167,31 @@ authorization from the authors.
       <field type="CARD16" name="acceleration_numerator" />
       <field type="CARD16" name="acceleration_denominator" />
       <field type="CARD16" name="threshold" />
+      <pad bytes="18" />
     </reply>
   </request>
 
+  <!-- Screen saver timeout and interval can be set to -1 to restore defaults
+       and set to 0 to disable the screen saver. -->
+
+  <enum name="Blanking">
+    <item name="NotPreferred"><value>0</value></item>
+    <item name="Preferred">   <value>1</value></item>
+    <item name="Default">     <value>2</value></item>
+  </enum>
+
+  <enum name="Exposures">
+    <item name="NotAllowed"><value>0</value></item>
+    <item name="Allowed">   <value>1</value></item>
+    <item name="Default">   <value>2</value></item>
+  </enum>
+
   <request name="SetScreenSaver" opcode="107">
     <pad bytes="1" />
     <field type="INT16" name="timeout" />
     <field type="INT16" name="interval" />
-    <field type="CARD8" name="prefer_blanking" />
-    <field type="CARD8" name="allow_exposures" />
+    <field type="CARD8" name="prefer_blanking" enum="Blanking" />
+    <field type="CARD8" name="allow_exposures" enum="Exposures" />
   </request>
 
   <request name="GetScreenSaver" opcode="108">
@@ -1725,14 +2199,29 @@ authorization from the authors.
       <pad bytes="1" />
       <field type="CARD16" name="timeout" />
       <field type="CARD16" name="interval" />
-      <field type="BYTE" name="prefer_blanking" />
-      <field type="BYTE" name="allow_exposures" />
+      <field type="BYTE" name="prefer_blanking" enum="Blanking" />
+      <field type="BYTE" name="allow_exposures" enum="Exposures" />
+      <pad bytes="18" />
     </reply>
   </request>
 
+  <enum name="HostMode">
+    <item name="Insert"><value>0</value></item>
+    <item name="Delete"><value>1</value></item>
+  </enum>
+
+  <!-- also used and extended for Xau authentication -->
+  <enum name="Family">
+    <item name="Internet">         <value>0</value></item>
+    <item name="DECnet">           <value>1</value></item>
+    <item name="Chaos">            <value>2</value></item>
+    <item name="ServerInterpreted"><value>5</value></item>
+    <item name="Internet6">        <value>6</value></item>
+  </enum>
+
   <request name="ChangeHosts" opcode="109">
-    <field type="CARD8" name="mode" />
-    <field type="CARD8" name="family" />
+    <field type="CARD8" name="mode" enum="HostMode" />
+    <field type="CARD8" name="family" enum="Family" />
     <pad bytes="1" />
     <field type="CARD16" name="address_len" />
     <list type="char" name="address">
@@ -1741,7 +2230,7 @@ authorization from the authors.
   </request>
 
   <struct name="HOST">
-    <field type="CARD8" name="family" />
+    <field type="CARD8" name="family" enum="Family" />
     <pad bytes="1" />
     <field type="CARD16" name="address_len" />
     <list type="BYTE" name="address">
@@ -1751,7 +2240,7 @@ authorization from the authors.
 
   <request name="ListHosts" opcode="110">
     <reply>
-      <field type="BYTE" name="mode" />
+      <field type="BYTE" name="mode" enum="AccessControl" />
       <field type="CARD16" name="hosts_len" />
       <pad bytes="22" />
       <list type="HOST" name="hosts">
@@ -1760,20 +2249,36 @@ authorization from the authors.
     </reply>
   </request>
 
+  <enum name="AccessControl">
+    <item name="Disable"><value>0</value></item>
+    <item name="Enable"> <value>1</value></item>
+  </enum>
+
   <request name="SetAccessControl" opcode="111">
-    <field type="CARD8" name="mode" />
+    <field type="CARD8" name="mode" enum="AccessControl" />
   </request>
 
+  <enum name="CloseDown">
+    <item name="DestroyAll">     <value>0</value></item>
+    <item name="RetainPermanent"><value>1</value></item>
+    <item name="RetainTemporary"><value>2</value></item>
+  </enum>
+
   <request name="SetCloseDownMode" opcode="112">
-    <field type="CARD8" name="mode" />
+    <field type="CARD8" name="mode" enum="CloseDown" />
   </request>
 
+  <enum name="Kill">
+    <item name="AllTemporary"><value>0</value></item>
+  </enum>
+
   <request name="KillClient" opcode="113">
     <pad bytes="1" />
-    <field type="CARD32" name="resource" />
+    <field type="CARD32" name="resource" altenum="Kill" />
   </request>
 
   <request name="RotateProperties" opcode="114">
+    <pad bytes="1" />
     <field type="WINDOW" name="window" />
     <field type="CARD16" name="atoms_len" />
     <field type="INT16" name="delta" />
@@ -1782,17 +2287,29 @@ authorization from the authors.
     </list>
   </request>
 
+  <enum name="ScreenSaver">
+    <item name="Reset"> <value>0</value></item>
+    <item name="Active"><value>1</value></item>
+  </enum>
+
   <request name="ForceScreenSaver" opcode="115">
-    <field type="CARD8" name="mode" />
+    <field type="CARD8" name="mode" enum="ScreenSaver" />
   </request>
 
+  <!-- Reply from SetPointerMapping or SetModifierMapping -->
+  <enum name="MappingStatus">
+    <item name="Success"><value>0</value></item>
+    <item name="Busy">   <value>1</value></item>
+    <item name="Failure"><value>2</value></item>
+  </enum>
+
   <request name="SetPointerMapping" opcode="116">
     <field type="CARD8" name="map_len" />
     <list type="CARD8" name="map">
       <fieldref>map_len</fieldref>
     </list>
     <reply>
-      <field type="BYTE" name="status" />
+      <field type="BYTE" name="status" enum="MappingStatus" />
     </reply>
   </request>
 
@@ -1826,7 +2343,7 @@ authorization from the authors.
       </op>
     </list>
     <reply>
-      <field type="BYTE" name="status" />
+      <field type="BYTE" name="status" enum="MappingStatus" />
     </reply>
   </request>