From e521b0404bb1a50326404a47bdb510f8fc46898e Mon Sep 17 00:00:00 2001
From: emersion <contact@emersion.fr>
Date: Tue, 24 Oct 2017 21:56:18 +0200
Subject: Add server-decoration skeleton

---
 protocol/meson.build           |  2 +
 protocol/server-decoration.xml | 94 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 96 insertions(+)
 create mode 100644 protocol/server-decoration.xml

(limited to 'protocol')

diff --git a/protocol/meson.build b/protocol/meson.build
index 2cbb5b6d..ff54815a 100644
--- a/protocol/meson.build
+++ b/protocol/meson.build
@@ -24,12 +24,14 @@ protocols = [
 	[wl_protocol_dir, 'unstable/xdg-shell/xdg-shell-unstable-v6.xml'],
 	'gamma-control.xml',
 	'screenshooter.xml',
+	'server-decoration.xml',
 ]
 
 client_protocols = [
 	[wl_protocol_dir, 'unstable/xdg-shell/xdg-shell-unstable-v6.xml'],
 	'gamma-control.xml',
 	'screenshooter.xml',
+	'server-decoration.xml',
 ]
 
 wl_protos_src = []
diff --git a/protocol/server-decoration.xml b/protocol/server-decoration.xml
new file mode 100644
index 00000000..45f11284
--- /dev/null
+++ b/protocol/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>
-- 
cgit v1.2.3