GdkWin32: ignore invalid client rects
authorG.Willems <g.willems.dev@laposte.net>
Tue, 19 Sep 2023 18:29:04 +0000 (20:29 +0200)
committerMat <mail@mathias.is>
Fri, 3 Nov 2023 20:51:47 +0000 (22:51 +0200)
Gdk-Win32 uses GetClientRect() internally to query the surfaces coordinates,
but this API may fail in some transient contexts (observed when iconifying
a maximized window).
Check if the rect area is null, and don't update the surface position in
that case. This will keep the current surface size, until Win32 notifies
the new valid window state later.
This prevents using a nulled next_layout for toplevel size computation,
which would break widgets allocation once notified on gtk side.

Fixes #5724
Closes #5724

gdk/win32/gdksurface-win32.c

index a41b3e357657b50191bba37d7e0739e21027efa8..8c32ad224fbbcc2affc5c09ca9443cd4f805f148 100644 (file)
@@ -4442,6 +4442,10 @@ _gdk_win32_surface_request_layout (GdkSurface *surface)
     {
       _gdk_win32_get_window_rect (surface, &rect);
 
+      /* Keep current position if rect is invalid (i.e. queried in bad context) */
+      if (rect.right == rect.left || rect.bottom == rect.top)
+        return;
+
       impl->next_layout.configured_width = (rect.right - rect.left + scale - 1) / scale;
       impl->next_layout.configured_height = (rect.bottom - rect.top + scale - 1) / scale;