diff options
author | Stivvo <stivvo01@gmail.com> | 2020-10-31 17:10:06 +0100 |
---|---|---|
committer | Stivvo <stivvo01@gmail.com> | 2020-10-31 17:11:16 +0100 |
commit | 80a685ee51da69ae0a7bae11620c5f33c3cd2de2 (patch) | |
tree | eb3b97ceab572d7aabaacf84824e77a580e9ad82 | |
parent | 5221a329e254627c186ba8e4d68f9595d4e3158a (diff) |
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
-rw-r--r-- | dwl.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -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); } |