Hi, In screen_area(), if no matching region is found, the gap will effectively be applied one time too many. Additionally, region_ctx.work is never used, and .area is the same as .view, so I removed these (except .view).
After this patch, screen_ctx.work is only used in xu_ewmh_net_workarea(), so it can be removed later. Vadik. -- If there was anything that depressed him more than his own cynicism, it was that quite often it still wasn't as cynical as real life. -- Terry Pratchett, "Guards! Guards!"
Index: calmwm.h =================================================================== RCS file: /cvs/xenocara/app/cwm/calmwm.h,v retrieving revision 1.311 diff -u -r1.311 calmwm.h --- calmwm.h 12 Nov 2015 21:28:03 -0000 1.311 +++ calmwm.h 12 Dec 2015 17:28:02 -0000 @@ -218,9 +218,7 @@ struct region_ctx { TAILQ_ENTRY(region_ctx) entry; int num; - struct geom area; struct geom view; /* viewable area */ - struct geom work; /* workable area, gap-applied */ }; TAILQ_HEAD(region_ctx_q, region_ctx); Index: screen.c =================================================================== RCS file: /cvs/xenocara/app/cwm/screen.c,v retrieving revision 1.79 diff -u -r1.79 screen.c --- screen.c 11 Nov 2015 14:22:01 -0000 1.79 +++ screen.c 12 Dec 2015 17:28:03 -0000 @@ -142,12 +142,12 @@ screen_area(struct screen_ctx *sc, int x, int y, int flags) { struct region_ctx *rc; - struct geom area = sc->work; + struct geom area = sc->view; TAILQ_FOREACH(rc, &sc->regionq, entry) { - if ((x >= rc->area.x) && (x < (rc->area.x + rc->area.w)) && - (y >= rc->area.y) && (y < (rc->area.y + rc->area.h))) { - area = rc->area; + if ((x >= rc->view.x) && (x < (rc->view.x + rc->view.w)) && + (y >= rc->view.y) && (y < (rc->view.y + rc->view.h))) { + area = rc->view; break; } } @@ -189,15 +189,10 @@ rc = xmalloc(sizeof(*rc)); rc->num = i; - rc->area.x = ci->x; - rc->area.y = ci->y; - rc->area.w = ci->width; - rc->area.h = ci->height; rc->view.x = ci->x; rc->view.y = ci->y; rc->view.w = ci->width; rc->view.h = ci->height; - rc->work = screen_apply_gap(sc, rc->view); TAILQ_INSERT_TAIL(&sc->regionq, rc, entry); XRRFreeCrtcInfo(ci); @@ -210,7 +205,6 @@ rc->view.y = 0; rc->view.w = DisplayWidth(X_Dpy, sc->which); rc->view.h = DisplayHeight(X_Dpy, sc->which); - rc->work = screen_apply_gap(sc, rc->view); TAILQ_INSERT_TAIL(&sc->regionq, rc, entry); }