core: fix background not blurred under transparent windows

When a window has 0 opacity, it's rendering is skipped completely. Thus
its background isn't blurred.

This commit fixes that.

Signed-off-by: Yuxuan Shui <yshuiv7@gmail.com>
This commit is contained in:
Yuxuan Shui 2019-08-04 23:15:10 +01:00
parent 78f002d154
commit 4dc5a04735
No known key found for this signature in database
GPG Key ID: 37C999F617EA1A47
2 changed files with 6 additions and 2 deletions

View File

@ -252,7 +252,10 @@ void paint_all_new(session_t *ps, struct managed_win *t, bool ignore_damage) {
ps->backend_data->ops->compose(ps->backend_data, w->win_image,
w->g.x, w->g.y,
&reg_paint_in_bound, &reg_visible);
} else {
} else if (w->opacity * MAX_ALPHA >= 1){
// We don't need to paint the window body itself if it's
// completely transparent.
// For window image processing, we don't need to limit the process
// region to damage, since the window image data is independent
// from the target image data, which we want to protect.

View File

@ -511,7 +511,8 @@ static struct managed_win *paint_preprocess(session_t *ps, bool *fade_running) {
if (!w->ever_damaged || w->g.x + w->g.width < 1 ||
w->g.y + w->g.height < 1 || w->g.x >= ps->root_width ||
w->g.y >= ps->root_height || w->state == WSTATE_UNMAPPED ||
(double)w->opacity * MAX_ALPHA < 1 || w->paint_excluded) {
((double)w->opacity * MAX_ALPHA < 1 && !w->blur_background) ||
w->paint_excluded) {
// TODO: for consistency, even a window has 0 opacity, we still
// probably need to blur its background, so to_paint shouldn't be
// false for them.