made changes to support new value-mask-pad field of valueparam structures
[free-sw/xcb/proto] / src / randr.xml
index 8a46f3c..de552e7 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!--
-Copyright (C) 2005 Jeremy Kolb.
+Copyright (C) 2006 Jeremy Kolb, Ian Osgood
 All Rights Reserved.
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -27,24 +27,31 @@ authorization from the authors.
 -->
 
 <xcb header="randr" extension-xname="RANDR" extension-name="RandR"
-    major-version="1" minor-version="1">
-       <!-- Implements version 1.1 of RANDR -->        
+    major-version="1" minor-version="2">
 
        <import>xproto</import>
+       
+       <!-- Errors -->
+
+       <error name="BadOutput" number="0" />
+       <error name="BadCrtc"   number="1" />
+       <error name="BadMode"   number="2" />
+
+       <!-- Requests -->
 
        <enum name="Rotation">
-               <item name="Rotate_0"><value>1</value></item>
-               <item name="Rotate_90"><value>2</value></item>
-               <item name="Rotate_180"><value>4</value></item>
-               <item name="Rotate_270"><value>8</value></item>
-               <item name="Reflect_X"><value>16</value></item>
-               <item name="Reflect_Y"><value>32</value></item>
+               <item name="Rotate_0">  <bit>0</bit></item>
+               <item name="Rotate_90"> <bit>1</bit></item>
+               <item name="Rotate_180"><bit>2</bit></item>
+               <item name="Rotate_270"><bit>3</bit></item>
+               <item name="Reflect_X"> <bit>4</bit></item>
+               <item name="Reflect_Y"> <bit>5</bit></item>
        </enum>
 
        <struct name="ScreenSize">
-               <field type="INT16" name="width" />
+               <field type="INT16" name="width" />   <!-- pixels -->
                <field type="INT16" name="height" />
-               <field type="INT16" name="mwidth" />
+               <field type="INT16" name="mwidth" />  <!-- millimeters -->
                <field type="INT16" name="mheight" />
        </struct>
        
@@ -54,7 +61,7 @@ authorization from the authors.
                        <fieldref>nRates</fieldref>
                </list>
        </struct>
-
+       
        <request name="QueryVersion" opcode="0">
                <field type="CARD32" name="major_version" />
                <field type="CARD32" name="minor_version" />
@@ -65,6 +72,8 @@ authorization from the authors.
                        <pad bytes="16" />
                </reply>
        </request>
+       
+       <!-- Skip obsolete opcode 1 so old clients fail immediately -->
 
        <!-- This is for the 1.1 version request.  I don't believe we need to specify a 1.0 request
        as few things used randr 1.0.  The only difference is the removal of refresh and padding I think.
@@ -79,7 +88,7 @@ authorization from the authors.
                <field type="CARD16" name="rate" />
                <pad bytes="2" />
                <reply>
-                       <field type="CARD8" name="status" />
+                       <field type="CARD8" name="status" />    <!-- enum SetConfig -->
                        <field type="TIMESTAMP" name="new_timestamp" />
                        <field type="TIMESTAMP" name="config_timestamp" />
                        <field type="WINDOW" name="root" />
@@ -87,6 +96,8 @@ authorization from the authors.
                        <pad bytes="10" />
                </reply>
        </request>
+       
+       <!-- opcode 3 is obsolete -->
 
        <enum name="SetConfig">
                <item name="Success"><value>0</value></item>
@@ -97,7 +108,7 @@ authorization from the authors.
 
        <request name="SelectInput" opcode="4"> 
                <field type="WINDOW" name="window" />
-               <field type="CARD16" name="enable" />
+               <field type="CARD16" name="enable" />  <!-- enum SetConfig -->
                <pad bytes="2" />
        </request>
 
@@ -129,8 +140,315 @@ authorization from the authors.
                </reply>
        </request>
 
