diff --git a/CHANGELOG.md b/CHANGELOG.md index 364c16ba90..33a617e285 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ * Fix memory corruption that can happen when handling window property changes (#1350) * Fix `force-win-blend` having no effect (#1354) +* Fix shadow being rendered incorrectly in xrender backend (#1352) # 12.2 (2024-Oct-10) diff --git a/src/backend/xrender/xrender.c b/src/backend/xrender/xrender.c index e5a7934918..4a44e5173d 100644 --- a/src/backend/xrender/xrender.c +++ b/src/backend/xrender/xrender.c @@ -289,7 +289,9 @@ static bool xrender_blit(struct backend_base *base, ivec2 origin, int16_t mask_pict_dst_x = 0, mask_pict_dst_y = 0; if (args->source_mask != NULL) { ivec2 mask_origin = args->source_mask->origin; - mask_pict = xrender_process_mask(xd, args->source_mask, extent, + auto extent_to_mask = + region_translate_rect(extent, ivec2_neg(ivec2_add(mask_origin, origin))); + mask_pict = xrender_process_mask(xd, args->source_mask, extent_to_mask, args->opacity < 1.0 ? mask_pict : XCB_NONE, &mask_origin, &mask_allocated); mask_pict_dst_x = to_i16_checked(-mask_origin.x);