Use predefined names for constant keyboard and mouse IDs

Fixes https://github.com/libsdl-org/SDL/issues/15563
This commit is contained in:
Sam Lantinga
2026-05-12 20:12:56 -07:00
parent 36e1efccb4
commit fcaf5bbf8c
2 changed files with 38 additions and 16 deletions

View File

@@ -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;
}

View File

@@ -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;
}