diff options
Diffstat (limited to 'sway/decoration.c')
-rw-r--r-- | sway/decoration.c | 41 |
1 files changed, 41 insertions, 0 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 | } | ||