Tag-Sync patch (for syncing tags across all monitors) (#219)
* Tag-Sync patch * Major compatibility updates * SWITCHTAG/TAGSYNC compatibility * tagsync: refactoring Co-authored-by: bakkeby <bakkeby@gmail.com>pull/237/head
parent
8f986a4e3b
commit
ae67378b20
@ -1,28 +1,42 @@
|
|||||||
void
|
void
|
||||||
reorganizetags(const Arg *arg)
|
reorganizetags(const Arg *arg)
|
||||||
{
|
{
|
||||||
Client *c;
|
Client *c;
|
||||||
unsigned int occ, unocc, i;
|
unsigned int occ, unocc, i;
|
||||||
unsigned int tagdest[NUMTAGS];
|
unsigned int tagdest[NUMTAGS];
|
||||||
|
|
||||||
occ = 0;
|
#if TAGSYNC_PATCH
|
||||||
for (c = selmon->clients; c; c = c->next)
|
Monitor *origselmon = selmon;
|
||||||
occ |= (1 << (ffs(c->tags)-1));
|
for (selmon = mons; selmon; selmon = selmon->next) {
|
||||||
unocc = 0;
|
#endif // TAGSYNC_PATCH
|
||||||
for (i = 0; i < NUMTAGS; ++i) {
|
|
||||||
while (unocc < i && (occ & (1 << unocc)))
|
|
||||||
unocc++;
|
|
||||||
if (occ & (1 << i)) {
|
|
||||||
tagdest[i] = unocc;
|
|
||||||
occ &= ~(1 << i);
|
|
||||||
occ |= 1 << unocc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (c = selmon->clients; c; c = c->next)
|
occ = 0;
|
||||||
c->tags = 1 << tagdest[ffs(c->tags)-1];
|
for (c = selmon->clients; c; c = c->next)
|
||||||
if (selmon->sel)
|
occ |= (1 << (ffs(c->tags)-1));
|
||||||
selmon->tagset[selmon->seltags] = selmon->sel->tags;
|
unocc = 0;
|
||||||
arrange(selmon);
|
for (i = 0; i < NUMTAGS; ++i) {
|
||||||
}
|
while (unocc < i && (occ & (1 << unocc)))
|
||||||
|
unocc++;
|
||||||
|
if (occ & (1 << i)) {
|
||||||
|
tagdest[i] = unocc;
|
||||||
|
occ &= ~(1 << i);
|
||||||
|
occ |= 1 << unocc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (c = selmon->clients; c; c = c->next)
|
||||||
|
c->tags = 1 << tagdest[ffs(c->tags)-1];
|
||||||
|
#if TAGSYNC_PATCH
|
||||||
|
}
|
||||||
|
selmon = origselmon;
|
||||||
|
#endif // TAGSYNC_PATCH
|
||||||
|
|
||||||
|
if (selmon->sel)
|
||||||
|
view(&((Arg) { .ui = selmon->sel->tags }));
|
||||||
|
else
|
||||||
|
#if TAGSYNC_PATCH
|
||||||
|
arrange(NULL);
|
||||||
|
#else
|
||||||
|
arrange(selmon);
|
||||||
|
#endif // TAGSYNC_PATCH
|
||||||
|
}
|
||||||
|
@ -1,23 +1,31 @@
|
|||||||
void
|
void
|
||||||
swaptags(const Arg *arg)
|
swaptags(const Arg *arg)
|
||||||
{
|
{
|
||||||
unsigned int newtag = arg->ui & TAGMASK;
|
Client *c;
|
||||||
unsigned int curtag = selmon->tagset[selmon->seltags];
|
unsigned int newtag = arg->ui & TAGMASK;
|
||||||
|
unsigned int curtag = selmon->tagset[selmon->seltags];
|
||||||
|
|
||||||
if (newtag == curtag || !curtag || (curtag & (curtag-1)))
|
if (newtag == curtag || !curtag || (curtag & (curtag-1)))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (Client *c = selmon->clients; c != NULL; c = c->next) {
|
#if TAGSYNC_PATCH
|
||||||
if ((c->tags & newtag) || (c->tags & curtag))
|
Monitor *origselmon = selmon;
|
||||||
c->tags ^= curtag ^ newtag;
|
for (selmon = mons; selmon; selmon = selmon->next) {
|
||||||
|
#endif // TAGSYNC_PATCH
|
||||||
|
|
||||||
if (!c->tags)
|
for (c = selmon->clients; c != NULL; c = c->next) {
|
||||||
c->tags = newtag;
|
if ((c->tags & newtag) || (c->tags & curtag))
|
||||||
}
|
c->tags ^= curtag ^ newtag;
|
||||||
|
|
||||||
selmon->tagset[selmon->seltags] = newtag;
|
if (!c->tags)
|
||||||
|
c->tags = newtag;
|
||||||
|
}
|
||||||
|
|
||||||
focus(NULL);
|
#if TAGSYNC_PATCH
|
||||||
arrange(selmon);
|
}
|
||||||
|
selmon = origselmon;
|
||||||
|
#endif // TAGSYNC_PATCH
|
||||||
|
|
||||||
|
view(&((Arg) { .ui = newtag }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue