aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar emersion <contact@emersion.fr>2018-07-13 21:53:56 +0100
committerLibravatar emersion <contact@emersion.fr>2018-08-06 15:20:30 +0100
commit700941dde8d270b7986bd592fcb42333e7626718 (patch)
treea7596009b90165dbd34b01598a704a2801a7e73c
parentMerge pull request #2422 from ggreer/compiler-errors (diff)
downloadsway-700941dde8d270b7986bd592fcb42333e7626718.tar.gz
sway-700941dde8d270b7986bd592fcb42333e7626718.tar.zst
sway-700941dde8d270b7986bd592fcb42333e7626718.zip
Listen to server-decoration mode changes
-rw-r--r--include/sway/decoration.h13
-rw-r--r--include/sway/server.h10
-rw-r--r--sway/decoration.c41
-rw-r--r--sway/meson.build5
-rw-r--r--sway/server.c9
5 files changed, 72 insertions, 6 deletions
diff --git a/include/sway/decoration.h b/include/sway/decoration.h
new file mode 100644
index 00000000..c77c04c7
--- /dev/null
+++ b/include/sway/decoration.h
@@ -0,0 +1,13 @@
1#ifndef _SWAY_DECORATION_H
2#define _SWAY_DECORATION_H
3
4#include <wlr/types/wlr_server_decoration.h>
5
6struct sway_server_decoration {
7 struct wlr_server_decoration *wlr_server_decoration;
8
9 struct wl_listener destroy;
10 struct wl_listener mode;
11};
12
13#endif
diff --git a/include/sway/server.h b/include/sway/server.h
index a3782f91..7e73fb4f 100644
--- a/include/sway/server.h
+++ b/include/sway/server.h
@@ -4,12 +4,13 @@
4#include <wayland-server.h> 4#include <wayland-server.h>
5#include <wlr/backend.h> 5#include <wlr/backend.h>
6#include <wlr/backend/session.h> 6#include <wlr/backend/session.h>
7#include <wlr/render/wlr_renderer.h>
7#include <wlr/types/wlr_compositor.h> 8#include <wlr/types/wlr_compositor.h>
8#include <wlr/types/wlr_data_device.h> 9#include <wlr/types/wlr_data_device.h>
9#include <wlr/types/wlr_layer_shell.h> 10#include <wlr/types/wlr_layer_shell.h>
11#include <wlr/types/wlr_server_decoration.h>
10#include <wlr/types/wlr_xdg_shell_v6.h> 12#include <wlr/types/wlr_xdg_shell_v6.h>
11#include <wlr/types/wlr_xdg_shell.h> 13#include <wlr/types/wlr_xdg_shell.h>
12#include <wlr/render/wlr_renderer.h>
13// TODO WLR: make Xwayland optional 14// TODO WLR: make Xwayland optional
14#include "list.h" 15#include "list.h"
15#include "config.h" 16#include "config.h"
@@ -42,11 +43,16 @@ struct sway_server {
42 43
43 struct wlr_xdg_shell *xdg_shell; 44 struct wlr_xdg_shell *xdg_shell;
44 struct wl_listener xdg_shell_surface; 45 struct wl_listener xdg_shell_surface;
46
45#ifdef HAVE_XWAYLAND 47#ifdef HAVE_XWAYLAND
46 struct sway_xwayland xwayland; 48 struct sway_xwayland xwayland;
47 struct wl_listener xwayland_surface; 49 struct wl_listener xwayland_surface;
48 struct wl_listener xwayland_ready; 50 struct wl_listener xwayland_ready;
49#endif 51#endif
52
53 struct wlr_server_decoration_manager *server_decoration_manager;
54 struct wl_listener server_decoration;
55
50 bool debug_txn_timings; 56 bool debug_txn_timings;
51 57
52 list_t *transactions; 58 list_t *transactions;
@@ -71,4 +77,6 @@ void handle_xdg_shell_surface(struct wl_listener *listener, void *data);
71#ifdef HAVE_XWAYLAND 77#ifdef HAVE_XWAYLAND
72void handle_xwayland_surface(struct wl_listener *listener, void *data); 78void handle_xwayland_surface(struct wl_listener *listener, void *data);
73#endif 79#endif
80void handle_server_decoration(struct wl_listener *listener, void *data);
81
74#endif 82#endif
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);