From f1118acff7f0890a4a798c1bdf55887ae1b09881 Mon Sep 17 00:00:00 2001 From: NeilClack Date: Fri, 13 Mar 2026 20:26:16 -0500 Subject: [PATCH] Fix input --- internal/page/wifiSetupPage.go | 36 ++++++++++++++++++++++------------ 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/internal/page/wifiSetupPage.go b/internal/page/wifiSetupPage.go index ec86aa8..7b42520 100644 --- a/internal/page/wifiSetupPage.go +++ b/internal/page/wifiSetupPage.go @@ -170,17 +170,14 @@ func (p *WiFiSetupPage) HandleEvent(event *sdl.Event) error { case *sdl.TextInputEvent: if p.isEnteringPassword { - text := e.GetText() - - // Append text exactly as SDL delivers it - p.passwordInput += text - - // Log every character - for _, r := range text { - logger.Info("WiFi Password character entered: %c", r) + // If we get a TextInputEvent, the system supports high-level input. + // Mark it supported so we don't double-type from KeyboardEvents. + if !p.textInputSupported { + p.textInputSupported = true + } else { + p.passwordInput += e.GetText() + p.updatePasswordTexture() } - - p.updatePasswordTexture() } case *sdl.KeyboardEvent: @@ -189,7 +186,8 @@ func (p *WiFiSetupPage) HandleEvent(event *sdl.Event) error { } if p.isEnteringPassword { - p.handlePasswordInput(e.Keysym.Sym) + // Pass the Modifiers (Shift/Caps) to the handler + p.handlePasswordInput(e.Keysym.Sym, e.Keysym.Mod) } else { p.handleNetworkSelection(e.Keysym.Sym) } @@ -199,7 +197,9 @@ func (p *WiFiSetupPage) HandleEvent(event *sdl.Event) error { } // handlePasswordInput manages keyboard events during password entry. -func (p *WiFiSetupPage) handlePasswordInput(sym sdl.Keycode) { +// Update the signature to include mod +// handlePasswordInput manages keyboard events during password entry. +func (p *WiFiSetupPage) handlePasswordInput(sym sdl.Keycode, mod uint16) { switch sym { case sdl.K_RETURN: @@ -228,11 +228,21 @@ func (p *WiFiSetupPage) handlePasswordInput(sym sdl.Keycode) { case sdl.K_ESCAPE: logger.Info("WiFi Password entry cancelled") - p.isEnteringPassword = false p.pendingSSID = "" p.connectionError = "" p.exitPasswordMode() + + default: + // FALLBACK: If the kiosk environment doesn't fire TextInputEvents, + // manually convert keycodes to characters. + if !p.textInputSupported { + if ch := keycodeToChar(sym, mod); ch != 0 { + p.passwordInput += string(ch) + logger.Info("Manual character fallback: %c", ch) + p.updatePasswordTexture() + } + } } }