aboutsummaryrefslogtreecommitdiff
path: root/protocol
diff options
context:
space:
mode:
Diffstat (limited to 'protocol')
-rw-r--r--protocol/river-layout-v2.xml256
-rw-r--r--protocol/river-layout-v3.xml181
2 files changed, 181 insertions, 256 deletions
diff --git a/protocol/river-layout-v2.xml b/protocol/river-layout-v2.xml
deleted file mode 100644
index f0c82e0..0000000
--- a/protocol/river-layout-v2.xml
+++ /dev/null
@@ -1,256 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<protocol name="river_layout_v2">
- <copyright>
- Copyright 2020-2021 The River Developers
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- </copyright>
-
- <description summary="let clients propose view positions and dimensions">
- This protocol specifies a way for clients to propose arbitrary positions and
- dimensions for a set of views on a specific output of a compositor through
- the river_layout_v2 object.
-
- This set of views is logically structured as a simple list. Views
- in this list cannot be individually addressed, instead the order of
- requests/events is significant.
-
- The entire set of proposed positions and dimensions for the views in the
- list are called a layout. Due to their list heritage, layouts are also
- logically strictly linear; Any complex underlying data structure a client
- may use when generating the layout is lost in transmission. This is an
- intentional limitation.
-
- Note that the client may need to handle multiple layout demands per
- river_layout_v2 object simultaneously.
-
- Warning! The protocol described in this file is currently in the testing
- phase. Backward compatible changes may be added together with the
- corresponding interface version bump. Backward incompatible changes can
- only be done by creating a new major version of the extension.
- </description>
-
- <interface name="river_layout_manager_v2" version="1">
- <description summary="manage river layout objects">
- A global factory for river_layout_v2 objects.
- </description>
-
- <request name="destroy" type="destructor">
- <description summary="destroy the river_layout_manager object">
- This request indicates that the client will not use the
- river_layout_manager object any more. Objects that have been created
- through this instance are not affected.
- </description>
- </request>
-
- <request name="get_layout">
- <description summary="create a river_layout_v2 object">
- This creates a new river_layout_v2 object for the given wl_output.
-
- All layout related communication is done through this interface.
-
- The namespace is used by the compositor to decide which river_layout_v2
- object will receive layout demands for the output.
-
- The namespace is required to be be unique per-output. Furthermore,
- two separate clients may not share a namespace on separate outputs. If
- these conditions are not upheld, the the namespace_in_use event will
- be sent directly after creation of the river_layout_v2 object.
- </description>
- <arg name="id" type="new_id" interface="river_layout_v2"/>
- <arg name="output" type="object" interface="wl_output"/>
- <arg name="namespace" type="string" summary="namespace of the layout object"/>
- </request>
- </interface>
-
- <interface name="river_layout_v2" version="1">
- <description summary="receive and respond to layout demands">
- This interface allows clients to receive layout demands from the
- compositor for a specific output and subsequently propose positions and
- dimensions of individual views.
- </description>
-
- <enum name="error">
- <entry name="count_mismatch" value="0" summary="number of
- proposed dimensions does not match number of views in layout"/>
- <entry name="already_committed" value="1" summary="the layout demand with
- the provided serial was already committed"/>
- </enum>
-
- <request name="destroy" type="destructor">
- <description summary="destroy the river_layout_v2 object">
- This request indicates that the client will not use the river_layout_v2
- object any more.
- </description>
- </request>
-
- <event name="namespace_in_use">
- <description summary="the requested namespace is already in use">
- After this event is sent, all requests aside from the destroy event
- will be ignored by the server. If the client wishes to try again with
- a different namespace they must create a new river_layout_v2 object.
- </description>
- </event>
-
- <event name="layout_demand">
- <description summary="the compositor requires a layout">
- The compositor sends this event to inform the client that it requires a
- layout for a set of views.
-
- The usable width and height height indicate the space in which the
- client can safely position views without interfering with desktop
- widgets such as panels.
-
- The serial of this event is used to identify subsequent events and
- request as belonging to this layout demand. Beware that the client
- might need to handle multiple layout demands at the same time.
-
- The server will ignore responses to all but the most recent
- layout demand. Thus, clients are only required to respond to the most
- recent layout_demand received. If a newer layout_demand is received
- before the client has finished responding to an old demand, the client
- may abort work on the old demand as any further work would be wasted.
- </description>
- <arg name="view_count" type="uint" summary="number of views in the layout"/>
- <arg name="usable_width" type="uint" summary="width of the usable area"/>
- <arg name="usable_height" type="uint" summary="height of the usable area"/>
- <arg name="tags" type="uint" summary="tags of the output, 32-bit bitfield"/>
- <arg name="serial" type="uint" summary="serial of the layout demand"/>
- </event>
-
- <event name="advertise_view">
- <description summary="make layout client aware of view">
- This event is sent by the server as part of the layout demand with
- matching serial. It provides additional information about one of
- the views to be arranged.
-
- Every view part of the layout demand is advertised exactly once,
- in the order of the view list.
- </description>
- <arg name="tags" type="uint" summary="tags of the view, 32-bit bitfield"/>
- <arg name="app_id" type="string" summary="view app-id" allow-null="true"/>
- <arg name="serial" type="uint" summary="serial of the layout demand"/>
- </event>
-
- <event name="advertise_done">
- <description summary="all views have been advertised">
- This event is sent by the server as the last event of the layout
- demand with matching serial, after all advertise_view events.
- </description>
- <arg name="serial" type="uint" summary="serial of the layout demand"/>
- </event>
-
- <request name="push_view_dimensions">
- <description summary="propose dimensions of the next view">
- This request proposes a size and position of a view in the layout demand
- with matching serial.
-
- Pushed view dimensions apply to the views in the same order they were
- advertised. That is, the first push_view_dimensions request applies
- to the first view advertised, the second to the second, and so on.
-
- A client must propose position and dimensions for the entire set of
- views. Proposing too many or too few view dimensions is a protocol error.
-
- This request may be sent before the corresponding view has been
- advertised.
-
- The x and y coordinates are relative to the usable area of the output,
- with (0,0) as the top left corner.
- </description>
- <arg name="serial" type="uint" summary="serial of layout demand"/>
- <arg name="x" type="int" summary="x coordinate of view"/>
- <arg name="y" type="int" summary="y coordinate of view"/>
- <arg name="width" type="uint" summary="width of view"/>
- <arg name="height" type="uint" summary="height of view"/>
- </request>
-
- <request name="commit">
- <description summary="commit a layout">
- This request indicates that the client is done pushing dimensions
- and the compositor may apply the layout. This completes the layout
- demand with matching serial, any other requests sent with the serial
- are a protocol error.
-
- The compositor is free to use this proposed layout however it chooses,
- including ignoring it.
- </description>
- <arg name="serial" type="uint" summary="serial of layout demand"/>
- </request>
-
- <event name="set_int_value">
- <description summary="an int value has been set">
- This event indicates that the value of this river_layout_v2 object
- with the given name has been set to the given value.
-
- This event will be followed by a layout_demand if necessary (i.e. if
- this layout object is currently being used by the compositor to
- layout an output)
- </description>
- <arg name="name" type="string"/>
- <arg name="value" type="int"/>
- </event>
-
- <event name="mod_int_value">
- <description summary="an int value has been modified">
- This event indicates that the value of this river_layout_v2 object
- with the given name has been modifed by the given delta.
-
- This event will be followed by a layout_demand if necessary (i.e. if
- this layout object is currently being used by the compositor to
- layout an output)
- </description>
- <arg name="name" type="string"/>
- <arg name="delta" type="int"/>
- </event>
-
- <event name="set_fixed_value">
- <description summary="a fixed value has been set">
- This event indicates that the value of this river_layout_v2 object
- with the given name has been set to the given value.
-
- This event will be followed by a layout_demand if necessary (i.e. if
- this layout object is currently being used by the compositor to
- layout an output)
- </description>
- <arg name="name" type="string"/>
- <arg name="value" type="fixed"/>
- </event>
-
- <event name="mod_fixed_value">
- <description summary="a fixed value has been modified">
- This event indicates that the value of this river_layout_v2 object
- with the given name has been modifed by the given delta.
-
- This event will be followed by a layout_demand if necessary (i.e. if
- this layout object is currently being used by the compositor to
- layout an output)
- </description>
- <arg name="name" type="string"/>
- <arg name="delta" type="fixed"/>
- </event>
-
- <event name="set_string_value">
- <description summary="a string value has been set">
- This event indicates that the value of this river_layout_v2 object
- with the given name has been set to the given value.
-
- This event will be followed by a layout_demand if necessary (i.e. if
- this layout object is currently being used by the compositor to
- layout an output)
- </description>
- <arg name="name" type="string"/>
- <arg name="value" type="string"/>
- </event>
- </interface>
-</protocol>
diff --git a/protocol/river-layout-v3.xml b/protocol/river-layout-v3.xml
new file mode 100644
index 0000000..3363355
--- /dev/null
+++ b/protocol/river-layout-v3.xml
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="river_layout_v3">
+ <copyright>
+ Copyright 2020-2021 The River Developers
+
+ Permission to use, copy, modify, and/or distribute this software for any
+ purpose with or without fee is hereby granted, provided that the above
+ copyright notice and this permission notice appear in all copies.
+
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ </copyright>
+
+ <description summary="let clients propose view positions and dimensions">
+ This protocol specifies a way for clients to propose arbitrary positions
+ and dimensions for a set of views on a specific output of a compositor
+ through the river_layout_v3 object.
+
+ Layouts are a strictly linear list of views, the position and dimensions
+ of which are supplied by the client. Any complex underlying data structure
+ a client may use when generating the layout is lost in transmission. This
+ is an intentional limitation.
+
+ Additonally, this protocol allows the compositor to deliver arbitrary
+ user-provided commands associated with a layout to clients. A client
+ may use these commands to implement runtime configuration/control, or
+ may ignore them entirely. How the user provides these commands to the
+ compositor is not specified by this protocol and left to compositor policy.
+
+ Warning! The protocol described in this file is currently in the
+ testing phase. Backward compatible changes may be added together with
+ the corresponding interface version bump. Backward incompatible changes
+ can only be done by creating a new major version of the extension.
+ </description>
+
+ <interface name="river_layout_manager_v3" version="1">
+ <description summary="manage river layout objects">
+ A global factory for river_layout_v3 objects.
+ </description>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the river_layout_manager object">
+ This request indicates that the client will not use the
+ river_layout_manager object any more. Objects that have been created
+ through this instance are not affected.
+ </description>
+ </request>
+
+ <request name="get_layout">
+ <description summary="create a river_layout_v3 object">
+ This creates a new river_layout_v3 object for the given wl_output.
+
+ All layout related communication is done through this interface.
+
+ The namespace is used by the compositor to decide which river_layout_v3
+ object will receive layout demands for the output.
+
+ The namespace is required to be be unique per-output. Furthermore,
+ two separate clients may not share a namespace on separate outputs. If
+ these conditions are not upheld, the the namespace_in_use event will
+ be sent directly after creation of the river_layout_v3 object.
+ </description>
+ <arg name="id" type="new_id" interface="river_layout_v3"/>
+ <arg name="output" type="object" interface="wl_output"/>
+ <arg name="namespace" type="string" summary="namespace of the layout object"/>
+ </request>
+ </interface>
+
+ <interface name="river_layout_v3" version="1">
+ <description summary="receive and respond to layout demands">
+ This interface allows clients to receive layout demands from the
+ compositor for a specific output and subsequently propose positions and
+ dimensions of individual views.
+ </description>
+
+ <enum name="error">
+ <entry name="count_mismatch" value="0" summary="number of
+ proposed dimensions does not match number of views in layout"/>
+ <entry name="already_committed" value="1" summary="the layout demand with
+ the provided serial was already committed"/>
+ </enum>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the river_layout_v3 object">
+ This request indicates that the client will not use the river_layout_v3
+ object any more.
+ </description>
+ </request>
+
+ <event name="namespace_in_use">
+ <description summary="the requested namespace is already in use">
+ After this event is sent, all requests aside from the destroy event
+ will be ignored by the server. If the client wishes to try again with
+ a different namespace they must create a new river_layout_v3 object.
+ </description>
+ </event>
+
+ <event name="layout_demand">
+ <description summary="the compositor requires a layout">
+ The compositor sends this event to inform the client that it requires a
+ layout for a set of views.
+
+ The usable width and height height indicate the space in which the
+ client can safely position views without interfering with desktop
+ widgets such as panels.
+
+ The serial of this event is used to identify subsequent requests as
+ belonging to this layout demand. Beware that the client might need
+ to handle multiple layout demands at the same time.
+
+ The server will ignore responses to all but the most recent layout
+ demand. Thus, clients are only required to respond to the most recent
+ layout_demand received. If a newer layout_demand is received before
+ the client has finished responding to an old demand, the client should
+ abort work on the old demand as any further work would be wasted.
+ </description>
+ <arg name="view_count" type="uint" summary="number of views in the layout"/>
+ <arg name="usable_width" type="uint" summary="width of the usable area"/>
+ <arg name="usable_height" type="uint" summary="height of the usable area"/>
+ <arg name="tags" type="uint" summary="tags of the output, 32-bit bitfield"/>
+ <arg name="serial" type="uint" summary="serial of the layout demand"/>
+ </event>
+
+ <request name="push_view_dimensions">
+ <description summary="propose dimensions of the next view">
+ This request proposes a size and position for a view in the layout demand
+ with matching serial.
+
+ A client must send this request for every view that is part of the
+ layout demand. The number of views in the layout is given by the
+ view_count argument of the layout_demand event. Pushing too many or
+ too few view dimensions is a protocol error.
+
+ The x and y coordinates are relative to the usable area of the output,
+ with (0,0) as the top left corner.
+ </description>
+ <arg name="x" type="int" summary="x coordinate of view"/>
+ <arg name="y" type="int" summary="y coordinate of view"/>
+ <arg name="width" type="uint" summary="width of view"/>
+ <arg name="height" type="uint" summary="height of view"/>
+ <arg name="serial" type="uint" summary="serial of layout demand"/>
+ </request>
+
+ <request name="commit">
+ <description summary="commit a layout">
+ This request indicates that the client is done pushing dimensions
+ and the compositor may apply the layout. This completes the layout
+ demand with matching serial, any other requests sent with the serial
+ are a protocol error.
+
+ The layout_name argument is a user-facing name or short description
+ of the layout that is being committed. The compositor may for example
+ display this on a status bar, though what exactly is done with it is
+ left to the compositor's discretion.
+
+ The compositor is free to use this proposed layout however it chooses,
+ including ignoring it.
+ </description>
+ <arg name="layout_name" type="string" summary="name of committed layout"/>
+ <arg name="serial" type="uint" summary="serial of layout demand"/>
+ </request>
+
+ <event name="user_command">
+ <description summary="an argument of a user command">
+ This event informs the client of a command sent to it by the user.
+
+ The semantic meaning of the command is left for the client to
+ decide. It is also free to ignore it entirely if it so chooses.
+
+ A layout_demand will be sent after this event if the compositor is
+ currently using this layout object to arrange the output.
+ </description>
+ <arg name="command" type="string"/>
+ </event>
+ </interface>
+</protocol>