78 lines
1.6 KiB
C
78 lines
1.6 KiB
C
void
|
|
removescratch(const Arg *arg)
|
|
{
|
|
Client *c = selmon->sel;
|
|
if (!c)
|
|
return;
|
|
unsigned int scratchtag = SPTAG(arg->ui);
|
|
c->tags = c->mon->tagset[c->mon->seltags] ^ scratchtag;
|
|
arrange(c->mon);
|
|
}
|
|
|
|
void
|
|
setscratch(const Arg *arg)
|
|
{
|
|
Client *c = selmon->sel;
|
|
if (!c)
|
|
return;
|
|
unsigned int scratchtag = SPTAG(arg->ui);
|
|
c->tags = scratchtag;
|
|
arrange(c->mon);
|
|
}
|
|
|
|
void
|
|
togglescratch(const Arg *arg)
|
|
{
|
|
Client *c = NULL, *next = NULL, *found = NULL;
|
|
Monitor *mon;
|
|
unsigned int scratchtag = SPTAG(arg->ui);
|
|
unsigned int newtagset = 0;
|
|
int nh = 0, nw = 0;
|
|
Arg sparg = {.v = scratchpads[arg->ui].cmd};
|
|
|
|
for (mon = mons; mon; mon = mon->next) {
|
|
for (c = mon->clients; c; c = next) {
|
|
next = c->next;
|
|
if (!(c->tags & scratchtag))
|
|
continue;
|
|
|
|
found = c;
|
|
|
|
if (HIDDEN(c)) {
|
|
XMapWindow(dpy, c->win);
|
|
setclientstate(c, NormalState);
|
|
newtagset = 0;
|
|
} else
|
|
newtagset = selmon->tagset[selmon->seltags] ^ scratchtag;
|
|
|
|
if (c->mon != selmon) {
|
|
if (c->mon->tagset[c->mon->seltags] & SPTAGMASK)
|
|
c->mon->tagset[c->mon->seltags] ^= scratchtag;
|
|
if (c->w > selmon->ww)
|
|
nw = selmon->ww - c->bw * 2;
|
|
if (c->h > selmon->wh)
|
|
nh = selmon->wh - c->bw * 2;
|
|
if (nw > 0 || nh > 0)
|
|
resizeclient(c, c->x, c->y, nw ? nw : c->w, nh ? nh : c->h);
|
|
sendmon(c, selmon);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (found) {
|
|
if (newtagset) {
|
|
selmon->tagset[selmon->seltags] = newtagset;
|
|
focus(NULL);
|
|
arrange(selmon);
|
|
}
|
|
if (ISVISIBLE(found)) {
|
|
focus(found);
|
|
restack(selmon);
|
|
}
|
|
} else {
|
|
selmon->tagset[selmon->seltags] |= scratchtag;
|
|
spawn(&sparg);
|
|
}
|
|
}
|
|
|