From fbd23aaae4c2a9144e51f6a2477626137de84ef7 Mon Sep 17 00:00:00 2001 From: John Lindgren Date: Sat, 27 Nov 2021 16:47:49 -0500 Subject: [PATCH] Fix graphical artifacts after adding/removing outputs When an output is added or removed, the position of the other outputs can also change, resulting in windows moving between them. We need to redraw all the outputs (not just the new one) to prevent stale/corrupted screen contents. --- src/output.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/output.c b/src/output.c index c2381988..1062f9b6 100644 --- a/src/output.c +++ b/src/output.c @@ -936,6 +936,9 @@ output_destroy_notify(struct wl_listener *listener, void *data) struct output *output = wl_container_of(listener, output, destroy); wl_list_remove(&output->link); wl_list_remove(&output->destroy.link); + + /* Windows may have moved; redraw all outputs */ + damage_all_outputs(output->server); } static void @@ -1036,7 +1039,8 @@ new_output_notify(struct wl_listener *listener, void *data) wlr_xcursor_manager_set_cursor_image(server->seat.xcursor_manager, XCURSOR_DEFAULT, server->seat.cursor); - wlr_output_schedule_frame(wlr_output); + /* Windows may have moved; redraw all outputs */ + damage_all_outputs(server); } void