From 2ca727aec6f5f264620f80999beb5ef77eefec4a Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Thu, 9 Mar 2023 10:31:39 -0800
Subject: [PATCH] If the client rect is empty, use the last known window size
This happens on Windows 11 with fullscreen desktop windows when the desktop is brought up with the Windows+D shortcut.
Fixes https://github.com/libsdl-org/SDL/issues/7419
---
src/video/windows/SDL_windowsevents.c | 3 +--
src/video/windows/SDL_windowswindow.c | 6 +++---
2 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index dc7312f64958..9529baf637f9 100644
--- a/src/video/windows/SDL_windowsevents.c
+++ b/src/video/windows/SDL_windowsevents.c
@@ -1395,8 +1395,7 @@ WIN_WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
RECT rect;
float x, y;
- if (!GetClientRect(hwnd, &rect) ||
- (rect.right == rect.left && rect.bottom == rect.top)) {
+ if (!GetClientRect(hwnd, &rect) || IsRectEmpty(&rect)) {
if (inputs) {
SDL_small_free(inputs, isstack);
}
diff --git a/src/video/windows/SDL_windowswindow.c b/src/video/windows/SDL_windowswindow.c
index 62a8ba5a1431..c9ab6d480ce6 100644
--- a/src/video/windows/SDL_windowswindow.c
+++ b/src/video/windows/SDL_windowswindow.c
@@ -792,12 +792,12 @@ void WIN_GetWindowSizeInPixels(_THIS, SDL_Window *window, int *w, int *h)
HWND hwnd = data->hwnd;
RECT rect;
- if (GetClientRect(hwnd, &rect)) {
+ if (GetClientRect(hwnd, &rect) && !IsRectEmpty(&rect)) {
*w = rect.right;
*h = rect.bottom;
} else {
- *w = 0;
- *h = 0;
+ *w = window->last_pixel_w;
+ *h = window->last_pixel_h;
}
}