~ruther/dwl

2e4fe1cdf9d64f9ea5cbe91e737f2979b592e59a — Rutherther 1 year, 1 month ago 62939ce
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, 13 insertions(+), 6 deletions(-)

M dwl.c
M dwl.c => dwl.c +13 -6
@@ 2915,23 2915,27 @@ 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];
			attachclients(m);
			/* Beware: this changes selmon */
			focusclient(focustop(m), 1);
			arrange(m);
			break;


@@ 2941,6 2945,9 @@ 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