From fe4d462917dd6a9d1c1bb85a89d2acfd1f3b559a Mon Sep 17 00:00:00 2001 From: Andrew Belt Date: Tue, 11 Feb 2025 04:25:08 -0500 Subject: [PATCH] Use standard/different Mac key commands for navigating text fields. --- src/ui/TextField.cpp | 42 ++++++++++++++++++++++++++++++++---------- 1 file changed, 32 insertions(+), 10 deletions(-) diff --git a/src/ui/TextField.cpp b/src/ui/TextField.cpp index 8ca299de..c12a31f4 100644 --- a/src/ui/TextField.cpp +++ b/src/ui/TextField.cpp @@ -119,6 +119,12 @@ void TextField::onSelectText(const SelectTextEvent& e) { } void TextField::onSelectKey(const SelectKeyEvent& e) { +#if defined ARCH_MAC + #define TEXTFIELD_MOD_CTRL RACK_MOD_ALT +#else + #define TEXTFIELD_MOD_CTRL RACK_MOD_CTRL +#endif + if (e.action == GLFW_PRESS || e.action == GLFW_REPEAT) { // Backspace if (e.isKeyCommand(GLFW_KEY_BACKSPACE)) { @@ -129,7 +135,7 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { e.consume(this); } // Ctrl+Backspace - if (e.isKeyCommand(GLFW_KEY_BACKSPACE, RACK_MOD_CTRL)) { + if (e.isKeyCommand(GLFW_KEY_BACKSPACE, TEXTFIELD_MOD_CTRL)) { if (cursor == selection) { cursorToPrevWord(); } @@ -145,7 +151,7 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { e.consume(this); } // Ctrl+Delete - if (e.isKeyCommand(GLFW_KEY_DELETE, RACK_MOD_CTRL)) { + if (e.isKeyCommand(GLFW_KEY_DELETE, TEXTFIELD_MOD_CTRL)) { if (cursor == selection) { cursorToNextWord(); } @@ -158,7 +164,7 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { selection = cursor; e.consume(this); } - if (e.isKeyCommand(GLFW_KEY_LEFT, RACK_MOD_CTRL)) { + if (e.isKeyCommand(GLFW_KEY_LEFT, TEXTFIELD_MOD_CTRL)) { cursorToPrevWord(); selection = cursor; e.consume(this); @@ -167,7 +173,7 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { cursor = string::UTF8PrevCodepoint(text, cursor); e.consume(this); } - if (e.isKeyCommand(GLFW_KEY_LEFT, RACK_MOD_CTRL | GLFW_MOD_SHIFT)) { + if (e.isKeyCommand(GLFW_KEY_LEFT, TEXTFIELD_MOD_CTRL | GLFW_MOD_SHIFT)) { cursorToPrevWord(); e.consume(this); } @@ -177,7 +183,7 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { selection = cursor; e.consume(this); } - if (e.isKeyCommand(GLFW_KEY_RIGHT, RACK_MOD_CTRL)) { + if (e.isKeyCommand(GLFW_KEY_RIGHT, TEXTFIELD_MOD_CTRL)) { cursorToNextWord(); selection = cursor; e.consume(this); @@ -186,7 +192,7 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { cursor = string::UTF8NextCodepoint(text, cursor); e.consume(this); } - if (e.isKeyCommand(GLFW_KEY_RIGHT, RACK_MOD_CTRL | GLFW_MOD_SHIFT)) { + if (e.isKeyCommand(GLFW_KEY_RIGHT, TEXTFIELD_MOD_CTRL | GLFW_MOD_SHIFT)) { cursorToNextWord(); e.consume(this); } @@ -199,22 +205,38 @@ void TextField::onSelectKey(const SelectKeyEvent& e) { e.consume(this); } // Home - if (e.isKeyCommand(GLFW_KEY_HOME)) { + if (e.isKeyCommand(GLFW_KEY_HOME) +#if defined ARCH_MAC + || e.isKeyCommand(GLFW_KEY_LEFT, RACK_MOD_CTRL) +#endif + ) { selection = cursor = 0; e.consume(this); } // Shift+Home - if (e.isKeyCommand(GLFW_KEY_HOME, GLFW_MOD_SHIFT)) { + if (e.isKeyCommand(GLFW_KEY_HOME, GLFW_MOD_SHIFT) +#if defined ARCH_MAC + || e.isKeyCommand(GLFW_KEY_LEFT, RACK_MOD_CTRL | GLFW_MOD_SHIFT) +#endif + ) { cursor = 0; e.consume(this); } // End - if (e.isKeyCommand(GLFW_KEY_END)) { + if (e.isKeyCommand(GLFW_KEY_END) +#if defined ARCH_MAC + || e.isKeyCommand(GLFW_KEY_RIGHT, RACK_MOD_CTRL) +#endif + ) { selection = cursor = text.size(); e.consume(this); } // Shift+End - if (e.isKeyCommand(GLFW_KEY_END, GLFW_MOD_SHIFT)) { + if (e.isKeyCommand(GLFW_KEY_END, GLFW_MOD_SHIFT) +#if defined ARCH_MAC + || e.isKeyCommand(GLFW_KEY_RIGHT, RACK_MOD_CTRL | GLFW_MOD_SHIFT) +#endif + ) { cursor = text.size(); e.consume(this); }