summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Tony Crisci <tony@dubstepdish.com>2018-02-14 14:51:51 -0500
committerLibravatar Tony Crisci <tony@dubstepdish.com>2018-02-14 14:51:51 -0500
commit7dfbf06de9a5659d4c73edf53c38ee07068a2877 (patch)
treeccf6d0147d57fd65bc742d8d576e01d2ab2f8249
parentinput device destroy (diff)
downloadsway-7dfbf06de9a5659d4c73edf53c38ee07068a2877.tar.gz
sway-7dfbf06de9a5659d4c73edf53c38ee07068a2877.tar.zst
sway-7dfbf06de9a5659d4c73edf53c38ee07068a2877.zip
output destroy
-rw-r--r--include/sway/output.h1
-rw-r--r--include/sway/server.h7
-rw-r--r--sway/desktop/output.c12
-rw-r--r--sway/server.c8
-rw-r--r--sway/tree/container.c2
5 files changed, 15 insertions, 15 deletions
diff --git a/include/sway/output.h b/include/sway/output.h
index 7ca02d7b..95d64705 100644
--- a/include/sway/output.h
+++ b/include/sway/output.h
@@ -14,6 +14,7 @@ struct sway_output {
14 struct timespec last_frame; 14 struct timespec last_frame;
15 15
16 struct wl_listener frame; 16 struct wl_listener frame;
17 struct wl_listener output_destroy;
17}; 18};
18 19
19#endif 20#endif
diff --git a/include/sway/server.h b/include/sway/server.h
index d497e132..1600babe 100644
--- a/include/sway/server.h
+++ b/include/sway/server.h
@@ -24,8 +24,7 @@ struct sway_server {
24 24
25 struct sway_input_manager *input; 25 struct sway_input_manager *input;
26 26
27 struct wl_listener output_add; 27 struct wl_listener new_output;
28 struct wl_listener output_remove;
29 struct wl_listener output_frame; 28 struct wl_listener output_frame;
30 29
31 struct wlr_xdg_shell_v6 *xdg_shell_v6; 30 struct wlr_xdg_shell_v6 *xdg_shell_v6;
@@ -45,8 +44,8 @@ bool server_init(struct sway_server *server);
45void server_fini(struct sway_server *server); 44void server_fini(struct sway_server *server);
46void server_run(struct sway_server *server); 45void server_run(struct sway_server *server);
47 46
48void output_add_notify(struct wl_listener *listener, void *data); 47void handle_new_output(struct wl_listener *listener, void *data);
49void output_remove_notify(struct wl_listener *listener, void *data); 48void handle_output_destroy(struct wl_listener *listener, void *data);
50 49
51void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data); 50void handle_xdg_shell_v6_surface(struct wl_listener *listener, void *data);
52void handle_xwayland_surface(struct wl_listener *listener, void *data); 51void handle_xwayland_surface(struct wl_listener *listener, void *data);
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index a650665f..16183870 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -243,8 +243,8 @@ static void output_frame_notify(struct wl_listener *listener, void *data) {
243 soutput->last_frame = now; 243 soutput->last_frame = now;
244} 244}
245 245
246void output_add_notify(struct wl_listener *listener, void *data) { 246void handle_new_output(struct wl_listener *listener, void *data) {
247 struct sway_server *server = wl_container_of(listener, server, output_add); 247 struct sway_server *server = wl_container_of(listener, server, new_output);
248 struct wlr_output *wlr_output = data; 248 struct wlr_output *wlr_output = data;
249 wlr_log(L_DEBUG, "New output %p: %s", wlr_output, wlr_output->name); 249 wlr_log(L_DEBUG, "New output %p: %s", wlr_output, wlr_output->name);
250 250
@@ -269,12 +269,14 @@ void output_add_notify(struct wl_listener *listener, void *data) {
269 269
270 sway_input_manager_configure_xcursor(input_manager); 270 sway_input_manager_configure_xcursor(input_manager);
271 271
272 output->frame.notify = output_frame_notify;
273 wl_signal_add(&wlr_output->events.frame, &output->frame); 272 wl_signal_add(&wlr_output->events.frame, &output->frame);
273 output->frame.notify = output_frame_notify;
274
275 wl_signal_add(&wlr_output->events.destroy, &output->output_destroy);
276 output->output_destroy.notify = handle_output_destroy;
274} 277}
275 278
276void output_remove_notify(struct wl_listener *listener, void *data) { 279void handle_output_destroy(struct wl_listener *listener, void *data) {
277 struct sway_server *server = wl_container_of(listener, server, output_remove);
278 struct wlr_output *wlr_output = data; 280 struct wlr_output *wlr_output = data;
279 wlr_log(L_DEBUG, "Output %p %s removed", wlr_output, wlr_output->name); 281 wlr_log(L_DEBUG, "Output %p %s removed", wlr_output, wlr_output->name);
280 282
diff --git a/sway/server.c b/sway/server.c
index b5eb510b..0753d37e 100644
--- a/sway/server.c
+++ b/sway/server.c
@@ -48,12 +48,8 @@ bool server_init(struct sway_server *server) {
48 server->data_device_manager = 48 server->data_device_manager =
49 wlr_data_device_manager_create(server->wl_display); 49 wlr_data_device_manager_create(server->wl_display);
50 50
51 server->output_add.notify = output_add_notify; 51 server->new_output.notify = handle_new_output;
52 wl_signal_add(&server->backend->events.output_add, &server->output_add); 52 wl_signal_add(&server->backend->events.new_output, &server->new_output);
53
54 server->output_remove.notify = output_remove_notify;
55 wl_signal_add(&server->backend->events.output_remove,
56 &server->output_remove);
57 53
58 server->xdg_shell_v6 = wlr_xdg_shell_v6_create(server->wl_display); 54 server->xdg_shell_v6 = wlr_xdg_shell_v6_create(server->wl_display);
59 wl_signal_add(&server->xdg_shell_v6->events.new_surface, 55 wl_signal_add(&server->xdg_shell_v6->events.new_surface,
diff --git a/sway/tree/container.c b/sway/tree/container.c
index 48aabd86..1a468c19 100644
--- a/sway/tree/container.c
+++ b/sway/tree/container.c
@@ -235,6 +235,8 @@ swayc_t *destroy_output(swayc_t *output) {
235 } 235 }
236 } 236 }
237 237
238 wl_list_remove(&output->sway_output->output_destroy.link);
239
238 wlr_log(L_DEBUG, "OUTPUT: Destroying output '%s'", output->name); 240 wlr_log(L_DEBUG, "OUTPUT: Destroying output '%s'", output->name);
239 free_swayc(output); 241 free_swayc(output);
240 242