On Sun, Apr 23, 2017 at 11:54:31PM +1000, Daniel Cousens wrote: > I have found this pattern to take up significant parts of my time when > rebasing my changes onto suckless/master, � such that I feel the > following patch will both increase readability, � reduce diffs and > overall increase code quality :). > Thoughts?
> From 160dbe6eaa8fccc1eb5c9cde036b9256c2e820c5 Mon Sep 17 00:00:00 2001 > From: Daniel Cousens <[email protected]> > Date: Sun, 23 Apr 2017 18:46:47 +1000 > Subject: [PATCH] use canarrange over sellmon->sellt repeated pattern > > --- > dwm.c | 28 ++++++++++++++++------------ > 1 file changed, 16 insertions(+), 12 deletions(-) > > diff --git a/dwm.c b/dwm.c > index 7861512..fdea9e2 100644 > --- a/dwm.c > +++ b/dwm.c > @@ -235,6 +235,10 @@ static int xerrordummy(Display *dpy, XErrorEvent *ee); > static int xerrorstart(Display *dpy, XErrorEvent *ee); > static void zoom(const Arg *arg); > > +int canarrange (Monitor* m) { > + return m->lt[m->sellt]->arrange != NULL; > +} > + Minor style: > +int > +canarrange (Monitor* m) > +{ > + return m->lt[m->sellt]->arrange != NULL; > +} > /* variables */ > static const char broken[] = "broken"; > static char stext[256]; > @@ -344,7 +348,7 @@ applysizehints(Client *c, int *x, int *y, int *w, int *h, > int interact) > *h = bh; > if (*w < bh) > *w = bh; > - if (resizehints || c->isfloating || > !c->mon->lt[c->mon->sellt]->arrange) { > + if (resizehints || c->isfloating || !canarrange(c->mon)) { > /* see last two sentences in ICCCM 4.1.2.3 */ > baseismin = c->basew == c->minw && c->baseh == c->minh; > if (!baseismin) { /* temporarily remove base dimensions */ > @@ -396,7 +400,7 @@ void > arrangemon(Monitor *m) > { > strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol); > - if (m->lt[m->sellt]->arrange) > + if (canarrange(m)) > m->lt[m->sellt]->arrange(m); > } > > @@ -587,7 +591,7 @@ configurerequest(XEvent *e) > if ((c = wintoclient(ev->window))) { > if (ev->value_mask & CWBorderWidth) > c->bw = ev->border_width; > - else if (c->isfloating || !selmon->lt[selmon->sellt]->arrange) { > + else if (c->isfloating || !canarrange(selmon)) { > m = c->mon; > if (ev->value_mask & CWX) { > c->oldx = c->x; > @@ -1178,10 +1182,10 @@ movemouse(const Arg *arg) > ny = selmon->wy; > else if (abs((selmon->wy + selmon->wh) - (ny + > HEIGHT(c))) < snap) > ny = selmon->wy + selmon->wh - HEIGHT(c); > - if (!c->isfloating && selmon->lt[selmon->sellt]->arrange > + if (!c->isfloating && canarrange(selmon) > && (abs(nx - c->x) > snap || abs(ny - c->y) > snap)) > togglefloating(NULL); > - if (!selmon->lt[selmon->sellt]->arrange || > c->isfloating) > + if (!canarrange(selmon) || c->isfloating) > resize(c, nx, ny, c->w, c->h, 1); > break; > } > @@ -1327,11 +1331,11 @@ resizemouse(const Arg *arg) > if (c->mon->wx + nw >= selmon->wx && c->mon->wx + nw <= > selmon->wx + selmon->ww > && c->mon->wy + nh >= selmon->wy && c->mon->wy + nh <= > selmon->wy + selmon->wh) > { > - if (!c->isfloating && > selmon->lt[selmon->sellt]->arrange > + if (!c->isfloating && canarrange(selmon) > && (abs(nw - c->w) > snap || abs(nh - c->h) > > snap)) > togglefloating(NULL); > } > - if (!selmon->lt[selmon->sellt]->arrange || > c->isfloating) > + if (!canarrange(selmon) || c->isfloating) > resize(c, c->x, c->y, nw, nh, 1); > break; > } > @@ -1356,9 +1360,9 @@ restack(Monitor *m) > drawbar(m); > if (!m->sel) > return; > - if (m->sel->isfloating || !m->lt[m->sellt]->arrange) > + if (m->sel->isfloating || !canarrange(m)) > XRaiseWindow(dpy, m->sel->win); > - if (m->lt[m->sellt]->arrange) { > + if (canarrange(m)) { > wc.stack_mode = Below; > wc.sibling = m->barwin; > for (c = m->stack; c; c = c->snext) > @@ -1519,7 +1523,7 @@ setmfact(const Arg *arg) > { > float f; > > - if (!arg || !selmon->lt[selmon->sellt]->arrange) > + if (!arg || !canarrange(selmon)) > return; > f = arg->f < 1.0 ? arg->f + selmon->mfact : arg->f - 1.0; > if (f < 0.1 || f > 0.9) > @@ -1620,7 +1624,7 @@ showhide(Client *c) > if (ISVISIBLE(c)) { > /* show clients top down */ > XMoveWindow(dpy, c->win, c->x, c->y); > - if ((!c->mon->lt[c->mon->sellt]->arrange || c->isfloating) && > !c->isfullscreen) > + if ((!canarrange(c->mon) || c->isfloating) && !c->isfullscreen) > resize(c, c->x, c->y, c->w, c->h, 0); > showhide(c->snext); > } else { > @@ -2116,7 +2120,7 @@ zoom(const Arg *arg) > { > Client *c = selmon->sel; > > - if (!selmon->lt[selmon->sellt]->arrange > + if (!canarrange(selmon) > || (selmon->sel && selmon->sel->isfloating)) > return; > if (c == nexttiled(selmon->clients)) > -- > 2.12.2 > Looks good to me, apart from a minor style thingy (see above) :) -- Kind regards, Hiltjo
