diff options
| author | bakkeby <[email protected]> | 2020-03-23 12:15:50 +0100 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2020-03-23 12:15:50 +0100 |
| commit | 7bc3cf765e4108f2020b68ecbe212d077156bc88 (patch) | |
| tree | a51bcf5a912ae31a8b0732f3da6bfff85c8352f6 /patch/stacker.c | |
| parent | cd818c14bbee1e6f560414cb8eac70c8f24e8be5 (diff) | |
| download | dwm-flexipatch-7bc3cf765e4108f2020b68ecbe212d077156bc88.tar.gz dwm-flexipatch-7bc3cf765e4108f2020b68ecbe212d077156bc88.zip | |
Adding stacker patch as requested ref. #17
Diffstat (limited to 'patch/stacker.c')
| -rw-r--r-- | patch/stacker.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/patch/stacker.c b/patch/stacker.c new file mode 100644 index 0000000..db6da82 --- /dev/null +++ b/patch/stacker.c @@ -0,0 +1,74 @@ +void +focusstack(const Arg *arg) +{ + int i = stackpos(arg); + Client *c, *p; + + if (i < 0) + return; + + #if ALWAYSFULLSCREEN_PATCH + if (!selmon->sel || selmon->sel->isfullscreen) + return; + #endif // ALWAYSFULLSCREEN_PATCH + + for (p = NULL, c = selmon->clients; c && (i || !ISVISIBLE(c)); + i -= ISVISIBLE(c) ? 1 : 0, p = c, c = c->next); + focus(c ? c : p); + restack(selmon); +} + +void +pushstack(const Arg *arg) +{ + int i = stackpos(arg); + Client *sel = selmon->sel, *c, *p; + + if (i < 0) + return; + else if (i == 0) { + detach(sel); + attach(sel); + } + else { + for (p = NULL, c = selmon->clients; c; p = c, c = c->next) + if (!(i -= (ISVISIBLE(c) && c != sel))) + break; + c = c ? c : p; + detach(sel); + sel->next = c->next; + c->next = sel; + } + arrange(selmon); +} + +int +stackpos(const Arg *arg) +{ + int n, i; + Client *c, *l; + + if (!selmon->clients) + return -1; + + if (arg->i == PREVSEL) { + for (l = selmon->stack; l && (!ISVISIBLE(l) || l == selmon->sel); l = l->snext); + if (!l) + return -1; + for (i = 0, c = selmon->clients; c != l; i += ISVISIBLE(c) ? 1 : 0, c = c->next); + return i; + } + else if (ISINC(arg->i)) { + if(!selmon->sel) + return -1; + for (i = 0, c = selmon->clients; c != selmon->sel; i += ISVISIBLE(c) ? 1 : 0, c = c->next); + for (n = i; c; n += ISVISIBLE(c) ? 1 : 0, c = c->next); + return MOD(i + GETINC(arg->i), n); + } + else if (arg->i < 0) { + for(i = 0, c = selmon->clients; c; i += ISVISIBLE(c) ? 1 : 0, c = c->next); + return MAX(i + arg->i, 0); + } + else + return arg->i; +}
\ No newline at end of file |
