From 00bdd48b1d93b91946c7655ec8829060040aec22 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 | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'screen.c') diff --git a/screen.c b/screen.c index 4fc6f4e..a1b8b30 100644 --- a/screen.c +++ b/screen.c @@ -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 1.4.1