diff --git a/src/ui/TextField.cpp b/src/ui/TextField.cpp index 7507285c..0c831e47 100644 --- a/src/ui/TextField.cpp +++ b/src/ui/TextField.cpp @@ -160,8 +160,12 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { } // Left if (e.isKeyCommand(GLFW_KEY_LEFT)) { - cursor = string::UTF8PrevCodepoint(text, cursor); - selection = cursor; + if (selection == cursor) { + selection = cursor = string::UTF8PrevCodepoint(text, cursor); + } + else { + selection = cursor = std::min(selection, cursor); + } e.consume(this); } if (e.isKeyCommand(GLFW_KEY_LEFT, TEXTFIELD_MOD_CTRL)) { @@ -179,8 +183,12 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { } // Right if (e.isKeyCommand(GLFW_KEY_RIGHT)) { - cursor = string::UTF8NextCodepoint(text, cursor); - selection = cursor; + if (selection == cursor) { + selection = cursor = string::UTF8NextCodepoint(text, cursor); + } + else { + selection = cursor = std::max(selection, cursor); + } e.consume(this); } if (e.isKeyCommand(GLFW_KEY_RIGHT, TEXTFIELD_MOD_CTRL)) {