From f6f5e0fe9eb0a0ce66ee5d0720182bfadf2cf800 Mon Sep 17 00:00:00 2001 From: okan Date: Wed, 11 Nov 2015 14:22:01 +0000 Subject: Partial revert of replacing screen_area() with region_find(); until a fix for a regression is found; this bug has been around for a long time it seems, but this change exposed it. Likely need to track clients in to and out of regions. --- screen.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'screen.c') diff --git a/screen.c b/screen.c index eb52404..e1f5fe8 100644 --- a/screen.c +++ b/screen.c @@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: screen.c,v 1.78 2015/11/09 20:03:30 okan Exp $ + * $OpenBSD: screen.c,v 1.79 2015/11/11 14:22:01 okan Exp $ */ #include @@ -138,6 +138,24 @@ region_find(struct screen_ctx *sc, int x, int y) return(rc); } +struct geom +screen_area(struct screen_ctx *sc, int x, int y, int flags) +{ + struct region_ctx *rc; + struct geom area = sc->work; + + 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; + break; + } + } + if (flags & CWM_GAP) + area = screen_apply_gap(sc, area); + return(area); +} + void screen_update_geometry(struct screen_ctx *sc) { @@ -171,6 +189,10 @@ screen_update_geometry(struct screen_ctx *sc) 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; -- cgit v1.2.3-2-gb3c3