diff --git a/apps/calculation/local_context.h b/apps/calculation/local_context.h index 53e974da9..f960c85fe 100644 --- a/apps/calculation/local_context.h +++ b/apps/calculation/local_context.h @@ -19,4 +19,4 @@ private: } -#endif \ No newline at end of file +#endif diff --git a/apps/sequence/app.cpp b/apps/sequence/app.cpp index 4cecada00..8fea0a214 100644 --- a/apps/sequence/app.cpp +++ b/apps/sequence/app.cpp @@ -22,7 +22,7 @@ App::App(Container * container, Context * context) : m_valuesHeader(ButtonRowController(nullptr, &m_valuesAlternateEmptyViewController, &m_valuesController)), m_valuesStackViewController(StackViewController(&m_tabViewController, &m_valuesHeader)), m_tabViewController(&m_inputViewController, &m_listStackViewController, &m_graphStackViewController, &m_valuesStackViewController), - m_inputViewController(&m_modalViewController, &m_tabViewController, this) + m_inputViewController(&m_modalViewController, &m_tabViewController, &m_listController) { } diff --git a/apps/sequence/list/list_controller.cpp b/apps/sequence/list/list_controller.cpp index b1360c432..82156d866 100644 --- a/apps/sequence/list/list_controller.cpp +++ b/apps/sequence/list/list_controller.cpp @@ -102,7 +102,6 @@ void ListController::editExpression(Sequence * sequence, int sequenceDefinition, } App * myApp = (App *)app(); InputViewController * inputController = myApp->inputViewController(); - inputController->setTextFieldDelegate(this); switch (sequenceDefinition) { case 0: inputController->edit(this, event, sequence, initialText, diff --git a/apps/sequence/local_context.cpp b/apps/sequence/local_context.cpp index de7470185..3f827f843 100644 --- a/apps/sequence/local_context.cpp +++ b/apps/sequence/local_context.cpp @@ -32,14 +32,14 @@ void LocalContext::setSequenceRankValue(float f, int rank) { char LocalContext::sequenceIndexForSymbol(const Symbol * symbol) { if (symbol->name() == Symbol::SpecialSymbols::un || - symbol->name() == Symbol::SpecialSymbols::vn || - symbol->name() == Symbol::SpecialSymbols::wn) { - return 0; + symbol->name() == Symbol::SpecialSymbols::vn || + symbol->name() == Symbol::SpecialSymbols::wn) { + return 0; } if (symbol->name() == Symbol::SpecialSymbols::un1 || - symbol->name() == Symbol::SpecialSymbols::vn1 || - symbol->name() == Symbol::SpecialSymbols::wn1) { - return 1; + symbol->name() == Symbol::SpecialSymbols::vn1 || + symbol->name() == Symbol::SpecialSymbols::wn1) { + return 1; } return 2; } diff --git a/apps/sequence/local_context.h b/apps/sequence/local_context.h index 7b536e900..d68f1913c 100644 --- a/apps/sequence/local_context.h +++ b/apps/sequence/local_context.h @@ -18,4 +18,4 @@ private: } -#endif \ No newline at end of file +#endif diff --git a/apps/shared/editable_cell_table_view_controller.cpp b/apps/shared/editable_cell_table_view_controller.cpp index c77296769..98243a590 100644 --- a/apps/shared/editable_cell_table_view_controller.cpp +++ b/apps/shared/editable_cell_table_view_controller.cpp @@ -26,7 +26,6 @@ bool EditableCellTableViewController::textFieldDidFinishEditing(TextField * text app()->displayWarning(I18n::Message::ForbiddenValue); return false; } - willDisplayCellAtLocation(m_selectableTableView.cellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()), m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()); m_selectableTableView.reloadData(); m_selectableTableView.selectCellAtLocation(m_selectableTableView.selectedColumn(), m_selectableTableView.selectedRow()+1); return true; diff --git a/apps/shared/text_field_delegate_app.cpp b/apps/shared/text_field_delegate_app.cpp index c6e7f3b7f..aa9f1526d 100644 --- a/apps/shared/text_field_delegate_app.cpp +++ b/apps/shared/text_field_delegate_app.cpp @@ -53,15 +53,6 @@ bool TextFieldDelegateApp::textFieldDidReceiveEvent(TextField * textField, Ion:: textField->app()->displayWarning(I18n::Message::SyntaxError); return true; } - Expression * evaluation = exp->evaluate(*localContext()); - if (evaluation == nullptr) { - delete exp; - textField->app()->displayWarning(I18n::Message::MathError); - return true; - } else { - delete evaluation; - delete exp; - } } if (event == Ion::Events::Var) { AppsContainer * appsContainer = (AppsContainer *)textField->app()->container(); diff --git a/escher/include/escher/input_view_controller.h b/escher/include/escher/input_view_controller.h index 5df7f8769..25e88254b 100644 --- a/escher/include/escher/input_view_controller.h +++ b/escher/include/escher/input_view_controller.h @@ -11,7 +11,6 @@ public: InputViewController(Responder * parentResponder, ViewController * child, TextFieldDelegate * textFieldDelegate); void edit(Responder * caller, Ion::Events::Event event, void * context, const char * initialText, Invocation::Action successAction, Invocation::Action failureAction); const char * textBody(); - void setTextFieldDelegate(TextFieldDelegate * textFieldDelegate); bool textFieldDidReceiveEvent(TextField * textField, Ion::Events::Event event) override; bool textFieldDidFinishEditing(TextField * textField, const char * text) override; bool textFieldDidAbortEditing(TextField * textField, const char * text) override; diff --git a/escher/include/escher/text_field.h b/escher/include/escher/text_field.h index d910f6721..dcdcd2e05 100644 --- a/escher/include/escher/text_field.h +++ b/escher/include/escher/text_field.h @@ -56,6 +56,7 @@ protected: KDCoordinate charWidth(); void deleteCharPrecedingCursor(); View * subviewAtIndex(int index) override; + constexpr static int k_maxBufferSize = 255; private: int numberOfSubviews() const override; void layoutSubviews() override; diff --git a/escher/src/input_view_controller.cpp b/escher/src/input_view_controller.cpp index 0bdf6abaa..903583743 100644 --- a/escher/src/input_view_controller.cpp +++ b/escher/src/input_view_controller.cpp @@ -81,10 +81,6 @@ void InputViewController::edit(Responder * caller, Ion::Events::Event event, voi } } -void InputViewController::setTextFieldDelegate(TextFieldDelegate * textFieldDelegate) { - m_textFieldDelegate = textFieldDelegate; -} - bool InputViewController::textFieldDidFinishEditing(TextField * textField, const char * text) { m_successAction.perform(this); dismissModalViewController(); diff --git a/escher/src/text_field.cpp b/escher/src/text_field.cpp index e74ffe19c..c720783f1 100644 --- a/escher/src/text_field.cpp +++ b/escher/src/text_field.cpp @@ -17,6 +17,7 @@ TextField::ContentView::ContentView(char * textBuffer, char * draftTextBuffer, s m_backgroundColor(backgroundColor), m_fontSize(size) { + assert(m_textBufferSize <= k_maxBufferSize); } void TextField::ContentView::drawRect(KDContext * ctx, KDRect rect) const { @@ -277,9 +278,18 @@ bool TextField::handleEvent(Ion::Events::Event event) { if (event == Ion::Events::OK || event == Ion::Events::EXE) { if (isEditing()) { strlcpy(m_contentView.textBuffer(), m_contentView.draftTextBuffer(), m_contentView.bufferSize()); + int cursorLoc = cursorLocation(); setEditing(false); - m_delegate->textFieldDidFinishEditing(this, text()); - reloadScroll(); + if (m_delegate->textFieldDidFinishEditing(this, text())) { + reloadScroll(); + return true; + } + char buffer[ContentView::k_maxBufferSize]; + strlcpy(buffer, m_contentView.textBuffer(), ContentView::k_maxBufferSize); + setText(""); + setEditing(true); + setText(buffer); + setCursorLocation(cursorLoc); return true; } if (event == Ion::Events::EXE) { diff --git a/poincare/include/poincare/variable_context.h b/poincare/include/poincare/variable_context.h index de6c9d47c..90a08db9f 100644 --- a/poincare/include/poincare/variable_context.h +++ b/poincare/include/poincare/variable_context.h @@ -19,4 +19,4 @@ private: } -#endif \ No newline at end of file +#endif