aboutsummaryrefslogtreecommitdiffstats
path: root/sway/desktop/output.c
diff options
context:
space:
mode:
Diffstat (limited to 'sway/desktop/output.c')
-rw-r--r--sway/desktop/output.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/sway/desktop/output.c b/sway/desktop/output.c
index e02ab32d..bb61e1bd 100644
--- a/sway/desktop/output.c
+++ b/sway/desktop/output.c
@@ -891,8 +891,7 @@ static void update_output_manager_config(struct sway_server *server) {
891 ipc_event_output(); 891 ipc_event_output();
892} 892}
893 893
894static void handle_destroy(struct wl_listener *listener, void *data) { 894static void begin_destroy(struct sway_output *output) {
895 struct sway_output *output = wl_container_of(listener, output, destroy);
896 struct sway_server *server = output->server; 895 struct sway_server *server = output->server;
897 896
898 if (output->enabled) { 897 if (output->enabled) {
@@ -903,6 +902,7 @@ static void handle_destroy(struct wl_listener *listener, void *data) {
903 902
904 wl_list_remove(&output->link); 903 wl_list_remove(&output->link);
905 904
905 wl_list_remove(&output->layout_destroy.link);
906 wl_list_remove(&output->destroy.link); 906 wl_list_remove(&output->destroy.link);
907 wl_list_remove(&output->commit.link); 907 wl_list_remove(&output->commit.link);
908 wl_list_remove(&output->present.link); 908 wl_list_remove(&output->present.link);
@@ -921,6 +921,16 @@ static void handle_destroy(struct wl_listener *listener, void *data) {
921 update_output_manager_config(server); 921 update_output_manager_config(server);
922} 922}
923 923
924static void handle_destroy(struct wl_listener *listener, void *data) {
925 struct sway_output *output = wl_container_of(listener, output, destroy);
926 begin_destroy(output);
927}
928
929static void handle_layout_destroy(struct wl_listener *listener, void *data) {
930 struct sway_output *output = wl_container_of(listener, output, layout_destroy);
931 begin_destroy(output);
932}
933
924static void update_textures(struct sway_container *con, void *data) { 934static void update_textures(struct sway_container *con, void *data) {
925 container_update_title_textures(con); 935 container_update_title_textures(con);
926 container_update_marks_textures(con); 936 container_update_marks_textures(con);
@@ -1035,6 +1045,8 @@ void handle_new_output(struct wl_listener *listener, void *data) {
1035 output->server = server; 1045 output->server = server;
1036 wlr_damage_ring_init(&output->damage_ring); 1046 wlr_damage_ring_init(&output->damage_ring);
1037 1047
1048 wl_signal_add(&root->output_layout->events.destroy, &output->layout_destroy);
1049 output->layout_destroy.notify = handle_layout_destroy;
1038 wl_signal_add(&wlr_output->events.destroy, &output->destroy); 1050 wl_signal_add(&wlr_output->events.destroy, &output->destroy);
1039 output->destroy.notify = handle_destroy; 1051 output->destroy.notify = handle_destroy;
1040 wl_signal_add(&wlr_output->events.commit, &output->commit); 1052 wl_signal_add(&wlr_output->events.commit, &output->commit);