summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStivvo <stivvo01@gmail.com>2020-10-31 17:10:06 +0100
committerStivvo <stivvo01@gmail.com>2020-10-31 17:11:16 +0100
commit80a685ee51da69ae0a7bae11620c5f33c3cd2de2 (patch)
treeeb3b97ceab572d7aabaacf84824e77a580e9ad82
parentclosemon() has now only 1 parameter (diff)
downloaddwl-80a685ee51da69ae0a7bae11620c5f33c3cd2de2.tar.gz
dwl-80a685ee51da69ae0a7bae11620c5f33c3cd2de2.tar.bz2
dwl-80a685ee51da69ae0a7bae11620c5f33c3cd2de2.tar.xz
dwl-80a685ee51da69ae0a7bae11620c5f33c3cd2de2.tar.zst
dwl-80a685ee51da69ae0a7bae11620c5f33c3cd2de2.zip
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.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/dwl.c b/dwl.c
index ca352c4..d875eaa 100644
--- 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);
}