فهرست منبع

Fixed HIDAPI hotplug detection in applications that don't initialize video

(cherry picked from commit eaeca340f3828aa706e2cff05bafb61e9132c7f7)
Sam Lantinga 3 هفته پیش
والد
کامیت
4361920501
3فایلهای تغییر یافته به همراه9 افزوده شده و 1 حذف شده
  1. 5 0
      src/SDL.c
  2. 3 0
      src/SDL_internal.h
  3. 1 1
      src/hidapi/SDL_hidapi.c

+ 5 - 0
src/SDL.c

@@ -280,6 +280,11 @@ bool SDL_IsMainThread(void)
     return true;
     return true;
 }
 }
 
 
+bool SDL_IsVideoThread(void)
+{
+    return (SDL_GetCurrentThreadID() == SDL_VideoThreadID);
+}
+
 // Initialize all the subsystems that require initialization before threads start
 // Initialize all the subsystems that require initialization before threads start
 void SDL_InitMainThread(void)
 void SDL_InitMainThread(void)
 {
 {

+ 3 - 0
src/SDL_internal.h

@@ -306,6 +306,9 @@ extern SDL_NORETURN void SDL_ExitProcess(int exitcode);
 // Do any initialization that needs to happen before threads are started
 // Do any initialization that needs to happen before threads are started
 extern void SDL_InitMainThread(void);
 extern void SDL_InitMainThread(void);
 
 
+// Return true if this thread has initialized video
+extern bool SDL_IsVideoThread(void);
+
 /* The internal implementations of these functions have up to nanosecond precision.
 /* The internal implementations of these functions have up to nanosecond precision.
    We can expose these functions as part of the API if we want to later.
    We can expose these functions as part of the API if we want to later.
 */
 */

+ 1 - 1
src/hidapi/SDL_hidapi.c

@@ -388,7 +388,7 @@ static void HIDAPI_UpdateDiscovery(void)
     }
     }
 
 
 #if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK)
 #if defined(SDL_PLATFORM_WIN32) || defined(SDL_PLATFORM_WINGDK)
-    if (SDL_IsMainThread()) {
+    if (SDL_IsVideoThread()) {
         // just let the usual SDL_PumpEvents loop dispatch these, fixing bug 2998. --ryan.
         // just let the usual SDL_PumpEvents loop dispatch these, fixing bug 2998. --ryan.
     } else {
     } else {
         // We'll only get messages on the same thread that created the window
         // We'll only get messages on the same thread that created the window