SDL: Fixed detection of function keys on Emscripten

From 67382e9c839a41188dc06e0b8089445123453611 Mon Sep 17 00:00:00 2001
From: Sam Lantinga <[EMAIL REDACTED]>
Date: Wed, 15 Jan 2025 07:39:05 -0800
Subject: [PATCH] Fixed detection of function keys on Emscripten

Fixes https://github.com/libsdl-org/SDL/issues/11973
---
 src/video/emscripten/SDL_emscriptenevents.c | 13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/video/emscripten/SDL_emscriptenevents.c b/src/video/emscripten/SDL_emscriptenevents.c
index 8084ed2fe3f82..834bca8beb619 100644
--- a/src/video/emscripten/SDL_emscriptenevents.c
+++ b/src/video/emscripten/SDL_emscriptenevents.c
@@ -482,6 +482,17 @@ static EM_BOOL Emscripten_HandleTouch(int eventType, const EmscriptenTouchEvent
     return preventDefault;
 }
 
+static bool IsFunctionKey(SDL_Scancode scancode)
+{
+    if (scancode >= SDL_SCANCODE_F1 && scancode <= SDL_SCANCODE_F12) {
+        return true;
+    }
+    if (scancode >= SDL_SCANCODE_F13 && scancode <= SDL_SCANCODE_F24) {
+        return true;
+    }
+    return false;
+}
+
 /* This is a great tool to see web keyboard events live:
  * https://w3c.github.io/uievents/tools/key-event-viewer.html
  */
@@ -557,7 +568,7 @@ static EM_BOOL Emscripten_HandleKey(int eventType, const EmscriptenKeyboardEvent
         (scancode == SDL_SCANCODE_UP) ||
         (scancode == SDL_SCANCODE_RIGHT) ||
         (scancode == SDL_SCANCODE_DOWN) ||
-        ((scancode >= SDL_SCANCODE_F1) && (scancode <= SDL_SCANCODE_F15)) ||
+        IsFunctionKey(scancode) ||
         keyEvent->ctrlKey) {
         is_nav_key = true;
     }