From cda17aee16f004f034e7f75dd81113833a485216 Mon Sep 17 00:00:00 2001 From: Erik Reider <35975961+ErikReider@users.noreply.github.com> Date: Mon, 3 Jul 2023 18:45:26 +0200 Subject: [PATCH] Fixed blur/surfaces dst_box not being offset by the titlebar height (#185) --- sway/desktop/render.c | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/sway/desktop/render.c b/sway/desktop/render.c index 4ebfb941..50f7d70b 100644 --- a/sway/desktop/render.c +++ b/sway/desktop/render.c @@ -723,9 +723,18 @@ static void render_view_toplevels(struct sway_view *view, struct sway_output *ou if (state.fullscreen_mode == FULLSCREEN_NONE && (state.border == B_PIXEL || state.border == B_NORMAL)) { clip_box.x += state.border_thickness; - clip_box.y += state.border_thickness; clip_box.width -= state.border_thickness * 2; - clip_box.height -= state.border_thickness * 2; + + if (deco_data.has_titlebar) { + // Shift the box downward to compensate for the titlebar + int titlebar_thickness = container_titlebar_height(); + clip_box.y += titlebar_thickness; + clip_box.height -= state.border_thickness + titlebar_thickness; + } else { + // Regular border + clip_box.y += state.border_thickness; + clip_box.height -= state.border_thickness * 2; + } } data.clip_box = &clip_box; @@ -788,9 +797,18 @@ static void render_saved_view(struct sway_view *view, struct sway_output *output dst_box.height = state.height; if (state.border == B_PIXEL || state.border == B_NORMAL) { dst_box.x += state.border_thickness; - dst_box.y += state.border_thickness; dst_box.width -= state.border_thickness * 2; - dst_box.height -= state.border_thickness * 2; + + if (deco_data.has_titlebar) { + // Shift the box downward to compensate for the titlebar + int titlebar_thickness = container_titlebar_height(); + dst_box.y += titlebar_thickness; + dst_box.height -= state.border_thickness + titlebar_thickness; + } else { + // Regular border + dst_box.y += state.border_thickness; + dst_box.height -= state.border_thickness * 2; + } } scale_box(&dst_box, wlr_output->scale);