Sfoglia il codice sorgente

Fixed bug where the Steam overlay would generate an event and stop input processing for the frame.

Sam Lantinga 5 anni fa
parent
commit
afb9ff9507
1 ha cambiato i file con 10 aggiunte e 1 eliminazioni
  1. 10 1
      src/video/windows/SDL_windowsevents.c

+ 10 - 1
src/video/windows/SDL_windowsevents.c

@@ -1119,6 +1119,7 @@ WIN_PumpEvents(_THIS)
     const Uint8 *keystate;
     MSG msg;
     DWORD start_ticks = GetTickCount();
+    int new_messages = 0;
 
     if (g_WindowsEnableMessageLoop) {
         while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
@@ -1132,7 +1133,15 @@ WIN_PumpEvents(_THIS)
 
             /* Make sure we don't busy loop here forever if there are lots of events coming in */
             if (SDL_TICKS_PASSED(msg.time, start_ticks)) {
-                break;
+                /* We might get a few new messages generated by the Steam overlay or other application hooks
+                   In this case those messages will be processed before any pending input, so we want to continue after those messages.
+                   (thanks to Peter Deayton for his investigation here)
+                 */
+                const int MAX_NEW_MESSAGES = 3;
+                ++new_messages;
+                if (new_messages > MAX_NEW_MESSAGES) {
+                    break;
+                }
             }
         }
     }