[escher/app/modal_view] If will exit app, do not relayout

App::willBecomeInactive calls dismissModalViewController, which puts
back the previous repsonder and calls layoutSubviews on the
modalViewController. We do not want to do all these operations when the
app will be exited anyways.
This commit is contained in:
Léa Saviot
2020-01-09 13:55:11 +01:00
parent 1d954db19d
commit 2eaf84cc73
4 changed files with 15 additions and 11 deletions

View File

@@ -55,7 +55,7 @@ public:
virtual bool prepareForExit() { return true; }
void displayModalViewController(ViewController * vc, float verticalAlignment, float horizontalAlignment,
KDCoordinate topMargin = 0, KDCoordinate leftMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate rightMargin = 0);
void dismissModalViewController();
void dismissModalViewController(bool willExitApp = false);
void displayWarning(I18n::Message warningMessage1, I18n::Message warningMessage2 = (I18n::Message) 0, bool specialExitKeys = false);
virtual void didBecomeActive(Window * window);

View File

@@ -14,7 +14,7 @@ public:
void displayModalViewController(ViewController * vc, float verticalAlignment, float horizontalAlignment,
KDCoordinate topMargin = 0, KDCoordinate leftMargin = 0, KDCoordinate bottomMargin = 0, KDCoordinate rightMargin = 0);
void reloadModalViewController();
void dismissModalViewController();
void dismissModalViewController(bool willExitApp = false);
bool isDisplayingModal();
void initView() override;
void viewWillAppear() override;
@@ -31,7 +31,7 @@ private:
void layoutSubviews(bool force = false) override;
void presentModalView(View * modalView, float verticalAlignment, float horizontalAlignment,
KDCoordinate topMargin, KDCoordinate leftMargin, KDCoordinate bottomMargin, KDCoordinate rightMargin);
void dismissModalView();
void dismissModalView(bool willExitApp = false);
bool isDisplayingModal() const;
void reload();
private:

View File

@@ -86,8 +86,8 @@ void App::displayModalViewController(ViewController * vc, float verticalAlignmen
m_modalViewController.displayModalViewController(vc, verticalAlignment, horizontalAlignment, topMargin, leftMargin, bottomMargin, rightMargin);
}
void App::dismissModalViewController() {
m_modalViewController.dismissModalViewController();
void App::dismissModalViewController(bool willExitApp) {
m_modalViewController.dismissModalViewController(willExitApp);
}
void App::displayWarning(I18n::Message warningMessage1, I18n::Message warningMessage2, bool specialExitKeys) {
@@ -105,7 +105,7 @@ void App::didBecomeActive(Window * window) {
void App::willBecomeInactive() {
if (m_modalViewController.isDisplayingModal()) {
dismissModalViewController();
dismissModalViewController(true);
}
setFirstResponder(nullptr);
m_modalViewController.viewDidDisappear();

View File

@@ -80,9 +80,11 @@ void ModalViewController::ContentView::presentModalView(View * modalView, float
layoutSubviews();
}
void ModalViewController::ContentView::dismissModalView() {
void ModalViewController::ContentView::dismissModalView(bool willExitApp) {
m_isDisplayingModal = false;
layoutSubviews();
if (!willExitApp) {
layoutSubviews();
}
m_currentModalView->resetSuperview();
m_currentModalView = nullptr;
}
@@ -128,10 +130,12 @@ void ModalViewController::reloadModalViewController() {
m_contentView.layoutSubviews();
}
void ModalViewController::dismissModalViewController() {
void ModalViewController::dismissModalViewController(bool willExitApp) {
m_currentModalViewController->viewDidDisappear();
Container::activeApp()->setFirstResponder(m_previousResponder);
m_contentView.dismissModalView();
if (!willExitApp) {
Container::activeApp()->setFirstResponder(m_previousResponder);
}
m_contentView.dismissModalView(willExitApp);
m_currentModalViewController = nullptr;
}