[PATCH] Add the KDE server decoration protocol

David Edmundson david at davidedmundson.co.uk
Fri Oct 27 12:13:15 UTC 2017


The server decoration protocol negotiates between the client and server
whether the client should default to drawing window decorations, and
informs the compositor what the client is doing.

This is useful not just for a compostior that is doing decorations
itself, but much more importantly for a toolkit, such as Qt which
primarily targets embedded and IVI applications, not to have to modify
clients
to add a header bar which makes them usable on a desktop compositor.

This file is currently copied in multiple places across GTK, Sway as well
as being needed in both Qt and KDE. We should have this in a shared
place.
---
 unstable/server-decoration/server-decoration.xml | 94
++++++++++++++++++++++++
 1 file changed, 94 insertions(+)
 create mode 100644 unstable/server-decoration/server-decoration.xml

diff --git a/unstable/server-decoration/server-decoration.xml
b/unstable/server-decoration/server-decoration.xml
new file mode 100644
index 0000000..8bc106c
--- /dev/null
+++ b/unstable/server-decoration/server-decoration.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="server_decoration">
+  <copyright><![CDATA[
+    Copyright (C) 2015 Martin Gräßlin
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Lesser General Public License as
published by
+    the Free Software Foundation, either version 2.1 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+  ]]></copyright>
+  <interface  name="org_kde_kwin_server_decoration_manager" version="1">
+      <description summary="Server side window decoration manager">
+        This interface allows to coordinate whether the server should
create
+        a server-side window decoration around a wl_surface representing a
+        shell surface (wl_shell_surface or similar). By announcing support
+        for this interface the server indicates that it supports server
+        side decorations.
+      </description>
+      <request name="create">
+        <description summary="Create a server-side decoration object for a
given surface">
+            When a client creates a server-side decoration object it
indicates
+            that it supports the protocol. The client is supposed to tell
the
+            server whether it wants server-side decorations or will provide
+            client-side decorations.
+
+            If the client does not create a server-side decoration object
for
+            a surface the server interprets this as lack of support for
this
+            protocol and considers it as client-side decorated.
Nevertheless a
+            client-side decorated surface should use this protocol to
indicate
+            to the server that it does not want a server-side deco.
+        </description>
+        <arg name="id" type="new_id"
interface="org_kde_kwin_server_decoration"/>
+        <arg name="surface" type="object" interface="wl_surface"/>
+      </request>
+      <enum name="mode">
+            <description summary="Possible values to use in request_mode
and the event mode."/>
+            <entry name="None" value="0" summary="Undecorated: The surface
is not decorated at all, neither server nor client-side. An example is a
popup surface which should not be decorated."/>
+            <entry name="Client" value="1" summary="Client-side
decoration: The decoration is part of the surface and the client."/>
+            <entry name="Server" value="2" summary="Server-side
decoration: The server embeds the surface into a decoration frame."/>
+      </enum>
+      <event name="default_mode">
+          <description summary="The default mode used on the server">
+              This event is emitted directly after binding the interface.
It contains
+              the default mode for the decoration. When a new server
decoration object
+              is created this new object will be in the default mode until
the first
+              request_mode is requested.
+
+              The server may change the default mode at any time.
+          </description>
+          <arg name="mode" type="uint" summary="The default decoration
mode applied to newly created server decorations."/>
+      </event>
+  </interface>
+  <interface name="org_kde_kwin_server_decoration" version="1">
+      <request name="release" type="destructor">
+        <description summary="release the server decoration object"/>
+      </request>
+      <enum name="mode">
+            <description summary="Possible values to use in request_mode
and the event mode."/>
+            <entry name="None" value="0" summary="Undecorated: The surface
is not decorated at all, neither server nor client-side. An example is a
popup surface which should not be decorated."/>
+            <entry name="Client" value="1" summary="Client-side
decoration: The decoration is part of the surface and the client."/>
+            <entry name="Server" value="2" summary="Server-side
decoration: The server embeds the surface into a decoration frame."/>
+      </enum>
+      <request name="request_mode">
+          <description summary="The decoration mode the surface wants to
use."/>
+          <arg name="mode" type="uint" summary="The mode this surface
wants to use."/>
+      </request>
+      <event name="mode">
+          <description summary="The new decoration mode applied by the
server">
+              This event is emitted directly after the decoration is
created and
+              represents the base decoration policy by the server. E.g. a
server
+              which wants all surfaces to be client-side decorated will
send Client,
+              a server which wants server-side decoration will send Server.
+
+              The client can request a different mode through the
decoration request.
+              The server will acknowledge this by another event with the
same mode. So
+              even if a server prefers server-side decoration it's
possible to force a
+              client-side decoration.
+
+              The server may emit this event at any time. In this case the
client can
+              again request a different mode. It's the responsibility of
the server to
+              prevent a feedback loop.
+          </description>
+          <arg name="mode" type="uint" summary="The decoration mode
applied to the surface by the server."/>
+      </event>
+  </interface>
+</protocol>
-- 
2.14.1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/wayland-devel/attachments/20171027/96c0a2c7/attachment-0001.html>


More information about the wayland-devel mailing list