From f59a1bb31051e1c8b82643bc1de486daea794f31 Mon Sep 17 00:00:00 2001 From: Richard Higgins Date: Tue, 8 Sep 2026 19:20:44 -0700 Subject: [PATCH 1/3] Allow printable browser keydown events to deliver rune input --- src/windy/platforms/emscripten/platform.nim | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/windy/platforms/emscripten/platform.nim b/src/windy/platforms/emscripten/platform.nim index ec8b794..4564bd8 100644 --- a/src/windy/platforms/emscripten/platform.nim +++ b/src/windy/platforms/emscripten/platform.nim @@ -660,6 +660,12 @@ proc onKeyDown(eventType: cint, keyEvent: ptr EmscriptenKeyboardEvent, userData: let window = cast[Window](userData) let button = keyCodeToButton(keyEvent.keyCode) window.handleButtonPress(button) + # Canceling a printable keydown suppresses the keypress that delivers runes. + # Keep navigation and shortcuts captured; onKeyPress consumes text input. + if window.runeInputEnabled and not keyEvent.ctrlKey and not keyEvent.metaKey: + let key = $cast[cstring](keyEvent.key[0].addr) + if key.runeLen == 1: + return 0 return 1 proc onKeyUp(eventType: cint, keyEvent: ptr EmscriptenKeyboardEvent, userData: pointer): EM_BOOL {.cdecl.} = From d38903c295fdbb74e46bda70c3d6b892195d95c3 Mon Sep 17 00:00:00 2001 From: Richard Higgins Date: Tue, 8 Sep 2026 21:14:34 -0700 Subject: [PATCH 2/3] Normalize browser wheel direction across host platforms --- src/windy/platforms/emscripten/platform.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/windy/platforms/emscripten/platform.nim b/src/windy/platforms/emscripten/platform.nim index 4564bd8..e8fb055 100644 --- a/src/windy/platforms/emscripten/platform.nim +++ b/src/windy/platforms/emscripten/platform.nim @@ -646,7 +646,7 @@ proc onWheel(eventType: cint, wheelEvent: ptr EmscriptenWheelEvent, userData: po # very different magnitudes. Use a flat OS-based multiplier instead. let scale = if "Mac" in platform: -1.0f - else: 0.2f + else: -0.2f let x = wheelEvent.deltaX.float32 * scale y = wheelEvent.deltaY.float32 * scale From 812ed158f735b75320c0b7d5db2b7e56f448d406 Mon Sep 17 00:00:00 2001 From: Richard Higgins Date: Wed, 9 Sep 2026 13:22:35 -0700 Subject: [PATCH 3/3] Recognize Command keys in browser shortcuts --- src/windy/platforms/emscripten/platform.nim | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/windy/platforms/emscripten/platform.nim b/src/windy/platforms/emscripten/platform.nim index e8fb055..7b78c64 100644 --- a/src/windy/platforms/emscripten/platform.nim +++ b/src/windy/platforms/emscripten/platform.nim @@ -656,9 +656,15 @@ proc onWheel(eventType: cint, wheelEvent: ptr EmscriptenWheelEvent, userData: po window.onScroll() return 1 +proc keyEventToButton(event: ptr EmscriptenKeyboardEvent): Button = + case $cast[cstring](event.code[0].addr) + of "MetaLeft": KeyLeftSuper + of "MetaRight": KeyRightSuper + else: keyCodeToButton(event.keyCode) + proc onKeyDown(eventType: cint, keyEvent: ptr EmscriptenKeyboardEvent, userData: pointer): EM_BOOL {.cdecl.} = let window = cast[Window](userData) - let button = keyCodeToButton(keyEvent.keyCode) + let button = keyEventToButton(keyEvent) window.handleButtonPress(button) # Canceling a printable keydown suppresses the keypress that delivers runes. # Keep navigation and shortcuts captured; onKeyPress consumes text input. @@ -670,7 +676,7 @@ proc onKeyDown(eventType: cint, keyEvent: ptr EmscriptenKeyboardEvent, userData: proc onKeyUp(eventType: cint, keyEvent: ptr EmscriptenKeyboardEvent, userData: pointer): EM_BOOL {.cdecl.} = let window = cast[Window](userData) - let button = keyCodeToButton(keyEvent.keyCode) + let button = keyEventToButton(keyEvent) window.handleButtonRelease(button) return 1