SDL: GDK: Partially revert 2670eb44afec9311ee8fbec447703c427db1e1c8

From e1e5d33420f8069469aaf21e61fe58ef37c2e7db Mon Sep 17 00:00:00 2001
From: Jade Macho <[EMAIL REDACTED]>
Date: Fri, 1 Mar 2024 13:04:22 +0100
Subject: [PATCH] GDK: Partially revert
 2670eb44afec9311ee8fbec447703c427db1e1c8

MsgWaitForMultipleObjects is desktop-only.
---
 src/video/windows/SDL_windowsevents.c | 32 +++++++++++++++++++++++++++
 1 file changed, 32 insertions(+)

diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index 35d0ddb11bbbc..e8cb407380429 100644
--- a/src/video/windows/SDL_windowsevents.c
+++ b/src/video/windows/SDL_windowsevents.c
@@ -1687,6 +1687,7 @@ void SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata)
 int WIN_WaitEventTimeout(SDL_VideoDevice *_this, Sint64 timeoutNS)
 {
     if (g_WindowsEnableMessageLoop) {
+#if !defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)
         DWORD timeout, ret;
         timeout = timeoutNS < 0 ? INFINITE : (DWORD)SDL_NS_TO_MS(timeoutNS);
         ret = MsgWaitForMultipleObjects(0, NULL, FALSE, timeout, QS_ALLINPUT);
@@ -1695,6 +1696,37 @@ int WIN_WaitEventTimeout(SDL_VideoDevice *_this, Sint64 timeoutNS)
         } else {
             return 0;
         }
+#else
+        /* MsgWaitForMultipleObjects is desktop-only. */
+        MSG msg;
+        BOOL message_result;
+        UINT_PTR timer_id = 0;
+        if (timeoutNS > 0) {
+            timer_id = SetTimer(NULL, 0, (UINT)SDL_NS_TO_MS(timeoutNS), NULL);
+            message_result = GetMessage(&msg, 0, 0, 0);
+            KillTimer(NULL, timer_id);
+        } else if (timeoutNS == 0) {
+            message_result = PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
+        } else {
+            message_result = GetMessage(&msg, 0, 0, 0);
+        }
+        if (message_result) {
+            if (msg.message == WM_TIMER && !msg.hwnd && msg.wParam == timer_id) {
+                return 0;
+            }
+            if (g_WindowsMessageHook) {
+                if (!g_WindowsMessageHook(g_WindowsMessageHookData, &msg)) {
+                    return 1;
+                }
+            }
+            /* Always translate the message in case it's a non-SDL window (e.g. with Qt integration) */
+            TranslateMessage(&msg);
+            DispatchMessage(&msg);
+            return 1;
+        } else {
+            return 0;
+        }
+#endif /*!defined(SDL_PLATFORM_XBOXONE) && !defined(SDL_PLATFORM_XBOXSERIES)*/
     } else {
         /* Fail the wait so the caller falls back to polling */
         return -1;