diff --git a/escher/include/escher/input_view_controller.h b/escher/include/escher/input_view_controller.h index e5cf99004..002fa21ae 100644 --- a/escher/include/escher/input_view_controller.h +++ b/escher/include/escher/input_view_controller.h @@ -52,7 +52,7 @@ private: char m_textBuffer[k_bufferLength]; ExpressionField m_expressionField; }; - void inputViewDidFinishEditing(); + bool inputViewDidFinishEditing(); void inputViewDidAbortEditing(); ExpressionFieldController m_expressionFieldController; Invocation m_successAction; diff --git a/escher/src/input_view_controller.cpp b/escher/src/input_view_controller.cpp index 7c52476d1..c9e4fac94 100644 --- a/escher/src/input_view_controller.cpp +++ b/escher/src/input_view_controller.cpp @@ -50,9 +50,11 @@ bool InputViewController::textFieldShouldFinishEditing(TextField * textField, Io } bool InputViewController::textFieldDidFinishEditing(TextField * textField, const char * text, Ion::Events::Event event) { - inputViewDidFinishEditing(); - m_textFieldDelegate->textFieldDidFinishEditing(textField, text, event); - return true; + if (inputViewDidFinishEditing()) { + m_textFieldDelegate->textFieldDidFinishEditing(textField, text, event); + return true; + } + return false; } bool InputViewController::textFieldDidAbortEditing(TextField * textField) { @@ -74,9 +76,11 @@ bool InputViewController::layoutFieldDidReceiveEvent(LayoutField * layoutField, } bool InputViewController::layoutFieldDidFinishEditing(LayoutField * layoutField, Poincare::Layout layoutR, Ion::Events::Event event) { - inputViewDidFinishEditing(); - m_layoutFieldDelegate->layoutFieldDidFinishEditing(layoutField, layoutR, event); - return true; + if (inputViewDidFinishEditing()) { + m_layoutFieldDelegate->layoutFieldDidFinishEditing(layoutField, layoutR, event); + return true; + } + return false; } bool InputViewController::layoutFieldDidAbortEditing(LayoutField * layoutField) { @@ -103,9 +107,12 @@ NestedMenuController * InputViewController::variableBoxForInputEventHandler(Inpu return m_inputEventHandlerDelegate->variableBoxForInputEventHandler(handler); } -void InputViewController::inputViewDidFinishEditing() { - m_successAction.perform(this); - dismissModalViewController(); +bool InputViewController::inputViewDidFinishEditing() { + if (m_successAction.perform(this)) { + dismissModalViewController(); + return true; + } + return false; } void InputViewController::inputViewDidAbortEditing() { diff --git a/escher/src/layout_field.cpp b/escher/src/layout_field.cpp index 2a1a12080..96bdf78c7 100644 --- a/escher/src/layout_field.cpp +++ b/escher/src/layout_field.cpp @@ -196,6 +196,8 @@ bool LayoutField::privateHandleEvent(Ion::Events::Event event) { if (m_delegate->layoutFieldDidFinishEditing(this, layout(), event)) { // Reinit layout for next use clearLayout(); + } else { + setEditing(true); } return true; }