~ruther/dwl

80a685ee51da69ae0a7bae11620c5f33c3cd2de2 — Stivvo 4 years ago 5221a32
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
1 files changed, 3 insertions(+), 4 deletions(-)

M dwl.c
M dwl.c => dwl.c +3 -4
@@ 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);
}


Do not follow this link