From 9ae773bcbcd0a3d6627c57e45ce95d39766636b7 Mon Sep 17 00:00:00 2001 From: Nintorch <92302738+Nintorch@users.noreply.github.com> Date: Thu, 21 May 2026 22:26:52 +0500 Subject: [PATCH] [skip ci] Wait until the user interacts with the page --- src/joystick/emscripten/SDL_sysjoystick.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/joystick/emscripten/SDL_sysjoystick.c b/src/joystick/emscripten/SDL_sysjoystick.c index d488fa7538..ed39b31b43 100644 --- a/src/joystick/emscripten/SDL_sysjoystick.c +++ b/src/joystick/emscripten/SDL_sysjoystick.c @@ -140,11 +140,24 @@ static void SDL_WebHID_DisconnectEmscriptenGamepad(int device_index) static void SDL_RequestWebHIDDevice(Uint16 vendor, Uint16 product, int device_index) { MAIN_THREAD_EM_ASM({ + function timeout(ms) { + return new Promise(resolve => setTimeout(resolve, ms)); + } + if ("hid" in navigator) { async function handler() { - let devices = await navigator["hid"]["requestDevice"]({ "filters": [ { "vendorId": $0, "productId": $1, } ]}); - if (devices) { - dynCall("vi", $2, [$3]); + while (true) { + try { + let devices = await navigator["hid"]["requestDevice"]({ "filters": [ { "vendorId": $0, "productId": $1, } ]}); + if (devices) { + dynCall("vi", $2, [$3]); + } + return; + } catch(e) { + // Exception, most likely because the user hasn't interacted with the page yet. + // Let's wait until they do, hopefully. + await timeout(500); + } } } handler();