diff --git a/apps/calculation/app.cpp b/apps/calculation/app.cpp index 077fcc75d..cb8990b23 100644 --- a/apps/calculation/app.cpp +++ b/apps/calculation/app.cpp @@ -71,4 +71,14 @@ bool App::isAcceptableExpression(const Poincare::Expression expression) { return !expression.isUninitialized(); } +void App::didBecomeActive(Window * window) { + m_editExpressionController.restoreInput(); + Shared::ExpressionFieldDelegateApp::didBecomeActive(window); +} + +void App::willBecomeInactive() { + m_editExpressionController.memoizeInput(); + Shared::ExpressionFieldDelegateApp::willBecomeInactive(); +} + } diff --git a/apps/calculation/app.h b/apps/calculation/app.h index eaa0040fa..0c188181e 100644 --- a/apps/calculation/app.h +++ b/apps/calculation/app.h @@ -46,6 +46,8 @@ public: private: App(Snapshot * snapshot); HistoryController m_historyController; + void didBecomeActive(Window * window) override; + void willBecomeInactive() override; EditExpressionController m_editExpressionController; }; diff --git a/apps/calculation/edit_expression_controller.cpp b/apps/calculation/edit_expression_controller.cpp index 750038907..7f747d359 100644 --- a/apps/calculation/edit_expression_controller.cpp +++ b/apps/calculation/edit_expression_controller.cpp @@ -56,14 +56,16 @@ void EditExpressionController::insertTextBody(const char * text) { void EditExpressionController::didBecomeFirstResponder() { m_contentView.mainView()->scrollToBottom(); m_contentView.expressionField()->setEditing(true, false); - m_contentView.expressionField()->restoreContent(m_cacheBuffer, *m_cacheBufferInformation); - clearCacheBuffer(); Container::activeApp()->setFirstResponder(m_contentView.expressionField()); } -void EditExpressionController::willExitResponderChain(Responder * nextFirstResponder) { +void EditExpressionController::restoreInput() { + m_contentView.expressionField()->restoreContent(m_cacheBuffer, *m_cacheBufferInformation); + clearCacheBuffer(); +} + +void EditExpressionController::memoizeInput() { *m_cacheBufferInformation = m_contentView.expressionField()->moveCursorAndDumpContent(m_cacheBuffer, k_cacheBufferSize); - ::ViewController::willExitResponderChain(nextFirstResponder); } void EditExpressionController::viewWillAppear() { diff --git a/apps/calculation/edit_expression_controller.h b/apps/calculation/edit_expression_controller.h index fdef423be..32a6ec84c 100644 --- a/apps/calculation/edit_expression_controller.h +++ b/apps/calculation/edit_expression_controller.h @@ -27,9 +27,10 @@ public: View * view() override { return &m_contentView; } void didBecomeFirstResponder() override; - void willExitResponderChain(Responder * nextFirstResponder) override; void viewWillAppear() override; void insertTextBody(const char * text); + void restoreInput(); + void memoizeInput(); /* TextFieldDelegate */ bool textFieldDidReceiveEvent(::TextField * textField, Ion::Events::Event event) override;