diff --git a/src/SDL.c b/src/SDL.c index 2128438c6e..767921589f 100644 --- a/src/SDL.c +++ b/src/SDL.c @@ -280,6 +280,11 @@ bool SDL_IsMainThread(void) return true; } +bool SDL_IsVideoThread(void) +{ + return (SDL_GetCurrentThreadID() == SDL_VideoThreadID); +} + // Initialize all the subsystems that require initialization before threads start void SDL_InitMainThread(void) { diff --git a/src/SDL_internal.h b/src/SDL_internal.h index 3e903be1c3..3fdd5b6997 100644 --- a/src/SDL_internal.h +++ b/src/SDL_internal.h @@ -307,6 +307,9 @@ extern SDL_NORETURN void SDL_ExitProcess(int exitcode); // Do any initialization that needs to happen before threads are started 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. We can expose these functions as part of the API if we want to later. */ diff --git a/src/hidapi/SDL_hidapi.c b/src/hidapi/SDL_hidapi.c index f3de6b344b..0dda4d4ba1 100644 --- a/src/hidapi/SDL_hidapi.c +++ b/src/hidapi/SDL_hidapi.c @@ -388,7 +388,7 @@ static void HIDAPI_UpdateDiscovery(void) } #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. } else { // We'll only get messages on the same thread that created the window