diff --git a/apps/code/menu_controller.cpp b/apps/code/menu_controller.cpp index e6b561258..5c3444d19 100644 --- a/apps/code/menu_controller.cpp +++ b/apps/code/menu_controller.cpp @@ -322,7 +322,7 @@ bool MenuController::textFieldDidAbortEditing(TextField * textField, const char return true; } -bool MenuController::textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue) { +bool MenuController::textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue, bool textHasChanged) { int scriptExtensionLength = strlen(ScriptStore::k_scriptExtension); if (textField->isEditing() && textField->cursorLocation() > textField->draftTextLength() - scriptExtensionLength) { textField->setCursorLocation(textField->draftTextLength() - scriptExtensionLength); diff --git a/apps/code/menu_controller.h b/apps/code/menu_controller.h index 4199693aa..af4441f80 100644 --- a/apps/code/menu_controller.h +++ b/apps/code/menu_controller.h @@ -53,7 +53,7 @@ public: bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override; bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; bool textFieldDidAbortEditing(TextField * textField, const char * text) override; - bool textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue) override; + bool textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue, bool textHasChanged) override; Toolbox * toolboxForTextField(TextField * textField) override { return nullptr; } /* ButtonRowDelegate */ diff --git a/apps/probability/calculation_view.cpp b/apps/probability/calculation_view.cpp index 6afb1c49f..4dec63b46 100644 --- a/apps/probability/calculation_view.cpp +++ b/apps/probability/calculation_view.cpp @@ -57,8 +57,8 @@ void CalculationView::selectSubview(int subviewIndex) { m_highlightedSubviewIndex = subviewIndex; } -bool CalculationView::textFieldDidHandleEvent(::TextField * textField, Ion::Events::Event event, bool returnValue) { - if (returnValue) { +bool CalculationView::textFieldDidHandleEvent(::TextField * textField, Ion::Events::Event event, bool returnValue, bool textHasChanged) { + if (returnValue && textHasChanged) { updateCalculationLayoutFromIndex(m_highlightedSubviewIndex-1); } return returnValue; diff --git a/apps/probability/calculation_view.h b/apps/probability/calculation_view.h index f44e86c68..e7bfb957e 100644 --- a/apps/probability/calculation_view.h +++ b/apps/probability/calculation_view.h @@ -20,7 +20,7 @@ public: void selectSubview(int subviewIndex); /* TextField delegate */ - bool textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue) override; + bool textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue, bool textHasChanged) override; bool textFieldShouldFinishEditing(TextField * textField, Ion::Events::Event event) override; bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) override; diff --git a/escher/include/escher/text_field_delegate.h b/escher/include/escher/text_field_delegate.h index 4841ad643..ad2300e93 100644 --- a/escher/include/escher/text_field_delegate.h +++ b/escher/include/escher/text_field_delegate.h @@ -9,7 +9,7 @@ public: virtual bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) = 0; virtual bool textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) { return false; }; virtual bool textFieldDidAbortEditing(TextField * textField, const char * text) {return false;}; - virtual bool textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue) { return returnValue; }; + virtual bool textFieldDidHandleEvent(TextField * textField, Ion::Events::Event event, bool returnValue, bool textHasChanged) { return returnValue; }; virtual Toolbox * toolboxForTextField(TextField * textField) = 0; }; diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index 6c2d6e60b..f448fbf11 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -419,8 +419,9 @@ bool TextField::textFieldShouldFinishEditing(Ion::Events::Event event) { bool TextField::handleEvent(Ion::Events::Event event) { assert(m_delegate != nullptr); + size_t previousTextLength = strlen(text()); bool didHandleEvent = privateHandleEvent(event); - return m_delegate->textFieldDidHandleEvent(this, event, didHandleEvent); + return m_delegate->textFieldDidHandleEvent(this, event, didHandleEvent, strlen(text()) != previousTextLength); } void TextField::scrollToCursor() {