From 7d06868ad91c3943a1eedf386e9e628453ab4434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89milie=20Feral?= Date: Fri, 17 Feb 2017 18:14:27 +0100 Subject: [PATCH] [escher] Do actions in this order: layouts, viewWillAppear, didBecomeFirstResponder Change-Id: I01b5c2457d9e3b6d2cc71afe119287c1cb507dc3 --- escher/include/escher/tab_view_controller.h | 2 +- escher/src/app.cpp | 2 +- escher/src/modal_view_controller.cpp | 4 ++-- escher/src/stack_view_controller.cpp | 15 +++++++-------- escher/src/tab_view_controller.cpp | 14 +++++++------- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/escher/include/escher/tab_view_controller.h b/escher/include/escher/tab_view_controller.h index 9a6022dcc..3ae00087a 100644 --- a/escher/include/escher/tab_view_controller.h +++ b/escher/include/escher/tab_view_controller.h @@ -10,7 +10,7 @@ public: View * view() override; void setSelectedTab(int8_t index); - void setActiveTab(int8_t index); + void setActiveTab(int8_t index, bool forceReactive = false); uint8_t numberOfTabs(); const char * tabName(uint8_t index); diff --git a/escher/src/app.cpp b/escher/src/app.cpp index 231ed086c..31c00c847 100644 --- a/escher/src/app.cpp +++ b/escher/src/app.cpp @@ -77,11 +77,11 @@ void App::didBecomeActive(Window * window) { View * view = m_modalViewController.view(); assert(m_modalViewController.app() == this); window->setContentView(view); + m_modalViewController.viewWillAppear(); if (m_firstResponder == nullptr) { setFirstResponder(&m_modalViewController); } window->redraw(); - m_modalViewController.viewWillAppear(); } void App::willBecomeInactive() { diff --git a/escher/src/modal_view_controller.cpp b/escher/src/modal_view_controller.cpp index 8d2974a00..5ce6409b5 100644 --- a/escher/src/modal_view_controller.cpp +++ b/escher/src/modal_view_controller.cpp @@ -117,16 +117,16 @@ void ModalViewController::displayModalViewController(ViewController * vc, float m_previousResponder = app()->firstResponder(); m_regularViewController->viewWillDisappear(); m_contentView.presentModalView(vc->view(), verticalAlignment, horizontalAlignment, topMargin, leftMargin, bottomMargin, rightMargin); - app()->setFirstResponder(vc); m_currentModalViewController->viewWillAppear(); + app()->setFirstResponder(vc); } void ModalViewController::dismissModalViewController() { m_currentModalViewController->viewWillDisappear(); m_currentModalViewController = nullptr; + m_regularViewController->viewWillAppear(); app()->setFirstResponder(m_previousResponder); m_contentView.dismissModalView(); - m_regularViewController->viewWillAppear(); } void ModalViewController::didBecomeFirstResponder() { diff --git a/escher/src/stack_view_controller.cpp b/escher/src/stack_view_controller.cpp index 4ead2d7d4..84295a3e8 100644 --- a/escher/src/stack_view_controller.cpp +++ b/escher/src/stack_view_controller.cpp @@ -90,11 +90,10 @@ const char * StackViewController::title() const { void StackViewController::push(ViewController * vc, KDColor textColor, KDColor backgroundColor, KDColor separatorColor) { m_view.pushStack(vc->title(), textColor, backgroundColor, separatorColor); m_children[m_numberOfChildren++] = vc; - setupActiveViewController(); if (m_numberOfChildren > 1) { m_children[m_numberOfChildren-2]->viewWillDisappear(); } - vc->viewWillAppear(); + setupActiveViewController(); } void StackViewController::pop() { @@ -103,23 +102,19 @@ void StackViewController::pop() { ViewController * vc = m_children[m_numberOfChildren-1]; vc->setParentResponder(nullptr); m_numberOfChildren--; - setupActiveViewController(); vc->viewWillDisappear(); - m_children[m_numberOfChildren-1]->viewWillAppear(); + setupActiveViewController(); } void StackViewController::setupActiveViewController() { ViewController * vc = m_children[m_numberOfChildren-1]; vc->setParentResponder(this); m_view.setContentView(vc->view()); + vc->viewWillAppear(); app()->setFirstResponder(vc); } void StackViewController::didBecomeFirstResponder() { - if (m_rootViewController != nullptr) { - push(m_rootViewController, m_textColor, m_backgroundColor, m_separatorColor); - m_rootViewController = nullptr; - } ViewController * vc = m_children[m_numberOfChildren-1]; app()->setFirstResponder(vc); } @@ -137,6 +132,10 @@ View * StackViewController::view() { } void StackViewController::viewWillAppear() { + if (m_rootViewController != nullptr) { + push(m_rootViewController, m_textColor, m_backgroundColor, m_separatorColor); + m_rootViewController = nullptr; + } ViewController * vc = m_children[m_numberOfChildren-1]; if (m_numberOfChildren > 0 && vc) { vc->viewWillAppear(); diff --git a/escher/src/tab_view_controller.cpp b/escher/src/tab_view_controller.cpp index f90e5f2c1..86438ce0c 100644 --- a/escher/src/tab_view_controller.cpp +++ b/escher/src/tab_view_controller.cpp @@ -86,15 +86,15 @@ bool TabViewController::handleEvent(Ion::Events::Event event) { return true; } if (event == Ion::Events::Down || event == Ion::Events::OK) { - setActiveTab(m_selectedChildIndex); + setActiveTab(m_selectedChildIndex, event == Ion::Events::OK); return true; } return false; } -void TabViewController::setActiveTab(int8_t i) { +void TabViewController::setActiveTab(int8_t i, bool forceReactive) { ViewController * activeVC = m_children[i]; - if (i != m_activeChildIndex) { + if (i != m_activeChildIndex || forceReactive) { assert(i <= m_numberOfChildren); m_view.setActiveView(activeVC->view()); m_view.m_tabView.setActiveIndex(i); @@ -105,7 +105,7 @@ void TabViewController::setActiveTab(int8_t i) { if (i >= 0) { m_children[i]->viewWillAppear(); } - } else {} + } app()->setFirstResponder(activeVC); } @@ -119,9 +119,6 @@ void TabViewController::setSelectedTab(int8_t i) { void TabViewController::didBecomeFirstResponder() { setSelectedTab(m_activeChildIndex); - if (m_activeChildIndex < 0) { - setActiveTab(0); - } } void TabViewController::didResignFirstResponder() { @@ -149,6 +146,9 @@ const char * TabViewController::tabName(uint8_t index) { } void TabViewController::viewWillAppear() { + if (m_activeChildIndex < 0) { + setActiveTab(0); + } ViewController * activeVC = m_children[m_activeChildIndex]; activeVC->viewWillAppear(); }