From f6e8a8177b9a788143af50b495e95bc51ae57452 Mon Sep 17 00:00:00 2001 From: Brendan Hagan Date: Wed, 20 Jul 2022 21:44:40 -0400 Subject: [PATCH 1/3] fix: correct unicode text entry behavior (fixes twanvl#121) GetKeyCode doesn't handle unicode, so it returns 0 for cyrillic (and other) characters, which was getting rejected as invalid input. I'm assuming this broke on some wxWidgets upgrade, as the MSE code for this hasn't changed in over a decade? --- src/gui/value/text.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gui/value/text.cpp b/src/gui/value/text.cpp index 47b35968..cb705b27 100644 --- a/src/gui/value/text.cpp +++ b/src/gui/value/text.cpp @@ -482,8 +482,15 @@ bool TextValueEditor::onChar(wxKeyEvent& ev) { } } return true; - default: - #ifdef __WXMSW__ + default: + #if defined UNICODE + // I think in theory this works because the UnicodeKey is intended to be only character values. + // See the following link for pretty much an exact example of this type of handling. + // https://docs.wxwidgets.org/3.0/classwx_key_event.html#a3dccc5a254770931e5d8066ef47e7fb0 + // Most of the special keys (<32) are handled in the case structure above anyways. + // I tried to replicate the Numpad issue mentioned below, but couldn't - so unclear if that's still relevant. + if (ev.GetUnicodeKey() >= WXK_SPACE) { + #elif defined __WXMSW__ if (ev.GetKeyCode() >= _(' ') && ev.GetKeyCode() == (int)ev.GetRawKeyCode()) { // This check is need, otherwise pressing a key, say "0" on the numpad produces "a0" // (don't ask me why) From 9f162fed1efdccd3506f1573e344321d7b184068 Mon Sep 17 00:00:00 2001 From: Brendan Hagan Date: Wed, 20 Jul 2022 21:49:11 -0400 Subject: [PATCH 2/3] release: 2.2.2 --- CHANGES.md | 7 +++++++ CMakeLists.txt | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index ef63d010..c7682251 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -9,6 +9,13 @@ Features: Bug fixes: +------------------------------------------------------------------------------ +version 2.2.2 (Unofficial), 2022-07-19 +------------------------------------------------------------------------------ + +Bug fixes: + * Correct unicode text entry behavior. (twanvl#121) + ------------------------------------------------------------------------------ version 2.2.1 (Unofficial), 2022-07-19 ------------------------------------------------------------------------------ diff --git a/CMakeLists.txt b/CMakeLists.txt index 96df4722..cbc3450a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.13) -project(magicseteditor VERSION 2.2.1) +project(magicseteditor VERSION 2.2.2) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) From 0eed9aa777e5c37b729ec4815a33415c837ce195 Mon Sep 17 00:00:00 2001 From: Brendan Hagan Date: Thu, 21 Jul 2022 17:11:49 -0400 Subject: [PATCH 3/3] fix: unicode text entry on set symbol editor --- src/gui/symbol/part_list.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/symbol/part_list.cpp b/src/gui/symbol/part_list.cpp index 310b21c3..24445514 100644 --- a/src/gui/symbol/part_list.cpp +++ b/src/gui/symbol/part_list.cpp @@ -266,8 +266,10 @@ void SymbolPartList::onChar(wxKeyEvent& ev) { } break; default: - // See gui/value/text.cpp - #ifdef __WXMSW__ + // See gui/value/text.cpp + #if defined UNICODE + if (ev.GetUnicodeKey() >= WXK_SPACE) { + #elif defined __WXMSW__ if (ev.GetKeyCode() >= _(' ') && ev.GetKeyCode() == (int)ev.GetRawKeyCode()) { #else if (ev.GetKeyCode() >= _(' ') /*&& ev.GetKeyCode() == (int)ev.GetRawKeyCode()*/) {