Re: [hackers] Repeated usage of m->lt[m->sellt]->arrange deduplication

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Sun, 23 Apr 2017 20:14:01 +0200

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 <github_AT_dcousens.com>
> 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
> _AT_@ -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];
> _AT_@ -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 */
> _AT_@ -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);
> }
>
> _AT_@ -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;
> _AT_@ -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;
> }
> _AT_@ -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;
> }
> _AT_@ -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)
> _AT_@ -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)
> _AT_@ -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 {
> _AT_@ -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
Received on Sun Apr 23 2017 - 20:14:01 CEST

This archive was generated by hypermail 2.3.0 : Sun Apr 23 2017 - 20:24:19 CEST