From a979d8d060d378d93e5b08e8a4f9fe84ccd9e819 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Tue, 12 May 2026 20:12:56 -0700 Subject: [PATCH] Use predefined names for constant keyboard and mouse IDs Fixes https://github.com/libsdl-org/SDL/issues/15563 (cherry picked from commit fcaf5bbf8cf339eab4614e246f33ea67e9a34a28) --- src/events/SDL_keyboard.c | 24 ++++++++++++++++-------- src/events/SDL_mouse.c | 30 ++++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 16 deletions(-) diff --git a/src/events/SDL_keyboard.c b/src/events/SDL_keyboard.c index 0945339e44..f6969e37ed 100644 --- a/src/events/SDL_keyboard.c +++ b/src/events/SDL_keyboard.c @@ -201,14 +201,22 @@ SDL_KeyboardID *SDL_GetKeyboards(int *count) const char *SDL_GetKeyboardNameForID(SDL_KeyboardID instance_id) { const char *name = NULL; - if (!SDL_FindInHashTable(SDL_keyboard_names, (const void *)(uintptr_t)instance_id, (const void **)&name)) { - SDL_SetError("Keyboard %" SDL_PRIu32 " not found", instance_id); - return NULL; - } - if (!name) { - // SDL_strdup() failed during insert - SDL_OutOfMemory(); - return NULL; + + switch (instance_id) { + case SDL_GLOBAL_KEYBOARD_ID: + name = "Keyboard"; + break; + default: + if (!SDL_FindInHashTable(SDL_keyboard_names, (const void *)(uintptr_t)instance_id, (const void **)&name)) { + SDL_SetError("Keyboard %" SDL_PRIu32 " not found", instance_id); + return NULL; + } + if (!name) { + // SDL_strdup() failed during insert + SDL_OutOfMemory(); + return NULL; + } + break; } return name; } diff --git a/src/events/SDL_mouse.c b/src/events/SDL_mouse.c index 5dd25d713a..96641495ae 100644 --- a/src/events/SDL_mouse.c +++ b/src/events/SDL_mouse.c @@ -422,14 +422,28 @@ SDL_MouseID *SDL_GetMice(int *count) const char *SDL_GetMouseNameForID(SDL_MouseID instance_id) { const char *name = NULL; - if (!SDL_FindInHashTable(SDL_mouse_names, (const void *)(uintptr_t)instance_id, (const void **)&name)) { - SDL_SetError("Mouse %" SDL_PRIu32 " not found", instance_id); - return NULL; - } - if (!name) { - // SDL_strdup() failed during insert - SDL_OutOfMemory(); - return NULL; + + switch (instance_id) { + case SDL_GLOBAL_MOUSE_ID: + name = "Mouse"; + break; + case SDL_TOUCH_MOUSEID: + name = "Touch"; + break; + case SDL_PEN_MOUSEID: + name = "Pen"; + break; + default: + if (!SDL_FindInHashTable(SDL_mouse_names, (const void *)(uintptr_t)instance_id, (const void **)&name)) { + SDL_SetError("Mouse %" SDL_PRIu32 " not found", instance_id); + return NULL; + } + if (!name) { + // SDL_strdup() failed during insert + SDL_OutOfMemory(); + return NULL; + } + break; } return name; }