From 3937e949bfb2b1476627a40591b72fd1b88ca180 Mon Sep 17 00:00:00 2001 From: Justin Luque Date: Thu, 15 Jan 2026 19:15:16 -0500 Subject: [PATCH] feat: hold confirm/select for caps --- src/activities/util/KeyboardEntryActivity.cpp | 20 ++++++++++++++++++- src/activities/util/KeyboardEntryActivity.h | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/activities/util/KeyboardEntryActivity.cpp b/src/activities/util/KeyboardEntryActivity.cpp index aa4ffc20..981364c1 100644 --- a/src/activities/util/KeyboardEntryActivity.cpp +++ b/src/activities/util/KeyboardEntryActivity.cpp @@ -13,6 +13,10 @@ const char* const KeyboardEntryActivity::keyboard[NUM_ROWS] = { const char* const KeyboardEntryActivity::keyboardShift[NUM_ROWS] = {"~!@#$%^&*()_+", "QWERTYUIOP{}|", "ASDFGHJKL:\"", "ZXCVBNM<>?", "SPECIAL ROW"}; +namespace { +constexpr unsigned long capsMs = 1000; +} + void KeyboardEntryActivity::taskTrampoline(void* param) { auto* self = static_cast(param); self->displayTaskLoop(); @@ -221,7 +225,12 @@ void KeyboardEntryActivity::loop() { } // Selection - if (mappedInput.wasPressed(MappedInputManager::Button::Confirm)) { + if (mappedInput.isPressed(MappedInputManager::Button::Confirm) && mappedInput.getHeldTime() >= capsMs) { + onCapsHeld(); + return; + } + + if (mappedInput.wasPressed(MappedInputManager::Button::Confirm) && mappedInput.getHeldTime() < capsMs) { handleKeyPress(); updateRequired = true; } @@ -348,3 +357,12 @@ void KeyboardEntryActivity::renderItemWithSelector(const int x, const int y, con } renderer.drawText(UI_10_FONT_ID, x, y, item); } + +void KeyboardEntryActivity::onCapsHeld() { + waitForCapsRelease(); + shiftActive = !shiftActive; +} + +void KeyboardEntryActivity::waitForCapsRelease() { + while (mappedInput.isPressed(MappedInputManager::Button::Confirm)) delay(50); +} diff --git a/src/activities/util/KeyboardEntryActivity.h b/src/activities/util/KeyboardEntryActivity.h index 1c1b1f3e..f5d9f3d3 100644 --- a/src/activities/util/KeyboardEntryActivity.h +++ b/src/activities/util/KeyboardEntryActivity.h @@ -96,4 +96,7 @@ class KeyboardEntryActivity : public Activity { int getRowLength(int row) const; void render() const; void renderItemWithSelector(int x, int y, const char* item, bool isSelected) const; + + void onCapsHeld(); + void waitForCapsRelease(); };