~ruther/dwl

2524c9b04586653463e8ad573dd25574dc26cdba — Rutherther 11 months ago b97893b
fix: singletagset unexpectedly changed selmon

When viewing tag that was previously on another monitor,
and the current monitor was empty, this lead to selmon
being changed, since focusclient(focustop(origm), 1) cannot
change the monitor in this scenario
1 files changed, 15 insertions(+), 6 deletions(-)

M dwl.c
M dwl.c => dwl.c +15 -6
@@ 2794,23 2794,28 @@ view(const Arg *arg)
	Monitor *m, *origm = selmon;
	unsigned int newtags;

	if (!selmon || (arg->ui & TAGMASK) == selmon->tagset[selmon->seltags])
	if (!selmon || (arg->ui & TAGMASK) == selmon->tagset[selmon->seltags]) {
		return;
	}

	newtags = selmon->tagset[selmon->seltags ^ 1];
	newtags = origm->tagset[origm->seltags ^ 1];

	/* swap tags when trying to display a tag from another monitor */
	if (arg->ui & TAGMASK)
	if (arg->ui & TAGMASK) {
		newtags = arg->ui & TAGMASK;
	}
	wl_list_for_each(m, &mons, link) {
		if (m != selmon && newtags & m->tagset[m->seltags]) {
		if (m != origm && newtags & m->tagset[m->seltags]) {
			/* prevent displaying all tags (MODKEY-0) when multiple monitors
			 * are connected */
			if (newtags & selmon->tagset[selmon->seltags])
			if (newtags & origm->tagset[origm->seltags]) {
				return;
			}
			m->seltags ^= 1;
			m->tagset[m->seltags] = selmon->tagset[selmon->seltags];
			m->tagset[m->seltags] = origm->tagset[origm->seltags];
			applypertag(m);
			attachclients(m);
			/* Beware: this changes selmon */
			focusclient(focustop(m), 1);
			arrange(m);
			break;


@@ 2820,6 2825,10 @@ view(const Arg *arg)
	origm->seltags ^= 1; /* toggle sel tagset */
	if (arg->ui & TAGMASK)
		origm->tagset[origm->seltags] = arg->ui & TAGMASK;
	}

	/* Change selmon back to orig mon */
	selmon = origm;
	attachclients(origm);
	focusclient(focustop(origm), 1);
	arrange(origm);

Do not follow this link