Thanks for reporting this. This was an Objo bug that is now fixed in the next release: https://feedback.objo.dev/bug/928
The problem was caused by Objo treating text input as though it were an additional keyboard event. It then tried to convert characters such as @ back into keys using a US keyboard mapping. That assumption breaks on international layouts and could also cause KeyDown to fire twice: once for the real key press and once for the resulting text.
This has now been fixed for the next release:
KeyDown and KeyUp are generated only by genuine native keyboard events.
- Text input, dead-key composition and IME output no longer create synthetic
KeyDown events.
- The existing
keyName parameter remains the logical key and follows the active keyboard layout.
Keyboard.KeySymbol provides the exact symbol associated with the event, such as "@", "é" or "2".
Keyboard.PhysicalKey identifies the physical key position using its US-QWERTY equivalent.
Keyboard.IsPhysicalKeyDown() is available for games that need controls to remain in the same physical positions across different layouts.
For example:
Function TextField1_KeyDown(keyName As String) As Boolean
If Keyboard.KeySymbol = "@" Then
Print("The @ symbol was entered")
End If
Return False
End Function
Games and canvas applications are not losing keyboard events: every real native KeyDown still fires normally. They can use logical keys for layout-aware controls or the new physical-key API for fixed-position controls such as WASD.
For text fields, TextChanged remains the correct event for observing the resulting text, including pasted text and composed international characters.