diff --git a/apps/calculation/edit_expression_controller.cpp b/apps/calculation/edit_expression_controller.cpp index 060042c6e..e72762f7f 100644 --- a/apps/calculation/edit_expression_controller.cpp +++ b/apps/calculation/edit_expression_controller.cpp @@ -56,9 +56,16 @@ void EditExpressionController::insertTextBody(const char * text) { void EditExpressionController::didBecomeFirstResponder() { m_contentView.mainView()->scrollToBottom(); m_contentView.expressionField()->setEditing(true, false); + m_contentView.expressionField()->restoreLayout(m_cacheBuffer, *m_cacheBufferInformation); + clearCacheBuffer(); Container::activeApp()->setFirstResponder(m_contentView.expressionField()); } +void EditExpressionController::willExitResponderChain(Responder * nextFirstResponder) { + *m_cacheBufferInformation = m_contentView.expressionField()->dumpLayout(m_cacheBuffer, k_cacheBufferSize); + ::ViewController::willExitResponderChain(nextFirstResponder); +} + void EditExpressionController::viewWillAppear() { m_historyController->viewWillAppear(); } @@ -129,7 +136,7 @@ bool EditExpressionController::inputViewDidReceiveEvent(Ion::Events::Event event } if (event == Ion::Events::Up) { if (m_calculationStore->numberOfCalculations() > 0) { - m_cacheBuffer[0] = 0; + clearCacheBuffer(); m_contentView.expressionField()->setEditing(false, false); Container::activeApp()->setFirstResponder(m_historyController); } diff --git a/apps/calculation/edit_expression_controller.h b/apps/calculation/edit_expression_controller.h index cea45b339..fdef423be 100644 --- a/apps/calculation/edit_expression_controller.h +++ b/apps/calculation/edit_expression_controller.h @@ -27,6 +27,7 @@ public: View * view() override { return &m_contentView; } void didBecomeFirstResponder() override; + void willExitResponderChain(Responder * nextFirstResponder) override; void viewWillAppear() override; void insertTextBody(const char * text); @@ -56,6 +57,7 @@ private: ExpressionField m_expressionField; }; void reloadView(); + void clearCacheBuffer() { m_cacheBuffer[0] = 0; *m_cacheBufferInformation = 0; } bool inputViewDidReceiveEvent(Ion::Events::Event event, bool shouldDuplicateLastCalculation); bool inputViewDidFinishEditing(const char * text, Poincare::Layout layoutR); bool inputViewDidAbortEditing(const char * text);