fix: Certain shortcuts not being captured by ImHex Web
This commit is contained in:
parent
9b12232e9f
commit
6ead8d8b49
6
dist/web/source/wasm-config.js
vendored
6
dist/web/source/wasm-config.js
vendored
@ -261,4 +261,8 @@ function js_resizeCanvas() {
|
|||||||
canvas.left = document.documentElement.clientLeft;
|
canvas.left = document.documentElement.clientLeft;
|
||||||
canvas.width = Math.min(document.documentElement.clientWidth, window.innerWidth || 0);
|
canvas.width = Math.min(document.documentElement.clientWidth, window.innerWidth || 0);
|
||||||
canvas.height = Math.min(document.documentElement.clientHeight, window.innerHeight || 0);
|
canvas.height = Math.min(document.documentElement.clientHeight, window.innerHeight || 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prevent default browser shortcuts from preventing ImHex ones to work
|
||||||
|
document.addEventListener('keydown', e => { e.preventDefault(); })
|
||||||
|
document.addEventListener('keyup', e => { e.preventDefault(); })
|
@ -890,20 +890,24 @@ namespace hex {
|
|||||||
glfwSetKeyCallback(m_window, [](GLFWwindow *window, int key, int scanCode, int action, int mods) {
|
glfwSetKeyCallback(m_window, [](GLFWwindow *window, int key, int scanCode, int action, int mods) {
|
||||||
std::ignore = mods;
|
std::ignore = mods;
|
||||||
|
|
||||||
// Handle A-Z keys using their ASCII value instead of the keycode
|
#if !defined(OS_WEB)
|
||||||
if (key >= GLFW_KEY_A && key <= GLFW_KEY_Z) {
|
// Handle A-Z keys using their ASCII value instead of the keycode
|
||||||
std::string_view name = glfwGetKeyName(key, scanCode);
|
if (key >= GLFW_KEY_A && key <= GLFW_KEY_Z) {
|
||||||
|
std::string_view name = glfwGetKeyName(key, scanCode);
|
||||||
|
|
||||||
// If the key name is only one character long, use the ASCII value instead
|
// If the key name is only one character long, use the ASCII value instead
|
||||||
// Otherwise the keyboard was set to a non-English layout and the key name
|
// Otherwise the keyboard was set to a non-English layout and the key name
|
||||||
// is not the same as the ASCII value
|
// is not the same as the ASCII value
|
||||||
if (!name.empty()) {
|
if (!name.empty()) {
|
||||||
const std::uint8_t byte = name[0];
|
const std::uint8_t byte = name[0];
|
||||||
if (name.length() == 1 && byte <= 0x7F) {
|
if (name.length() == 1 && byte <= 0x7F) {
|
||||||
key = std::toupper(byte);
|
key = std::toupper(byte);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
#else
|
||||||
|
// Emscripten doesn't support glfwGetKeyName. Just pass the value through.
|
||||||
|
#endif
|
||||||
|
|
||||||
if (key == GLFW_KEY_UNKNOWN) return;
|
if (key == GLFW_KEY_UNKNOWN) return;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user