diff options
Diffstat (limited to 'sway')
-rw-r--r-- | sway/decoration.c | 41 | ||||
-rw-r--r-- | sway/meson.build | 5 | ||||
-rw-r--r-- | sway/server.c | 9 |
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 | |||
7 | static 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 | |||
15 | static 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 | |||
26 | void 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 @@ | |||
1 | sway_sources = files( | 1 | sway_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); |