commit 80a685ee51da69ae0a7bae11620c5f33c3cd2de2
parent 5221a329e254627c186ba8e4d68f9595d4e3158a
Author: Stivvo <stivvo01@gmail.com>
Date: Sat, 31 Oct 2020 17:10:06 +0100
Fix crash with no monitors left
When there's no monitors left, prevent the while in cleanupmon() to
become an infinite loop
Also switch to the left monitors instead of the right
Diffstat:
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/dwl.c b/dwl.c
@@ -696,20 +696,19 @@ cleanupmon(struct wl_listener *listener, void *data)
{
struct wlr_output *wlr_output = data;
Monitor *m = wlr_output->data;
+ int nmons = wl_list_length(&mons), i = 0;
wl_list_remove(&m->destroy.link);
wl_list_remove(&m->frame.link);
wl_list_remove(&m->link);
wlr_output_layout_remove(output_layout, m->wlr_output);
-
updatemons();
do // don't switch to disabled mons
- selmon = wl_container_of(mons.next, selmon, link);
- while (!selmon->wlr_output->enabled);
+ selmon = wl_container_of(mons.prev, selmon, link);
+ while (!selmon->wlr_output->enabled && i++ < nmons);
focusclient(selclient(), focustop(selmon), 1);
closemon(m);
-
free(m);
}