Pārlūkot izejas kodu

emscripten: Let SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT accept "".

This is used to say "don't even try to listen for keypresses," for apps that
are managing this outside of SDL.

Fixes #10292.
Ryan C. Gordon 3 mēneši atpakaļ
vecāks
revīzija
6a72d32d41

+ 1 - 0
include/SDL3/SDL_hints.h

@@ -730,6 +730,7 @@ extern "C" {
  * - "#document": the javascript document object
  * - "#screen": the javascript window.screen object
  * - "#canvas": the WebGL canvas element
+ * - "": Don't bind anything at all
  * - any other string without a leading # sign applies to the element on the
  *   page with that ID.
  *

+ 10 - 6
src/video/emscripten/SDL_emscriptenevents.c

@@ -1033,9 +1033,11 @@ void Emscripten_RegisterEventHandlers(SDL_WindowData *data)
         keyElement = EMSCRIPTEN_EVENT_TARGET_WINDOW;
     }
 
-    emscripten_set_keydown_callback(keyElement, data, 0, Emscripten_HandleKey);
-    emscripten_set_keyup_callback(keyElement, data, 0, Emscripten_HandleKey);
-    emscripten_set_keypress_callback(keyElement, data, 0, Emscripten_HandleKeyPress);
+    if (*keyElement) {
+        emscripten_set_keydown_callback(keyElement, data, 0, Emscripten_HandleKey);
+        emscripten_set_keyup_callback(keyElement, data, 0, Emscripten_HandleKey);
+        emscripten_set_keypress_callback(keyElement, data, 0, Emscripten_HandleKeyPress);
+    }
 
     emscripten_set_fullscreenchange_callback(EMSCRIPTEN_EVENT_TARGET_DOCUMENT, data, 0, Emscripten_HandleFullscreenChange);
 
@@ -1092,9 +1094,11 @@ void Emscripten_UnregisterEventHandlers(SDL_WindowData *data)
         target = EMSCRIPTEN_EVENT_TARGET_WINDOW;
     }
 
-    emscripten_set_keydown_callback(target, NULL, 0, NULL);
-    emscripten_set_keyup_callback(target, NULL, 0, NULL);
-    emscripten_set_keypress_callback(target, NULL, 0, NULL);
+    if (*target) {
+        emscripten_set_keydown_callback(target, NULL, 0, NULL);
+        emscripten_set_keyup_callback(target, NULL, 0, NULL);
+        emscripten_set_keypress_callback(target, NULL, 0, NULL);
+    }
 
     emscripten_set_fullscreenchange_callback(EMSCRIPTEN_EVENT_TARGET_DOCUMENT, NULL, 0, NULL);