From 83c19491b80839655674a9af9cc341d3371cec73 Mon Sep 17 00:00:00 2001 From: Bernd Busse Date: Mon, 28 Jun 2021 20:10:00 +0200 Subject: [PATCH] win: use correct geometry in calculation of window frame region Use window geometry (width, height) including border-width as the base for frame region calculation with `_NET_FRAME_EXTENTS`, instead of including the extents themselves. Fixes issues where the frame would get incorrectly blurred *outside* the window area. fixes: #413 #590 related: fb3305fb9bf7801f0b8608cd92f90d8b548688a8 --- src/win.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/win.c b/src/win.c index e47b626..f2ab1f5 100644 --- a/src/win.c +++ b/src/win.c @@ -231,8 +231,8 @@ void win_get_region_noframe_local(const struct managed_win *w, region_t *res) { int x = extents.left; int y = extents.top; - int width = max2(w->g.width - (extents.left + extents.right), 0); - int height = max2(w->g.height - (extents.top + extents.bottom), 0); + int width = max2(w->widthb - (extents.left + extents.right), 0); + int height = max2(w->heightb - (extents.top + extents.bottom), 0); pixman_region32_fini(res); if (width > 0 && height > 0) { @@ -246,8 +246,9 @@ gen_without_corners(win_get_region_noframe_local); void win_get_region_frame_local(const struct managed_win *w, region_t *res) { const margin_t extents = win_calc_frame_extents(w); - auto outer_width = extents.left + extents.right + w->g.width; - auto outer_height = extents.top + extents.bottom + w->g.height; + auto outer_width = w->widthb; + auto outer_height = w->heightb; + pixman_region32_fini(res); pixman_region32_init_rects( res,