-       <enum name="SM" >
-               <item name="ScreenChangeNotify"><value>1</value></item>
+       <!-- new in version 1.2 -->
+
+       <request name="GetScreenSizeRange" opcode="6">
+               <field type="WINDOW" name="window" />
+               <reply>
+                       <pad bytes="1" />
+                       <field type="CARD16" name="min_width" />
+                       <field type="CARD16" name="min_height" />
+                       <field type="CARD16" name="max_width" />
+                       <field type="CARD16" name="max_height" />
+               </reply>
+       </request>
+
+       <request name="SetScreenSize" opcode="7">
+               <field type="WINDOW" name="window" />
+               <field type="CARD16" name="width" />    <!-- pixels -->
+               <field type="CARD16" name="height" />
+               <field type="CARD32" name="mm_width" />  <!-- millimeters -->
+               <field type="CARD32" name="mm_height" />
+       </request>
+
+       <!-- for GetScreenResources.ModeInfo.ModeFlag -->
+       <enum name="ModeFlag">
+               <item name="HsyncPositive"> <bit>0</bit></item>
+               <item name="HsyncNegative"> <bit>1</bit></item>
+               <item name="VsyncPositive"> <bit>2</bit></item>
+               <item name="VsyncNegative"> <bit>3</bit></item>
+               <item name="Interlace">     <bit>4</bit></item>
+               <item name="DoubleScan">    <bit>5</bit></item>
+               <item name="Csync">         <bit>6</bit></item>
+               <item name="CsyncPositive"> <bit>7</bit></item>
+               <item name="CsyncNegative"> <bit>8</bit></item>
+               <item name="HskewPresent">  <bit>9</bit></item>
+               <item name="Bcast">         <bit>10</bit></item>
+               <item name="PixelMultiplex"><bit>11</bit></item>
+               <item name="DoubleClock">   <bit>12</bit></item>
+               <item name="HalveClock">    <bit>13</bit></item>
+       </enum>
+
+       <struct name="ModeInfo">
+               <field type="CARD32" name="id" />
+               <field type="CARD16" name="width" />
+               <field type="CARD16" name="height" />
+               <field type="CARD32" name="dot_clock" />
+               <field type="CARD16" name="hsync_start" />
+               <field type="CARD16" name="hsync_end" />
+               <field type="CARD16" name="htotal" />
+               <field type="CARD16" name="hskew" />
+               <field type="CARD16" name="vsync_start" />
+               <field type="CARD16" name="vsync_end" />
+               <field type="CARD16" name="vtotal" />
+               <field type="CARD16" name="name_len" />
+               <field type="CARD32" name="mode_flags" />       <!-- enum ModeFlag -->
+               <!-- the mode name itself -->
+       </struct>
+
+       <request name="GetScreenResources" opcode="8">
+               <field type="WINDOW" name="window" />
+               <reply>
+                       <pad bytes="1" />
+                       <field type="TIMESTAMP" name="timestamp" />
+                       <field type="TIMESTAMP" name="config_timestamp" />
+                       <field type="CARD16" name="num_crtcs" />
+                       <field type="CARD16" name="num_outputs" />
+                       <field type="CARD16" name="num_modes" />
+                       <field type="CARD16" name="names_len" />
+                       <pad bytes="8" />
+                       <list type="CARD32" name="crtcs">
+                           <fieldref>num_crtcs</fieldref>
+                       </list>
+                       <list type="CARD32" name="outputs">
+                           <fieldref>num_outputs</fieldref>
+                       </list>
+                       <list type="ModeInfo" name="modes">
+                           <fieldref>num_modes</fieldref>
+                       </list>
+                       <!-- FIXME: this is *not* null separated!
+                            One must use ModeInfo.name_len from each previous
+                            ModeInfo to infer the position of the name. -->
+                       <list type="BYTE" name="names">
+                           <fieldref>names_len</fieldref>
+                       </list>
+               </reply>
+       </request>
+
+       <!-- for GetOutputInfo.connection -->
+       <enum name="Connection">
+               <item name="Connected" />
+               <item name="Disconnected" />
+               <item name="Unknown" />
+       </enum>
+
+       <request name="GetOutputInfo" opcode="9">
+               <field type="CARD32" name="output" />
+               <field type="TIMESTAMP" name="config_timestamp" />
+               <reply>
+                       <field type="CARD8" name="status" />    <!-- enum SetConfig -->
+                       <field type="TIMESTAMP" name="timestamp" />
+                       <field type="CARD32" name="crtc" />
+                       <field type="CARD32" name="mm_width" />  <!-- millimeters -->
+                       <field type="CARD32" name="mm_height" />
+                       <field type="CARD8" name="connection" /> <!-- enum Connection -->
+                       <field type="CARD8" name="subpixel_order" />
+                       <field type="CARD16" name="num_crtcs" />
+                       <field type="CARD16" name="num_modes" />
+                       <field type="CARD16" name="num_preferred" />
+                       <field type="CARD16" name="num_clones" />
+                       <field type="CARD16" name="name_len" />
+                       <list type="CARD32" name="crtcs">
+                           <fieldref>num_crtcs</fieldref>
+                       </list>
+                       <list type="CARD32" name="modes">
+                           <fieldref>num_modes</fieldref>
+                       </list>
+                       <list type="CARD32" name="clones">
+                           <fieldref>num_clones</fieldref>
+                       </list>
+                       <list type="BYTE" name="name">
+                           <fieldref>name_len</fieldref>
+                       </list>
+               </reply>
+       </request>
+
+       <request name="ListOutputProperties" opcode="10">
+               <field type="CARD32" name="output" />
+               <reply>
+                       <pad bytes="1" />
+                       <field type="CARD16" name="num_atoms" />
+                       <pad bytes="22" />
+                       <list type="ATOM" name="atoms">
+                               <fieldref>num_atoms</fieldref>
+                       </list>
+               </reply>
+       </request>
+
+       <request name="QueryOutputProperty" opcode="11">
+               <field type="CARD32" name="output" />
+               <field type="ATOM" name="property" />
+               <reply>
+                       <pad bytes="1" />
+                       <field type="BOOL" name="pending" />
+                       <field type="BOOL" name="range" />
+                       <field type="BOOL" name="immutable" />
+                       <pad bytes="21" />
+                       <list type="INT32" name="validValues">
+                               <fieldref>length</fieldref>
+                       </list>
+               </reply>
+       </request>
+
+       <request name="ConfigureOutputProperty" opcode="12">
+               <field type="CARD32" name="output" />
+               <field type="ATOM" name="property" />
+               <field type="BOOL" name="pending" />
+               <field type="BOOL" name="range" />
+               <pad bytes="2" />
+       </request>
+
+       <request name="ChangeOutputProperty" opcode="13">
+               <field type="CARD32" name="output" />
+               <field type="ATOM" name="property" />
+               <field type="ATOM" name="type" />
+               <field type="CARD8" name="format" />
+               <field type="CARD8" name="mode" />
+               <pad bytes="2" />
+               <field type="CARD32" name="num_units" />
+       </request>
+
+       <request name="DeleteOutputProperty" opcode="14">
+               <field type="CARD32" name="output" />
+               <field type="ATOM" name="property" />
+       </request>
+
+       <!-- NOTE: num_items depends on format (8/16/32) -->
+       <request name="GetOutputProperty" opcode="15">
+               <field type="CARD32" name="output" />
+               <field type="ATOM" name="property" />
+               <field type="ATOM" name="type" />
+               <field type="CARD32" name="long_offset" />
+               <field type="CARD32" name="long_length" />
+               <field type="BOOL" name="delete" />
+               <field type="BOOL" name="pending" />
+               <reply>
+                       <field type="CARD8" name="format" />
+                       <field type="ATOM" name="type" />
+                       <field type="CARD32" name="bytes_after" />
+                       <field type="CARD32" name="num_items" />
+                       <pad bytes="12" />
+                       <list type="BYTE" name="data">
+                               <!-- n * format / 8 -->
+                               <op op="*">
+                                       <fieldref>num_items</fieldref>
+                                       <op op="/">
+                                               <fieldref>format</fieldref>
+                                               <value>8</value>
+                                       </op>
+                               </op>
+                       </list>
+               </reply>
+       </request>
+
+       <request name="CreateMode" opcode="16">
+               <field type="WINDOW" name="window" />
+               <field type="ModeInfo" name="mode_info" />
+               <reply>
+                       <field type="CARD8" name="status" />    <!-- enum SetConfig -->
+                       <field type="CARD32" name="mode" />
+               </reply>
+       </request>
+
+       <request name="DestroyMode" opcode="17">
+               <field type="CARD32" name="mode" />
+       </request>
+
+       <request name="AddOutputMode" opcode="18">
+               <field type="CARD32" name="output" />
+               <field type="CARD32" name="mode" />
+       </request>
+
+       <request name="DeleteOutputMode" opcode="19">
+               <field type="CARD32" name="output" />
+               <field type="CARD32" name="mode" />
+       </request>
+
+       <request name="GetCrtcInfo" opcode="20">
+               <field type="CARD32" name="crtc" />
+               <field type="TIMESTAMP" name="config_timestamp" />
+               <reply>
+                       <field type="CARD8" name="status" />    <!-- enum SetConfig -->
+                       <field type="TIMESTAMP" name="timestamp" />
+                       <field type="CARD32" name="crtc" />
+                       <field type="INT16" name="x" />
+                       <field type="INT16" name="y" />
+                       <field type="CARD16" name="width" />
+                       <field type="CARD16" name="height" />
+                       <field type="CARD32" name="mode" />
+                       <field type="CARD16" name="rotation" />         <!-- enum Rotation -->
+                       <field type="CARD16" name="rotations" />        <!-- mask of enum Rotation -->
+                       <field type="CARD16" name="num_outputs" />
+                       <field type="CARD16" name="num_possible_outputs" />
+                       <list type="CARD32" name="outputs">
+                               <fieldref>num_outputs</fieldref>
+                       </list>
+               </reply>
+       </request>
+
+       <request name="SetCrtcConfig" opcode="21">
+               <field type="CARD32" name="crtc" />
+               <field type="TIMESTAMP" name="timestamp" />
+               <field type="TIMESTAMP" name="config_timestamp" />
+               <field type="INT16" name="x" />
+               <field type="INT16" name="y" />
+               <field type="CARD32" name="mode" />
+               <field type="CARD16" name="rotation" />         <!-- enum Rotation -->
+               <reply>
+                       <field type="CARD8" name="status" />    <!-- enum SetConfig -->
+                       <field type="TIMESTAMP" name="timestamp" />
+               </reply>
+       </request>
+
+       <request name="GetCrtcGammaSize" opcode="22">
+               <field type="CARD32" name="crtc" />
+               <reply>
+                       <field type="CARD8" name="status" />    <!-- enum SetConfig -->
+                       <field type="CARD16" name="size" />
+               </reply>
+       </request>
+
+       <request name="GetCrtcGamma" opcode="23">
+               <field type="CARD32" name="crtc" />
+               <reply>
+                       <field type="CARD8" name="status" />    <!-- enum SetConfig -->
+                       <field type="CARD16" name="size" />
+                       <pad bytes="22" />
+                       <list type="CARD16" name="red">
+                               <fieldref>size</fieldref>
+                       </list>
+                       <list type="CARD16" name="green">
+                               <fieldref>size</fieldref>
+                       </list>
+                       <list type="CARD16" name="blue">
+                               <fieldref>size</fieldref>
+                       </list>
+               </reply>
+       </request>
+
+       <request name="SetCrtcGamma" opcode="24">
+               <field type="CARD32" name="crtc" />
+               <field type="CARD16" name="size" />
+               <pad bytes="2"/>
+               <list type="CARD16" name="red">
+                       <fieldref>size</fieldref>
+               </list>
+               <list type="CARD16" name="green">
+                       <fieldref>size</fieldref>
+               </list>
+               <list type="CARD16" name="blue">
+                       <fieldref>size</fieldref>
+               </list>
+       </request>
+
+       <!-- Events -->
+
+       <enum name="NotifyMask" >
+               <item name="ScreenChange">  <bit>0</bit></item>
+               <!-- new in 1.2 -->
+               <item name="CrtcChange">    <bit>1</bit></item>
+               <item name="OutputChange">  <bit>2</bit></item>
+               <item name="OutputProperty"><bit>3</bit></item>
        </enum>
        
        <event name="ScreenChangeNotify" number="0">
