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 
Fixes 
Closes 
Related to 
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

@ -24,6 +24,7 @@ video tutorials.
- Waris Boonyasiriwat
- Kyle Brenneman
- Rok Breulj
- TheBrokenRail
- Kai Burjack
- Martin Capitanio
- Nicolas Caramelli
@ -145,6 +146,7 @@ video tutorials.
- Pierre Moulon
- Martins Mozeiko
- Pascal Muetschard
- James Murphy
- Julian Møller
- ndogxj
- n3rdopolis

View file

@ -343,6 +343,8 @@ information on what to include when reporting a bug.
- [Wayland] Bugfix: A window content scale event would be emitted every time
the window resized
- [Wayland] Bugfix: If `glfwInit` failed it would close stdin
- [Wayland] Bugfix: Manual resizing with fallback decorations behaved erratically
(#1991,#2115,#2127)
- [POSIX] Removed use of deprecated function `gettimeofday`
- [POSIX] Bugfix: `CLOCK_MONOTONIC` was not correctly tested for or enabled
- [WGL] Disabled the DWM swap interval hack for Windows 8 and later (#1072)

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
{