From ac87df23eab4f9b2ca16d47a4cbaeb63e32215cf Mon Sep 17 00:00:00 2001 From: Josef Gajdusek Date: Tue, 16 Jul 2019 20:58:14 +0200 Subject: [PATCH] Update output manager on layout change The output manager config was not properly updated if the position of the output got changed. --- include/sway/output.h | 2 ++ include/sway/server.h | 1 + sway/desktop/output.c | 7 +++++++ sway/server.c | 3 +++ 4 files changed, 13 insertions(+) diff --git a/include/sway/output.h b/include/sway/output.h index 3d430ea2..a5a2f29e 100644 --- a/include/sway/output.h +++ b/include/sway/output.h @@ -154,6 +154,8 @@ void scale_box(struct wlr_box *box, float scale); enum wlr_direction opposite_direction(enum wlr_direction d); +void handle_output_layout_change(struct wl_listener *listener, void *data); + void handle_output_manager_apply(struct wl_listener *listener, void *data); void handle_output_manager_test(struct wl_listener *listener, void *data); diff --git a/include/sway/server.h b/include/sway/server.h index fd613bb6..21661685 100644 --- a/include/sway/server.h +++ b/include/sway/server.h @@ -34,6 +34,7 @@ struct sway_server { struct sway_input_manager *input; struct wl_listener new_output; + struct wl_listener output_layout_change; struct wlr_idle *idle; struct sway_idle_inhibit_manager_v1 *idle_inhibit_manager_v1; diff --git a/sway/desktop/output.c b/sway/desktop/output.c index fe50759a..22ced14e 100644 --- a/sway/desktop/output.c +++ b/sway/desktop/output.c @@ -688,6 +688,13 @@ void handle_new_output(struct wl_listener *listener, void *data) { update_output_manager_config(server); } +void handle_output_layout_change(struct wl_listener *listener, + void *data) { + struct sway_server *server = + wl_container_of(listener, server, output_layout_change); + update_output_manager_config(server); +} + void handle_output_manager_apply(struct wl_listener *listener, void *data) { struct sway_server *server = wl_container_of(listener, server, output_manager_apply); diff --git a/sway/server.c b/sway/server.c index b50e3ccc..4f46a065 100644 --- a/sway/server.c +++ b/sway/server.c @@ -66,6 +66,9 @@ bool server_init(struct sway_server *server) { server->new_output.notify = handle_new_output; wl_signal_add(&server->backend->events.new_output, &server->new_output); + server->output_layout_change.notify = handle_output_layout_change; + wl_signal_add(&root->output_layout->events.change, + &server->output_layout_change); wlr_xdg_output_manager_v1_create(server->wl_display, root->output_layout);