SDL: GDK: Partially revert 2670eb44afec9311ee8fbec447703c427db1e1c8 (da9bf)

From da9bfc43e796182f7d5c8bfc86a5ec2e50ae90d0 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.

(cherry picked from commit e1e5d33420f8069469aaf21e61fe58ef37c2e7db)
---
 src/video/windows/SDL_windowsevents.c | 30 +++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/src/video/windows/SDL_windowsevents.c b/src/video/windows/SDL_windowsevents.c
index 8e05c414d4d65..360da2a7a6169 100644
--- a/src/video/windows/SDL_windowsevents.c
+++ b/src/video/windows/SDL_windowsevents.c
@@ -1803,6 +1803,7 @@ void SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata)
 int WIN_WaitEventTimeout(_THIS, int timeout)
 {
     if (g_WindowsEnableMessageLoop) {
+#if !defined(__XBOXONE__) && !defined(__XBOXSERIES__)
         DWORD dwMilliseconds, ret;
         dwMilliseconds = timeout < 0 ? INFINITE : (DWORD)timeout;
         ret = MsgWaitForMultipleObjects(0, NULL, FALSE, dwMilliseconds, QS_ALLINPUT);
@@ -1811,6 +1812,35 @@ int WIN_WaitEventTimeout(_THIS, int timeout)
         } else {
             return 0;
         }
+#else
+        /* MsgWaitForMultipleObjects is desktop-only. */
+        MSG msg;
+        BOOL message_result;
+        UINT_PTR timer_id = 0;
+        if (timeout > 0) {
+            timer_id = SetTimer(NULL, 0, timeout, NULL);
+            message_result = GetMessage(&msg, 0, 0, 0);
+            KillTimer(NULL, timer_id);
+        } else if (timeout == 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) {
+                g_WindowsMessageHook(g_WindowsMessageHookData, msg.hwnd, msg.message, msg.wParam, msg.lParam);
+            }
+            /* 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(__XBOXONE__) && !defined(__XBOXSERIES__)*/
     } else {
         /* Fail the wait so the caller falls back to polling */
         return -1;