diff options
| author | bakkeby <[email protected]> | 2020-09-26 12:42:56 +0200 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2020-09-27 09:54:14 +0200 |
| commit | 6f5b1582d6e1cdc9f7fb851d2aa9ad2e319e718f (patch) | |
| tree | c9c833dba217ec1350d1104074290bd04455c84d /patch | |
| parent | da05d567a1b5d7bcf6512ce7e5af995655b5af36 (diff) | |
| download | dwm-flexipatch-6f5b1582d6e1cdc9f7fb851d2aa9ad2e319e718f.tar.gz dwm-flexipatch-6f5b1582d6e1cdc9f7fb851d2aa9ad2e319e718f.zip | |
scratchpads: enhancing scratchpad by allowing arbitrary clients to be added to (and removed from) each scratchpad area
Diffstat (limited to 'patch')
| -rw-r--r-- | patch/scratchpad.c | 75 | ||||
| -rw-r--r-- | patch/scratchpad.h | 2 |
2 files changed, 53 insertions, 24 deletions
diff --git a/patch/scratchpad.c b/patch/scratchpad.c index 5813b6f..2034d0d 100644 --- a/patch/scratchpad.c +++ b/patch/scratchpad.c @@ -1,45 +1,72 @@ 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; + Client *c = NULL, *next = NULL, *found = NULL; Monitor *mon; - unsigned int found = 0; unsigned int scratchtag = SPTAG(arg->ui); - unsigned int newtagset; + unsigned int newtagset = 0; int nh = 0, nw = 0; Arg sparg = {.v = scratchpads[arg->ui].cmd}; - for (mon = mons; mon && !found; mon = mon->next) - for (c = mon->clients; c && !(found = c->tags & scratchtag); c = c->next); + for (mon = mons; mon; mon = mon->next) { + for (c = mon->clients; c; c = next) { + next = c->next; + if (!(c->tags & scratchtag)) + continue; - if (found) { + found = c; - if (HIDDEN(c)) { - XMapWindow(dpy, c->win); - setclientstate(c, NormalState); - newtagset = 0; - } else - newtagset = selmon->tagset[selmon->seltags] ^ scratchtag; + 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 (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(c)) { - focus(c); + if (ISVISIBLE(found)) { + focus(found); restack(selmon); } } else { diff --git a/patch/scratchpad.h b/patch/scratchpad.h index 3142cdf..42e592b 100644 --- a/patch/scratchpad.h +++ b/patch/scratchpad.h @@ -3,4 +3,6 @@ typedef struct { const void *cmd; } Sp; +static void removescratch(const Arg *arg); +static void setscratch(const Arg *arg); static void togglescratch(const Arg *arg);
\ No newline at end of file |
