aboutsummaryrefslogtreecommitdiffstats
path: root/sway
diff options
context:
space:
mode:
Diffstat (limited to 'sway')
-rw-r--r--sway/decoration.c41
-rw-r--r--sway/meson.build5
-rw-r--r--sway/server.c9
3 files changed, 50 insertions, 5 deletions
diff --git a/sway/decoration.c b/sway/decoration.c
new file mode 100644
index 00000000..73b3f45d
--- /dev/null
+++ b/sway/decoration.c
@@ -0,0 +1,41 @@
1#include <stdlib.h>
2#include "sway/decoration.h"
3#include "sway/server.h"
4#include "sway/tree/view.h"
5#include "log.h"
6
7static void server_decoration_handle_destroy(struct wl_listener *listener,
8 void *data) {
9 struct sway_server_decoration *deco =
10 wl_container_of(listener, deco, destroy);
11 wl_list_remove(&deco->destroy.link);
12 free(deco);
13}
14
15static void server_decoration_handle_mode(struct wl_listener *listener,
16 void *data) {
17 struct sway_server_decoration *deco =
18 wl_container_of(listener, deco, mode);
19 struct sway_view *view =
20 view_from_wlr_surface(deco->wlr_server_decoration->surface);
21
22 // TODO
23 wlr_log(WLR_ERROR, "%p %d", view, deco->wlr_server_decoration->mode);
24}
25
26void handle_server_decoration(struct wl_listener *listener, void *data) {
27 struct wlr_server_decoration *wlr_deco = data;
28
29 struct sway_server_decoration *deco = calloc(1, sizeof(*deco));
30 if (deco == NULL) {
31 return;
32 }
33
34 deco->wlr_server_decoration = wlr_deco;
35
36 wl_signal_add(&wlr_deco->events.destroy, &deco->destroy);
37 deco->destroy.notify = server_decoration_handle_destroy;
38
39 wl_signal_add(&wlr_deco->events.mode, &deco->mode);
40 deco->mode.notify = server_decoration_handle_mode;
41}
diff --git a/sway/meson.build b/sway/meson.build
index c18fb6e2..2a457270 100644
--- a/sway/meson.build
+++ b/sway/meson.build
@@ -1,13 +1,14 @@
1sway_sources = files( 1sway_sources = files(
2 'main.c',
3 'server.c',
4 'commands.c', 2 'commands.c',
5 'config.c', 3 'config.c',
6 'criteria.c', 4 'criteria.c',
7 'debug-tree.c', 5 'debug-tree.c',
6 'decoration.c',
8 'ipc-json.c', 7 'ipc-json.c',
9 'ipc-server.c', 8 'ipc-server.c',
9 'main.c',
10 'security.c', 10 'security.c',
11 'server.c',
11 'swaynag.c', 12 'swaynag.c',
12 13
13 'desktop/desktop.c', 14 'desktop/desktop.c',
diff --git a/sway/server.c b/sway/server.c
index e8755360..bf6255bc 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -109,11 +109,14 @@ bool server_init(struct sway_server *server) {
109 } 109 }
110#endif 110#endif
111 111
112 // TODO: Integration with sway borders 112 server->server_decoration_manager =
113 struct wlr_server_decoration_manager *deco_manager =
114 wlr_server_decoration_manager_create(server->wl_display); 113 wlr_server_decoration_manager_create(server->wl_display);
115 wlr_server_decoration_manager_set_default_mode( 114 wlr_server_decoration_manager_set_default_mode(
116 deco_manager, WLR_SERVER_DECORATION_MANAGER_MODE_SERVER); 115 server->server_decoration_manager,
116 WLR_SERVER_DECORATION_MANAGER_MODE_SERVER);
117 wl_signal_add(&server->server_decoration_manager->events.new_decoration,
118 &server->server_decoration);
119 server->server_decoration.notify = handle_server_decoration;
117 120
118 wlr_linux_dmabuf_v1_create(server->wl_display, renderer); 121 wlr_linux_dmabuf_v1_create(server->wl_display, renderer);
119 wlr_export_dmabuf_manager_v1_create(server->wl_display); 122 wlr_export_dmabuf_manager_v1_create(server->wl_display);