Wayland: Fix erratic fallback decoration behavior

The handler for xdg_toplevel::configure treated the provided size as the
content area size when instead it is the size of the bounding rectangle
of the wl_surface and all its subsurfaces.

This caused the fallback decorations to try positioning themselves
outside themselves, causing feedback loops during interactive resizing.

Fixes #1991
Fixes #2115
Closes #2127
Related to #1914
This commit is contained in:
Camilla Löwy
2022-06-16 01:36:55 +02:00
parent 24cdc5afda
commit 0f5b095042
3 changed files with 15 additions and 2 deletions

View File

@@ -495,8 +495,17 @@ static void xdgToplevelHandleConfigure(void* userData,
if (width && height)
{
window->wl.pending.width = width;
window->wl.pending.height = height;
if (window->wl.decorations.top.surface)
{
window->wl.pending.width = _glfw_max(0, width - GLFW_BORDER_SIZE * 2);
window->wl.pending.height =
_glfw_max(0, height - GLFW_BORDER_SIZE - GLFW_CAPTION_HEIGHT);
}
else
{
window->wl.pending.width = width;
window->wl.pending.height = height;
}
}
else
{