Well clearly gmail does line wrapping, which I did not realize. So while I figure that out, please enjoy the patch which I attached.
On 19 April 2015 at 22:30, Auke Booij <a...@tulcod.com> wrote: > On 19 April 2015 at 14:51, Jeroen Bollen <jbin...@gmail.com> wrote: >> Hello, >> >> It seems like this discussion died off. Currently there is no way to tell, >> from the Wayland XML specification whether an argument is a bitfield, or >> whether the argument takes an enum and what enum this is. >> >> I am currently in the progress of writing a Wayland binding generator for >> the Rust language. This language, like many others is strongly typed. To >> make full usage of this type system, it would be beneficial to know from the >> specification whether an argument is a bitfield, and what enum type it >> takes. >> >> Surely there are more people who generate bindings to these strongly typed >> languages. How have you fixed the issue? Are there patched versions >> available, and maybe pending to be merged? I have looked around a bit, and >> didn't find anything, but then again, I'm not familiar with Wayland >> development. (This is the first time I use a mailing list!) > > Quite coincidentally, I was planning on writing a similar email quite > soon, so I'll just go ahead and write what I wanted to say! > > I wrote Haskell bindings, and the same problem occurs there. I did not > find a way to solve the problem, and it would be best if such an enum > argument be added to the spec. > > I wrote the patch below. It introduces an "enum" attribute that allows > message arguments to refer to the enum collection they're using (it is > understood that this enum is part of the same interface). I also added > a "bitfield" attribute to enums that indicates whether the enum values > are to be OR'ed together, or to be used as-is: ie whether the enum > values are actually enums or actually flag fields. > > > > This improvement to the protocol allows you to refer to the kind of > enum you are expecting. > It also introduces a distinction between enums that are bitfields, ie > that can be OR'ed together. > --- > protocol/wayland.dtd | 2 ++ > protocol/wayland.xml | 32 ++++++++++++++++---------------- > 2 files changed, 18 insertions(+), 16 deletions(-) > > diff --git a/protocol/wayland.dtd b/protocol/wayland.dtd > index b8b1573..3b67ca8 100644 > --- a/protocol/wayland.dtd > +++ b/protocol/wayland.dtd > @@ -14,6 +14,7 @@ > <!ELEMENT enum (description?,entry*)> > <!ATTLIST enum name CDATA #REQUIRED> > <!ATTLIST enum since CDATA #IMPLIED> > + <!ATTLIST enum bitfield CDATA #IMPLIED> > <!ELEMENT entry (description?)> > <!ATTLIST entry name CDATA #REQUIRED> > <!ATTLIST entry value CDATA #REQUIRED> > @@ -25,5 +26,6 @@ > <!ATTLIST arg summary CDATA #IMPLIED> > <!ATTLIST arg interface CDATA #IMPLIED> > <!ATTLIST arg allow-null CDATA #IMPLIED> > + <!ATTLIST arg enum CDATA #IMPLIED> > <!ELEMENT description (#PCDATA)> > <!ATTLIST description summary CDATA #REQUIRED> > diff --git a/protocol/wayland.xml b/protocol/wayland.xml > index f52677f..2b9efa1 100644 > --- a/protocol/wayland.xml > +++ b/protocol/wayland.xml > @@ -367,7 +367,7 @@ > can be used for buffers. Known formats include > argb8888 and xrgb8888. > </description> > - <arg name="format" type="uint"/> > + <arg name="format" type="uint" enum="format"/> > </event> > </interface> > > @@ -774,7 +774,7 @@ > </description> > <arg name="seat" type="object" interface="wl_seat" summary="the > wl_seat whose pointer is used"/> > <arg name="serial" type="uint" summary="serial of the implicit > grab on the pointer"/> > - <arg name="edges" type="uint" summary="which edge or corner is > being dragged"/> > + <arg name="edges" type="uint" summary="which edge or corner is > being dragged" enum="resize"/> > </request> > > <request name="set_toplevel"> > @@ -785,7 +785,7 @@ > </description> > </request> > > - <enum name="transient"> > + <enum name="transient" bitfield="true"> > <description summary="details of transient behaviour"> > These flags specify details of the expected behaviour > of transient surfaces. Used in the set_transient request. > @@ -807,7 +807,7 @@ > <arg name="parent" type="object" interface="wl_surface"/> > <arg name="x" type="int"/> > <arg name="y" type="int"/> > - <arg name="flags" type="uint"/> > + <arg name="flags" type="uint" enum="transient"/> > </request> > > <enum name="fullscreen_method"> > @@ -891,7 +891,7 @@ > <arg name="parent" type="object" interface="wl_surface"/> > <arg name="x" type="int"/> > <arg name="y" type="int"/> > - <arg name="flags" type="uint"/> > + <arg name="flags" type="uint" enum="transient"/> > </request> > > <request name="set_maximized"> > @@ -972,7 +972,7 @@ > in surface local coordinates. > </description> > > - <arg name="edges" type="uint"/> > + <arg name="edges" type="uint" enum="resize"/> > <arg name="width" type="int"/> > <arg name="height" type="int"/> > </event> > @@ -1337,7 +1337,7 @@ > maintains a keyboard focus and a pointer focus. > </description> > > - <enum name="capability"> > + <enum name="capability" bitfield="true"> > <description summary="seat capability bitmask"> > This is a bitmask of capabilities this seat has; if a member is > set, then it is present on the seat. > @@ -1353,7 +1353,7 @@ > keyboard or touch capabilities. The argument is a capability > enum containing the complete set of capabilities this seat has. > </description> > - <arg name="capabilities" type="uint"/> > + <arg name="capabilities" type="uint" enum="capability"/> > </event> > > <request name="get_pointer"> > @@ -1521,7 +1521,7 @@ > <arg name="serial" type="uint"/> > <arg name="time" type="uint" summary="timestamp with > millisecond granularity"/> > <arg name="button" type="uint"/> > - <arg name="state" type="uint"/> > + <arg name="state" type="uint" enum="button_state"/> > </event> > > <enum name="axis"> > @@ -1553,7 +1553,7 @@ > </description> > > <arg name="time" type="uint" summary="timestamp with > millisecond granularity"/> > - <arg name="axis" type="uint"/> > + <arg name="axis" type="uint" enum="axis"/> > <arg name="value" type="fixed"/> > </event> > > @@ -1593,7 +1593,7 @@ > This event provides a file descriptor to the client which can be > memory-mapped to provide a keyboard mapping description. > </description> > - <arg name="format" type="uint"/> > + <arg name="format" type="uint" enum="keymap_format"/> > <arg name="fd" type="fd"/> > <arg name="size" type="uint"/> > </event> > @@ -1638,7 +1638,7 @@ > <arg name="serial" type="uint"/> > <arg name="time" type="uint" summary="timestamp with > millisecond granularity"/> > <arg name="key" type="uint"/> > - <arg name="state" type="uint"/> > + <arg name="state" type="uint" enum="key_state"/> > </event> > > <event name="modifiers"> > @@ -1819,17 +1819,17 @@ > summary="width in millimeters of the output"/> > <arg name="physical_height" type="int" > summary="height in millimeters of the output"/> > - <arg name="subpixel" type="int" > + <arg name="subpixel" type="int" enum="subpixel" > summary="subpixel orientation of the output"/> > <arg name="make" type="string" > summary="textual description of the manufacturer"/> > <arg name="model" type="string" > summary="textual description of the model"/> > - <arg name="transform" type="int" > + <arg name="transform" type="int" enum="transform" > summary="transform that maps framebuffer to output"/> > </event> > > - <enum name="mode"> > + <enum name="mode" bitfield="true"> > <description summary="mode information"> > These flags describe properties of an output mode. > They are used in the flags bitfield of the mode event. > @@ -1856,7 +1856,7 @@ > the output may be scaled, as described in wl_output.scale, > or transformed , as described in wl_output.transform. > </description> > - <arg name="flags" type="uint" summary="bitfield of mode flags"/> > + <arg name="flags" type="uint" summary="bitfield of mode flags" > enum="mode"/> > <arg name="width" type="int" summary="width of the mode in > hardware units"/> > <arg name="height" type="int" summary="height of the mode in > hardware units"/> > <arg name="refresh" type="int" summary="vertical refresh rate in mHz"/> > -- > 2.3.5
From 2a8ad2d93465048b4c6869cd3266d3c66b1693e7 Mon Sep 17 00:00:00 2001 From: Auke Booij <a...@tulcod.com> Date: Sat, 18 Apr 2015 13:34:43 +0200 Subject: [PATCH] Clarify the enum argument type This improvement to the protocol allows you to refer to the kind of enum you are expecting. It also introduces a distinction between enums that are bitfields, ie that can be OR'ed together. --- protocol/wayland.dtd | 2 ++ protocol/wayland.xml | 32 ++++++++++++++++---------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/protocol/wayland.dtd b/protocol/wayland.dtd index b8b1573..3b67ca8 100644 --- a/protocol/wayland.dtd +++ b/protocol/wayland.dtd @@ -14,6 +14,7 @@ <!ELEMENT enum (description?,entry*)> <!ATTLIST enum name CDATA #REQUIRED> <!ATTLIST enum since CDATA #IMPLIED> + <!ATTLIST enum bitfield CDATA #IMPLIED> <!ELEMENT entry (description?)> <!ATTLIST entry name CDATA #REQUIRED> <!ATTLIST entry value CDATA #REQUIRED> @@ -25,5 +26,6 @@ <!ATTLIST arg summary CDATA #IMPLIED> <!ATTLIST arg interface CDATA #IMPLIED> <!ATTLIST arg allow-null CDATA #IMPLIED> + <!ATTLIST arg enum CDATA #IMPLIED> <!ELEMENT description (#PCDATA)> <!ATTLIST description summary CDATA #REQUIRED> diff --git a/protocol/wayland.xml b/protocol/wayland.xml index f52677f..2b9efa1 100644 --- a/protocol/wayland.xml +++ b/protocol/wayland.xml @@ -367,7 +367,7 @@ can be used for buffers. Known formats include argb8888 and xrgb8888. </description> - <arg name="format" type="uint"/> + <arg name="format" type="uint" enum="format"/> </event> </interface> @@ -774,7 +774,7 @@ </description> <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/> <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> - <arg name="edges" type="uint" summary="which edge or corner is being dragged"/> + <arg name="edges" type="uint" summary="which edge or corner is being dragged" enum="resize"/> </request> <request name="set_toplevel"> @@ -785,7 +785,7 @@ </description> </request> - <enum name="transient"> + <enum name="transient" bitfield="true"> <description summary="details of transient behaviour"> These flags specify details of the expected behaviour of transient surfaces. Used in the set_transient request. @@ -807,7 +807,7 @@ <arg name="parent" type="object" interface="wl_surface"/> <arg name="x" type="int"/> <arg name="y" type="int"/> - <arg name="flags" type="uint"/> + <arg name="flags" type="uint" enum="transient"/> </request> <enum name="fullscreen_method"> @@ -891,7 +891,7 @@ <arg name="parent" type="object" interface="wl_surface"/> <arg name="x" type="int"/> <arg name="y" type="int"/> - <arg name="flags" type="uint"/> + <arg name="flags" type="uint" enum="transient"/> </request> <request name="set_maximized"> @@ -972,7 +972,7 @@ in surface local coordinates. </description> - <arg name="edges" type="uint"/> + <arg name="edges" type="uint" enum="resize"/> <arg name="width" type="int"/> <arg name="height" type="int"/> </event> @@ -1337,7 +1337,7 @@ maintains a keyboard focus and a pointer focus. </description> - <enum name="capability"> + <enum name="capability" bitfield="true"> <description summary="seat capability bitmask"> This is a bitmask of capabilities this seat has; if a member is set, then it is present on the seat. @@ -1353,7 +1353,7 @@ keyboard or touch capabilities. The argument is a capability enum containing the complete set of capabilities this seat has. </description> - <arg name="capabilities" type="uint"/> + <arg name="capabilities" type="uint" enum="capability"/> </event> <request name="get_pointer"> @@ -1521,7 +1521,7 @@ <arg name="serial" type="uint"/> <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> <arg name="button" type="uint"/> - <arg name="state" type="uint"/> + <arg name="state" type="uint" enum="button_state"/> </event> <enum name="axis"> @@ -1553,7 +1553,7 @@ </description> <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> - <arg name="axis" type="uint"/> + <arg name="axis" type="uint" enum="axis"/> <arg name="value" type="fixed"/> </event> @@ -1593,7 +1593,7 @@ This event provides a file descriptor to the client which can be memory-mapped to provide a keyboard mapping description. </description> - <arg name="format" type="uint"/> + <arg name="format" type="uint" enum="keymap_format"/> <arg name="fd" type="fd"/> <arg name="size" type="uint"/> </event> @@ -1638,7 +1638,7 @@ <arg name="serial" type="uint"/> <arg name="time" type="uint" summary="timestamp with millisecond granularity"/> <arg name="key" type="uint"/> - <arg name="state" type="uint"/> + <arg name="state" type="uint" enum="key_state"/> </event> <event name="modifiers"> @@ -1819,17 +1819,17 @@ summary="width in millimeters of the output"/> <arg name="physical_height" type="int" summary="height in millimeters of the output"/> - <arg name="subpixel" type="int" + <arg name="subpixel" type="int" enum="subpixel" summary="subpixel orientation of the output"/> <arg name="make" type="string" summary="textual description of the manufacturer"/> <arg name="model" type="string" summary="textual description of the model"/> - <arg name="transform" type="int" + <arg name="transform" type="int" enum="transform" summary="transform that maps framebuffer to output"/> </event> - <enum name="mode"> + <enum name="mode" bitfield="true"> <description summary="mode information"> These flags describe properties of an output mode. They are used in the flags bitfield of the mode event. @@ -1856,7 +1856,7 @@ the output may be scaled, as described in wl_output.scale, or transformed , as described in wl_output.transform. </description> - <arg name="flags" type="uint" summary="bitfield of mode flags"/> + <arg name="flags" type="uint" summary="bitfield of mode flags" enum="mode"/> <arg name="width" type="int" summary="width of the mode in hardware units"/> <arg name="height" type="int" summary="height of the mode in hardware units"/> <arg name="refresh" type="int" summary="vertical refresh rate in mHz"/> -- 2.3.5
_______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel