diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-11-11 15:55:15 +0100 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-11-11 15:55:15 +0100 |
commit | 6ae365f99616dfe1084e6b70c78fe790e1bec038 (patch) | |
tree | a89a0d87733f5b428bf1d0cabcb112aa122e506f /nmaster.c | |
parent | Removed swallow patch (diff) | |
download | dwm-6ae365f99616dfe1084e6b70c78fe790e1bec038.tar.gz dwm-6ae365f99616dfe1084e6b70c78fe790e1bec038.tar.bz2 dwm-6ae365f99616dfe1084e6b70c78fe790e1bec038.tar.xz dwm-6ae365f99616dfe1084e6b70c78fe790e1bec038.tar.zst dwm-6ae365f99616dfe1084e6b70c78fe790e1bec038.zip |
Added patches nmaster and tagothermon
Diffstat (limited to 'nmaster.c')
-rw-r--r-- | nmaster.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/nmaster.c b/nmaster.c new file mode 100644 index 0000000..10bfed1 --- /dev/null +++ b/nmaster.c @@ -0,0 +1,122 @@ +enum {MaxMon = 8}; +static int nmasters[MaxMon]; +static int initnm = 0; + +static void +initnmaster(void) { + int i; + + if(initnm) + return; + for(i = 0; i < MaxMon; i++) + nmasters[i] = nmaster; + initnm = 1; +} + +static void +incnmaster(const Arg *arg) { + if(!arg || !selmon->lt[selmon->sellt]->arrange || selmon->num >= MaxMon) + return; + nmasters[selmon->num] += arg->i; + if(nmasters[selmon->num] < 0) + nmasters[selmon->num] = 0; + arrange(selmon); +} + +/* static void */ +/* setnmaster(const Arg *arg) { */ +/* if(!arg || !selmon->lt[selmon->sellt]->arrange || selmon->num >= MaxMon) */ +/* return; */ +/* nmasters[selmon->num] = arg->i > 0 ? arg->i : 0; */ +/* arrange(selmon); */ +/* } */ + +static void +ntile(Monitor *m) { + int x, y, h, w, mw, nm; + unsigned int i, n; + Client *c; + + initnmaster(); + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + c = nexttiled(m->clients); + nm = m->num < MaxMon ? nmasters[m->num] : nmaster; + if(nm > n) + nm = n; + /* master */ + if(nm > 0) { + mw = m->mfact * m->ww; + h = m->wh / nm; + if(h < bh) + h = m->wh; + y = m->wy; + for(i = 0; i < nm; i++, c = nexttiled(c->next)) { + resize(c, m->wx, y, (n == nm ? m->ww : mw) - 2 * c->bw, + ((i + 1 == nm) ? m->wy + m->wh - y : h) - 2 * c->bw, False); + if(h != m->wh) + y = c->y + HEIGHT(c); + } + n -= nm; + } else + mw = 0; + if(n == 0) + return; + /* tile stack */ + x = m->wx + mw; + y = m->wy; + w = m->ww - mw; + h = m->wh / n; + if(h < bh) + h = m->wh; + for(i = 0; c; c = nexttiled(c->next), i++) { + resize(c, x, y, w - 2 * c->bw, + ((i + 1 == n) ? m->wy + m->wh - y : h) - 2 * c->bw, False); + if(h != m->wh) + y = c->y + HEIGHT(c); + } +} + +static void +nbstack(Monitor *m) { + int x, y, h, w, mh, nm; + unsigned int i, n; + Client *c; + + initnmaster(); + for(n = 0, c = nexttiled(m->clients); c; c = nexttiled(c->next), n++); + c = nexttiled(m->clients); + nm = m->num < MaxMon ? nmasters[m->num] : nmaster; + if(nm > n) + nm = n; + /* master */ + if(nm > 0) { + mh = m->mfact * m->wh; + w = m->ww / nm; + if(w < bh) + w = m->ww; + x = m->wx; + for(i = 0; i < nm; i++, c = nexttiled(c->next)) { + resize(c, x, m->wy, ((i + 1 == nm) ? m->wx + m->ww - x : w) - 2 * c->bw, + (n == nm ? m->wh : mh) - 2 * c->bw, False); + if(w != m->ww) + x = c->x + WIDTH(c); + } + n -= nm; + } else + mh = 0; + if(n == 0) + return; + /* tile stack */ + x = m->wx; + y = m->wy + mh; + w = m->ww / n; + h = m->wh - mh; + if(w < bh) + w = m->ww; + for(i = 0; c; c = nexttiled(c->next), i++) { + resize(c, x, y, ((i + 1 == n) ? m->wx + m->ww - x : w) - 2 * c->bw, + h - 2 * c->bw, False); + if(w != m->ww) + x = c->x + WIDTH(c); + } +} |