diff --git a/escher/include/escher/stack_view_controller.h b/escher/include/escher/stack_view_controller.h index 47addd0ea..02d6318fc 100644 --- a/escher/include/escher/stack_view_controller.h +++ b/escher/include/escher/stack_view_controller.h @@ -18,6 +18,7 @@ public: int depth(); View * view() override; + ViewController * topViewController(); const char * title() override; bool handleEvent(Ion::Events::Event event) override; void didBecomeFirstResponder() override; diff --git a/escher/src/stack_view_controller.cpp b/escher/src/stack_view_controller.cpp index 8aa337d17..2b88c2288 100644 --- a/escher/src/stack_view_controller.cpp +++ b/escher/src/stack_view_controller.cpp @@ -92,6 +92,13 @@ const char * StackViewController::title() { return vc->title(); } +ViewController * StackViewController::topViewController() { + if (m_numberOfChildren < 1) { + return nullptr; + } + return m_childrenFrame[m_numberOfChildren-1].viewController(); +} + void StackViewController::push(ViewController * vc, KDColor textColor, KDColor backgroundColor, KDColor separatorColor) { Frame frame = Frame(vc, textColor, backgroundColor, separatorColor); /* Add the frame to the model */ @@ -112,7 +119,7 @@ void StackViewController::push(ViewController * vc, KDColor textColor, KDColor b void StackViewController::pop() { assert(m_numberOfChildren > 0); - ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController(); + ViewController * vc = topViewController(); if (vc->title() != nullptr && vc->displayParameter() != ViewController::DisplayParameter::DoNotShowOwnTitle) { m_view.popStack(); } @@ -131,7 +138,7 @@ void StackViewController::pushModel(Frame frame) { } void StackViewController::setupActiveViewController() { - ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController(); + ViewController * vc = topViewController(); vc->setParentResponder(this); m_view.shouldDisplayStackHearders(vc->displayParameter() != ViewController::DisplayParameter::WantsMaximumSpace); m_view.setContentView(vc->view()); @@ -141,7 +148,7 @@ void StackViewController::setupActiveViewController() { } void StackViewController::didBecomeFirstResponder() { - ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController(); + ViewController * vc = topViewController(); Container::activeApp()->setFirstResponder(vc); } @@ -170,7 +177,7 @@ void StackViewController::viewWillAppear() { } } /* Load the visible controller view */ - ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController(); + ViewController * vc = topViewController(); if (m_numberOfChildren > 0 && vc) { m_view.setContentView(vc->view()); m_view.shouldDisplayStackHearders(vc->displayParameter() != ViewController::DisplayParameter::WantsMaximumSpace); @@ -180,7 +187,7 @@ void StackViewController::viewWillAppear() { } void StackViewController::viewDidDisappear() { - ViewController * vc = m_childrenFrame[m_numberOfChildren-1].viewController(); + ViewController * vc = topViewController(); if (m_numberOfChildren > 0 && vc) { vc->viewDidDisappear(); }