diff --git a/src/cocoa_window.m b/src/cocoa_window.m index 9d794940..c865c09e 100644 --- a/src/cocoa_window.m +++ b/src/cocoa_window.m @@ -1659,14 +1659,15 @@ const char* _glfwGetScancodeNameCocoa(int scancode) { @autoreleasepool { - if (scancode < 0 || scancode > 0xff || - _glfw.ns.keycodes[scancode] == GLFW_KEY_UNKNOWN) + if (scancode < 0 || scancode > 0xff) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode %i", scancode); return NULL; } const int key = _glfw.ns.keycodes[scancode]; + if (key == GLFW_KEY_UNKNOWN) + return NULL; UInt32 deadKeyState = 0; UniChar characters[4]; diff --git a/src/win32_window.c b/src/win32_window.c index db3bed6e..917a0f6c 100644 --- a/src/win32_window.c +++ b/src/win32_window.c @@ -2223,14 +2223,17 @@ void _glfwSetCursorModeWin32(_GLFWwindow* window, int mode) const char* _glfwGetScancodeNameWin32(int scancode) { - if (scancode < 0 || scancode > (KF_EXTENDED | 0xff) || - _glfw.win32.keycodes[scancode] == GLFW_KEY_UNKNOWN) + if (scancode < 0 || scancode > (KF_EXTENDED | 0xff)) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode %i", scancode); return NULL; } - return _glfw.win32.keynames[_glfw.win32.keycodes[scancode]]; + const int key = _glfw.win32.keycodes[scancode]; + if (key == GLFW_KEY_UNKNOWN) + return NULL; + + return _glfw.win32.keynames[key]; } int _glfwGetKeyScancodeWin32(int key) diff --git a/src/wl_window.c b/src/wl_window.c index 8d8f8ab1..f047f44c 100644 --- a/src/wl_window.c +++ b/src/wl_window.c @@ -2535,8 +2535,7 @@ void _glfwSetCursorModeWayland(_GLFWwindow* window, int mode) const char* _glfwGetScancodeNameWayland(int scancode) { - if (scancode < 0 || scancode > 255 || - _glfw.wl.keycodes[scancode] == GLFW_KEY_UNKNOWN) + if (scancode < 0 || scancode > 255) { _glfwInputError(GLFW_INVALID_VALUE, "Wayland: Invalid scancode %i", @@ -2545,6 +2544,9 @@ const char* _glfwGetScancodeNameWayland(int scancode) } const int key = _glfw.wl.keycodes[scancode]; + if (key == GLFW_KEY_UNKNOWN) + return NULL; + const xkb_keycode_t keycode = scancode + 8; const xkb_layout_index_t layout = xkb_state_key_get_layout(_glfw.wl.xkb.state, keycode); diff --git a/src/x11_window.c b/src/x11_window.c index 3c76d3a9..c2541b9f 100644 --- a/src/x11_window.c +++ b/src/x11_window.c @@ -2901,14 +2901,16 @@ const char* _glfwGetScancodeNameX11(int scancode) if (!_glfw.x11.xkb.available) return NULL; - if (scancode < 0 || scancode > 0xff || - _glfw.x11.keycodes[scancode] == GLFW_KEY_UNKNOWN) + if (scancode < 0 || scancode > 0xff) { _glfwInputError(GLFW_INVALID_VALUE, "Invalid scancode %i", scancode); return NULL; } const int key = _glfw.x11.keycodes[scancode]; + if (key == GLFW_KEY_UNKNOWN) + return NULL; + const KeySym keysym = XkbKeycodeToKeysym(_glfw.x11.display, scancode, _glfw.x11.xkb.group, 0); if (keysym == NoSymbol)