From 99275212f95d228cab83be05b6ff558e83ad908b Mon Sep 17 00:00:00 2001 From: monofuel Date: Tue, 17 Feb 2026 14:10:25 -0500 Subject: [PATCH] fix rune handling on linux --- src/windy/platforms/linux/x11.nim | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/windy/platforms/linux/x11.nim b/src/windy/platforms/linux/x11.nim index a7e19a1..5f8eb3a 100644 --- a/src/windy/platforms/linux/x11.nim +++ b/src/windy/platforms/linux/x11.nim @@ -44,7 +44,6 @@ type lastSync: XSyncValue closeRequested, closed: bool - runeInputEnabled: bool innerDecorated: bool innerFocused: bool @@ -642,10 +641,10 @@ proc contentScale*(window: Window): float32 = return 1.0 proc runeInputEnabled*(window: Window): bool = - window.runeInputEnabled + window.state.runeInputEnabled proc `runeInputEnabled=`*(window: Window, v: bool) = - window.runeInputEnabled = v + window.state.runeInputEnabled = v proc cursor*(window: Window): common.Cursor = window.state.cursor @@ -740,7 +739,7 @@ proc newWindow*( init() result = Window() result.innerDecorated = true - result.runeInputEnabled = true + result.state.runeInputEnabled = true let root = display.defaultRootWindow @@ -885,6 +884,9 @@ proc pollEvents(window: Window) = if window.onButtonRelease != nil: window.onButtonRelease(button) + proc handleRune(window: Window, rune: Rune) = + handleRuneTemplate() + while display.XCheckIfEvent(ev.addr, checkEvent, cast[pointer](window)): case ev.kind @@ -1095,7 +1097,7 @@ proc pollEvents(window: Window) = pushButtonEvent(key, ev.kind == xeKeyPress) # handle text input - if window.runeInputEnabled and + if window.state.runeInputEnabled and ev.kind == xeKeyPress and window.ic != nil and (ev.key.state and ControlMask) == 0: @@ -1105,10 +1107,9 @@ proc pollEvents(window: Window) = s.setLen(window.ic.Xutf8LookupString( ev.key.addr, s.cstring, 16, nil, status.addr )) - if s != "\u001B": # Ignore ESC. + if status == XLookupChars or status == XLookupBoth: for rune in s.runes: - if window.onRune != nil: - window.onRune(rune) + window.handleRune(rune) of xeSelection: # Handle XDnD selection data.