dwm-noxz

[fork] suckless dwm - personal fork
git clone git://git.noxz.tech/dwm-noxz
Log | Files | Refs | README | LICENSE

commit e543008324dc7d4e391ad5860f2b9d073c5a33ff
parent 692ab19d88732811618db19cd5e019800c3c5471
Author: Chris Noxz <chris@noxz.tech>
Date:   Thu, 12 Nov 2020 14:29:38 +0100

implement dwm changes since 2019-02-02:
* setmfact: Unify bounds for compile-time and runtime mfact
* getatomprop: Add forward declaration
* drawbar: Don't shadow sw global
* dwm crashes when opening 50+ clients (tile layout)
* Fix memory leaks in drw
* dwm.1: fix wrong text in man page
* Fix x coordinate calculation in buttonpress.

Diffstat:
Mdrw.c | 1+
Mdwm.1 | 2+-
Mdwm.c | 21++++++++++++---------
3 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/drw.c b/drw.c @@ -95,6 +95,7 @@ drw_free(Drw *drw) { XFreePixmap(drw->dpy, drw->drawable); XFreeGC(drw->dpy, drw->gc); + drw_fontset_free(drw->fonts); free(drw); } diff --git a/dwm.1 b/dwm.1 @@ -33,7 +33,7 @@ dwm draws a small border around windows to indicate the focus state. .SH OPTIONS .TP .B \-v -prints version information to standard output, then exits. +prints version information to stderr, then exits. .SH USAGE .SS Status bar .TP diff --git a/dwm.c b/dwm.c @@ -180,6 +180,7 @@ static void focus(Client *c); static void focusin(XEvent *e); static void focusmon(const Arg *arg); static void focusstack(const Arg *arg); +static Atom getatomprop(Client *c, Atom prop); static int getrootptr(int *x, int *y); static long getstate(Window w); static int gettextprop(Window w, Atom atom, char *text, unsigned int size); @@ -464,7 +465,7 @@ buttonpress(XEvent *e) arg.ui = 1 << i; } else if (ev->x < x + blw) click = ClkLtSymbol; - else if (ev->x > selmon->ww - TEXTW(stext)) + else if (ev->x > selmon->ww - (int)TEXTW(stext)) click = ClkStatusText; else click = ClkWinTitle; @@ -834,7 +835,7 @@ dispatchcmd(void) void drawbar(Monitor *m) { - int x, w, mid, sw = 0; + int x, w, mid, tw = 0; int boxs = drw->fonts->h / 9; int boxw = drw->fonts->h / 6 + 2; unsigned int i, occ = 0, urg = 0; @@ -852,19 +853,19 @@ drawbar(Monitor *m) if ((unsigned int)*ts > LENGTH(colors)) { ts++; continue ; } ctmp = *ts; *ts = '\0'; - sw += TEXTW(tp) -lrpad; + tw += TEXTW(tp) -lrpad; if (ctmp == '\0') { break; } *ts = ctmp; tp = ++ts; } - sw += 2; /* 2px right padding */ + tw += 2; /* 2px right padding */ ts = stext; tp = stext; while (1) { if ((unsigned int)*ts > LENGTH(colors)) { ts++; continue ; } ctmp = *ts; *ts = '\0'; - drw_text(drw, m->ww - sw + tx, 0, sw - tx, bh, 0, tp, 0); + drw_text(drw, m->ww - tw + tx, 0, tw - tx, bh, 0, tp, 0); tx += TEXTW(tp) -lrpad; if (ctmp == '\0') { break; } drw_setscheme(drw, scheme[(unsigned int)(ctmp-1)]); @@ -893,7 +894,7 @@ drawbar(Monitor *m) drw_setscheme(drw, scheme[SchemeTagsSel]); x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0); - if ((w = m->ww - sw - x) > bh) { + if ((w = m->ww - tw - x) > bh) { if (m->sel) { mid = (m->ww - TEXTW(m->sel->name)) / 2 - x; drw_setscheme(drw, scheme[m == selmon ? SchemeTitleSel : SchemeTitleNorm]); @@ -1793,7 +1794,7 @@ setmfact(const Arg *arg) if (!arg || !selmon->lt[selmon->sellt]->arrange) return; f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; - if (f < 0.1 || f > 0.9) + if (f < 0.05 || f > 0.95) return; selmon->mfact = selmon->pertag->mfacts[selmon->pertag->curtag] = f; arrange(selmon); @@ -2039,11 +2040,13 @@ tile(Monitor *m) if (i < m->nmaster) { h = (m->wh - my) / (MIN(n, m->nmaster) - i); resize(c, m->wx, m->wy + my, mw - (2*c->bw), h - (2*c->bw), 0); - my += HEIGHT(c); + if (my + HEIGHT(c) < m->wh) + my += HEIGHT(c); } else { h = (m->wh - ty) / (n - i); resize(c, m->wx + mw, m->wy + ty, m->ww - mw - (2*c->bw), h - (2*c->bw), 0); - ty += HEIGHT(c); + if (ty + HEIGHT(c) < m->wh) + ty += HEIGHT(c); } }