From dee940161e3c72fa2938e9e1182ed7ae5498266e Mon Sep 17 00:00:00 2001 From: IoI_xD Date: Fri, 20 Mar 2026 19:33:12 -0700 Subject: [PATCH] clip: only apply extra clipping when haves decorations --- src/backend/wayland.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/backend/wayland.c b/src/backend/wayland.c index d6eae3c..6f7a08e 100644 --- a/src/backend/wayland.c +++ b/src/backend/wayland.c @@ -1472,16 +1472,22 @@ static void destroy_popup(MwLL r) { } static void clip(MwLL handle) { - MwLL topmost = handle->wayland.parent; - if(topmost && handle->wayland.type == MWLL_WAYLAND_SUBLEVEL) { + MwLL parent = handle->wayland.parent; + MwLL topmost = parent; + int left_offset = 0; + int top_offset = 0; + + if(parent && handle->wayland.type == MWLL_WAYLAND_SUBLEVEL) { cairo_reset_clip(handle->wayland.front_cairo); - cairo_rectangle(handle->wayland.front_cairo, 0, 0, (topmost->wayland.ww + handle->wayland.x) - (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT), (topmost->wayland.wh + handle->wayland.y) - (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM)); + cairo_rectangle(handle->wayland.front_cairo, 0, 0, (parent->wayland.ww + handle->wayland.x), (parent->wayland.wh + handle->wayland.y)); cairo_clip(handle->wayland.front_cairo); } if(topmost && handle->wayland.type == MWLL_WAYLAND_SUBLEVEL) { - while(topmost->wayland.parent) topmost = topmost->wayland.parent; cairo_reset_clip(handle->wayland.front_cairo); - cairo_rectangle(handle->wayland.front_cairo, 0, 0, (topmost->wayland.ww + handle->wayland.x) - (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT), (topmost->wayland.wh + handle->wayland.y) - (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM)); + while(topmost->wayland.parent) topmost = topmost->wayland.parent; + left_offset = topmost->wayland.has_decorations ? 0 : (CSD_BORDER_FRAME_LEFT + CSD_BORDER_FRAME_RIGHT); + top_offset = topmost->wayland.has_decorations ? 0 : (CSD_BORDER_FRAME_TOP + CSD_BORDER_FRAME_BOTTOM); + cairo_rectangle(handle->wayland.front_cairo, 0, 0, (topmost->wayland.ww + handle->wayland.x) - left_offset, (topmost->wayland.wh + handle->wayland.y) - top_offset); cairo_clip(handle->wayland.front_cairo); } }