diff options
author | Drew DeVault <sir@cmpwn.com> | 2017-04-28 20:32:05 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2017-04-28 20:32:05 -0400 |
commit | a5c07dde6aba87584ddb6c6a2769472a6003623a (patch) | |
tree | 45dd827f6c8f49ca003caefb8aa990b2f368e8f5 /protocols | |
parent | Update .build.yml (diff) | |
download | sway-a5c07dde6aba87584ddb6c6a2769472a6003623a.tar.gz sway-a5c07dde6aba87584ddb6c6a2769472a6003623a.tar.zst sway-a5c07dde6aba87584ddb6c6a2769472a6003623a.zip |
Implement KDE's server-side decoration protocol
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/CMakeLists.txt | 6 | ||||
-rw-r--r-- | protocols/server-decoration.xml | 94 |
2 files changed, 100 insertions, 0 deletions
diff --git a/protocols/CMakeLists.txt b/protocols/CMakeLists.txt index a9b459ab..8d8e58ad 100644 --- a/protocols/CMakeLists.txt +++ b/protocols/CMakeLists.txt | |||
@@ -27,6 +27,11 @@ WAYLAND_ADD_PROTOCOL_SERVER(proto-server-gamma-control | |||
27 | gamma-control | 27 | gamma-control |
28 | ) | 28 | ) |
29 | 29 | ||
30 | WAYLAND_ADD_PROTOCOL_SERVER(proto-server-server-decoration | ||
31 | server-decoration.xml | ||
32 | server-decoration | ||
33 | ) | ||
34 | |||
30 | add_library(sway-protocols STATIC | 35 | add_library(sway-protocols STATIC |
31 | ${proto-client-xdg-shell} | 36 | ${proto-client-xdg-shell} |
32 | ${proto-client-desktop-shell} | 37 | ${proto-client-desktop-shell} |
@@ -34,6 +39,7 @@ add_library(sway-protocols STATIC | |||
34 | ${proto-client-swaylock} | 39 | ${proto-client-swaylock} |
35 | ${proto-server-swaylock} | 40 | ${proto-server-swaylock} |
36 | ${proto-server-gamma-control} | 41 | ${proto-server-gamma-control} |
42 | ${proto-server-server-decoration} | ||
37 | ) | 43 | ) |
38 | 44 | ||
39 | set(PROTOCOLS_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/protocols PARENT_SCOPE) | 45 | set(PROTOCOLS_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/protocols PARENT_SCOPE) |
diff --git a/protocols/server-decoration.xml b/protocols/server-decoration.xml new file mode 100644 index 00000000..8bc106c7 --- /dev/null +++ b/protocols/server-decoration.xml | |||
@@ -0,0 +1,94 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <protocol name="server_decoration"> | ||
3 | <copyright><![CDATA[ | ||
4 | Copyright (C) 2015 Martin Gräßlin | ||
5 | |||
6 | This program is free software: you can redistribute it and/or modify | ||
7 | it under the terms of the GNU Lesser General Public License as published by | ||
8 | the Free Software Foundation, either version 2.1 of the License, or | ||
9 | (at your option) any later version. | ||
10 | |||
11 | This program is distributed in the hope that it will be useful, | ||
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
14 | GNU Lesser General Public License for more details. | ||
15 | |||
16 | You should have received a copy of the GNU Lesser General Public License | ||
17 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
18 | ]]></copyright> | ||
19 | <interface name="org_kde_kwin_server_decoration_manager" version="1"> | ||
20 | <description summary="Server side window decoration manager"> | ||
21 | This interface allows to coordinate whether the server should create | ||
22 | a server-side window decoration around a wl_surface representing a | ||
23 | shell surface (wl_shell_surface or similar). By announcing support | ||
24 | for this interface the server indicates that it supports server | ||
25 | side decorations. | ||
26 | </description> | ||
27 | <request name="create"> | ||
28 | <description summary="Create a server-side decoration object for a given surface"> | ||
29 | When a client creates a server-side decoration object it indicates | ||
30 | that it supports the protocol. The client is supposed to tell the | ||
31 | server whether it wants server-side decorations or will provide | ||
32 | client-side decorations. | ||
33 | |||
34 | If the client does not create a server-side decoration object for | ||
35 | a surface the server interprets this as lack of support for this | ||
36 | protocol and considers it as client-side decorated. Nevertheless a | ||
37 | client-side decorated surface should use this protocol to indicate | ||
38 | to the server that it does not want a server-side deco. | ||
39 | </description> | ||
40 | <arg name="id" type="new_id" interface="org_kde_kwin_server_decoration"/> | ||
41 | <arg name="surface" type="object" interface="wl_surface"/> | ||
42 | </request> | ||
43 | <enum name="mode"> | ||
44 | <description summary="Possible values to use in request_mode and the event mode."/> | ||
45 | <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."/> | ||
46 | <entry name="Client" value="1" summary="Client-side decoration: The decoration is part of the surface and the client."/> | ||
47 | <entry name="Server" value="2" summary="Server-side decoration: The server embeds the surface into a decoration frame."/> | ||
48 | </enum> | ||
49 | <event name="default_mode"> | ||
50 | <description summary="The default mode used on the server"> | ||
51 | This event is emitted directly after binding the interface. It contains | ||
52 | the default mode for the decoration. When a new server decoration object | ||
53 | is created this new object will be in the default mode until the first | ||
54 | request_mode is requested. | ||
55 | |||
56 | The server may change the default mode at any time. | ||
57 | </description> | ||
58 | <arg name="mode" type="uint" summary="The default decoration mode applied to newly created server decorations."/> | ||
59 | </event> | ||
60 | </interface> | ||
61 | <interface name="org_kde_kwin_server_decoration" version="1"> | ||
62 | <request name="release" type="destructor"> | ||
63 | <description summary="release the server decoration object"/> | ||
64 | </request> | ||
65 | <enum name="mode"> | ||
66 | <description summary="Possible values to use in request_mode and the event mode."/> | ||
67 | <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."/> | ||
68 | <entry name="Client" value="1" summary="Client-side decoration: The decoration is part of the surface and the client."/> | ||
69 | <entry name="Server" value="2" summary="Server-side decoration: The server embeds the surface into a decoration frame."/> | ||
70 | </enum> | ||
71 | <request name="request_mode"> | ||
72 | <description summary="The decoration mode the surface wants to use."/> | ||
73 | <arg name="mode" type="uint" summary="The mode this surface wants to use."/> | ||
74 | </request> | ||
75 | <event name="mode"> | ||
76 | <description summary="The new decoration mode applied by the server"> | ||
77 | This event is emitted directly after the decoration is created and | ||
78 | represents the base decoration policy by the server. E.g. a server | ||
79 | which wants all surfaces to be client-side decorated will send Client, | ||
80 | a server which wants server-side decoration will send Server. | ||
81 | |||
82 | The client can request a different mode through the decoration request. | ||
83 | The server will acknowledge this by another event with the same mode. So | ||
84 | even if a server prefers server-side decoration it's possible to force a | ||
85 | client-side decoration. | ||
86 | |||
87 | The server may emit this event at any time. In this case the client can | ||
88 | again request a different mode. It's the responsibility of the server to | ||
89 | prevent a feedback loop. | ||
90 | </description> | ||
91 | <arg name="mode" type="uint" summary="The decoration mode applied to the surface by the server."/> | ||
92 | </event> | ||
93 | </interface> | ||
94 | </protocol> | ||