From fe245c6e0d48755faef8976102ff37775dab0d07 Mon Sep 17 00:00:00 2001
From: Frank Praznik <[EMAIL REDACTED]>
Date: Fri, 7 Mar 2025 13:56:44 -0500
Subject: [PATCH] x11: Always synthesize size events for external windows
External windows may call this to update the renderer size, but not pump SDL events, either by syncing or running an event loop, so the size event always needs to be synthesized for external windows. If it is wrong, the true size will be sent if/when events are processed.
---
src/video/x11/SDL_x11window.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/src/video/x11/SDL_x11window.c b/src/video/x11/SDL_x11window.c
index 5aa91ed105208..b33295d5ac77c 100644
--- a/src/video/x11/SDL_x11window.c
+++ b/src/video/x11/SDL_x11window.c
@@ -1324,6 +1324,14 @@ void X11_SetWindowSize(SDL_VideoDevice *_this, SDL_Window *window)
data->pending_operation |= X11_PENDING_OP_RESIZE;
X11_XResizeWindow(display, data->xwindow, data->expected.w, data->expected.h);
}
+
+ /* External windows may call this to update the renderer size, but not pump SDL events,
+ * so the size event needs to be synthesized for external windows. If it is wrong, the
+ * true size will be sent if/when events are processed.
+ */
+ if (window->flags & SDL_WINDOW_EXTERNAL) {
+ SDL_SendWindowEvent(window, SDL_EVENT_WINDOW_RESIZED, window->pending.w, window->pending.h);
+ }
}
bool X11_GetWindowBordersSize(SDL_VideoDevice *_this, SDL_Window *window, int *top, int *left, int *bottom, int *right)