diff --git a/apps/node_navigation_controller.cpp b/apps/node_navigation_controller.cpp index 086f09729..71a766165 100644 --- a/apps/node_navigation_controller.cpp +++ b/apps/node_navigation_controller.cpp @@ -122,8 +122,9 @@ bool NodeNavigationController::selectSubMenu(Node * selectedNode) { } void NodeNavigationController::didBecomeFirstResponder() { - m_stack.resetStack(); m_listViewController.setNodeModel(nodeModel()); + StackViewController::didBecomeFirstResponder(); + m_stack.resetStack(); m_listViewController.setFirstSelectedRow(0); app()->setFirstResponder(&m_listViewController); } diff --git a/apps/variable_box_controller.cpp b/apps/variable_box_controller.cpp index b2cdb84e4..5deab988a 100644 --- a/apps/variable_box_controller.cpp +++ b/apps/variable_box_controller.cpp @@ -224,6 +224,7 @@ VariableBoxController::VariableBoxController(Context * context) : } void VariableBoxController::didBecomeFirstResponder() { + StackViewController::didBecomeFirstResponder(); app()->setFirstResponder(&m_contentViewController); } diff --git a/escher/src/app.cpp b/escher/src/app.cpp index b88789ed4..efb08d14f 100644 --- a/escher/src/app.cpp +++ b/escher/src/app.cpp @@ -19,13 +19,11 @@ App::App(Container * container, ViewController * rootViewController, const char void App::setWindow(Window * window) { View * view = m_modalViewController.view(); + assert(m_modalViewController.app() == this); + window->setContentView(view); if (m_firstResponder == nullptr) { setFirstResponder(&m_modalViewController); } - assert(m_modalViewController.app() == this); - - window->setContentView(view); - window->redraw(); } diff --git a/escher/src/modal_view_controller.cpp b/escher/src/modal_view_controller.cpp index 2948cd1be..17f216c1f 100644 --- a/escher/src/modal_view_controller.cpp +++ b/escher/src/modal_view_controller.cpp @@ -115,8 +115,8 @@ void ModalViewController::displayModalViewController(ViewController * vc, float m_currentModalViewController = vc; vc->setParentResponder(this); m_previousResponder = app()->firstResponder(); - app()->setFirstResponder(vc); m_contentView.presentModalView(vc->view(), verticalAlignment, horizontalAlignment, topMargin, leftMargin, bottomMargin, rightMargin); + app()->setFirstResponder(vc); } void ModalViewController::dismissModalViewController() { diff --git a/escher/src/stack_view_controller.cpp b/escher/src/stack_view_controller.cpp index 799f4dabf..9de6b76c0 100644 --- a/escher/src/stack_view_controller.cpp +++ b/escher/src/stack_view_controller.cpp @@ -110,6 +110,10 @@ void StackViewController::setupActiveViewController() { } 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); } @@ -123,9 +127,5 @@ bool StackViewController::handleEvent(Ion::Events::Event event) { } View * StackViewController::view() { - if (m_rootViewController != nullptr) { - push(m_rootViewController, m_textColor, m_backgroundColor, m_separatorColor); - m_rootViewController = nullptr; - } return &m_view; } diff --git a/escher/src/tab_view_controller.cpp b/escher/src/tab_view_controller.cpp index cac2c7e9f..076fa6125 100644 --- a/escher/src/tab_view_controller.cpp +++ b/escher/src/tab_view_controller.cpp @@ -113,6 +113,9 @@ void TabViewController::setSelectedTab(int8_t i) { void TabViewController::didBecomeFirstResponder() { setSelectedTab(m_activeChildIndex); + if (m_activeChildIndex < 0) { + setActiveTab(0); + } } void TabViewController::didResignFirstResponder() { @@ -128,9 +131,6 @@ View * TabViewController::view() { m_view.m_tabView.addTabNamed(m_children[i]->title()); } } - if (m_activeChildIndex < 0) { - setActiveTab(0); - } return &m_view; }