@@ -141,10 +459,63 @@ authorization from the authors.
                <field type="WINDOW" name="request_window" />
                <field type="CARD16" name="sizeID" />
                <field type="CARD16" name="subpixel_order" />
-               <field type="INT16" name="width" />
-               <field type="INT16" name="height" />
-               <field type="INT16" name="mwidth" />
-               <field type="INT16" name="mheight" />
+               <field type="CARD16" name="width" />
+               <field type="CARD16" name="height" />
+               <field type="CARD16" name="mwidth" />
+               <field type="CARD16" name="mheight" />
+       </event>
+
+       <!-- New in version 1.2 -->
+
+       <!-- subcode -->
+       <enum name="Notify" >
+               <item name="CrtcChange">    <value>0</value></item>
+               <item name="OutputChange">  <value>1</value></item>
+               <item name="OutputProperty"><value>2</value></item>
+       </enum>
+
+       <struct name="CrtcChange">
+               <field type="TIMESTAMP" name="timestamp" />
+               <field type="WINDOW" name="window" />
+               <field type="CARD32" name="crtc" />
+               <field type="CARD32" name="mode" />
+               <field type="CARD16" name="rotation" />         <!-- enum Rotation -->
+               <pad bytes="2" />
+               <field type="INT16" name="x" />
+               <field type="INT16" name="y" />
+               <field type="CARD16" name="width" />
+               <field type="CARD16" name="height" />
+       </struct>
+
+       <struct name="OutputChange">
+               <field type="TIMESTAMP" name="timestamp" />
+               <field type="TIMESTAMP" name="config_timestamp" />
+               <field type="WINDOW" name="window" />
+               <field type="CARD32" name="output" />
+               <field type="CARD32" name="crtc" />
+               <field type="CARD32" name="mode" />
+               <field type="CARD16" name="rotation" />         <!-- enum Rotation -->
+               <field type="CARD8" name="connection" />        <!-- enum Connection -->
+               <field type="CARD8" name="subpixel_order" />
+       </struct>
+
+       <struct name="OutputProperty">
+               <field type="WINDOW" name="window" />
+               <field type="CARD32" name="output" />
+               <field type="ATOM" name="atom" />
+               <field type="TIMESTAMP" name="timestamp" />
+               <field type="CARD8" name="status" />            <!-- core enum Property -->
+               <pad bytes="11" />
+       </struct>
+
+       <union name="NotifyData">
+               <field type="CrtcChange"     name="cc" />
+               <field type="OutputChange"   name="oc" />
+               <field type="OutputProperty" name="op" />
+       </union>
+
+       <event name="Notify" number="1">
+               <field type="CARD8" name="subCode" />           <!-- enum Notify -->
+               <field type="NotifyData" name="u" />
        </event>
-               
 </xcb>