diff --git a/desktop-widgets/divesitelistview.cpp b/desktop-widgets/divesitelistview.cpp index 302fd3471..120ce0024 100644 --- a/desktop-widgets/divesitelistview.cpp +++ b/desktop-widgets/divesitelistview.cpp @@ -48,7 +48,7 @@ DiveSiteListView::DiveSiteListView(QWidget *parent) : QWidget(parent) void DiveSiteListView::done() { - MainWindow::instance()->setApplicationState(MainWindow::ApplicationState::Default); + MainWindow::instance()->enterPreviousState(); } void DiveSiteListView::diveSiteClicked(const QModelIndex &index) diff --git a/desktop-widgets/locationinformation.cpp b/desktop-widgets/locationinformation.cpp index 4b061c4d1..67669f1b1 100644 --- a/desktop-widgets/locationinformation.cpp +++ b/desktop-widgets/locationinformation.cpp @@ -220,7 +220,7 @@ void LocationInformationWidget::acceptChanges() MainWindow::instance()->diveList->setEnabled(true); MainWindow::instance()->setEnabledToolbar(true); - MainWindow::instance()->setApplicationState(MainWindow::ApplicationState::Default); + MainWindow::instance()->enterPreviousState(); DiveFilter::instance()->stopFilterDiveSites(); // Subtlety alert: diveSite must be cleared *after* exiting the dive-site mode. diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp index c7b171991..c00dced6d 100644 --- a/desktop-widgets/mainwindow.cpp +++ b/desktop-widgets/mainwindow.cpp @@ -282,6 +282,7 @@ void MainWindow::editDiveSite(dive_site *ds) if (!ds) return; diveSiteEdit->initFields(ds); + state_stack.push_back(appState); setApplicationState(ApplicationState::EditDiveSite); } @@ -765,6 +766,7 @@ void MainWindow::on_actionViewDiveSites_triggered() { if (!userMayChangeAppState()) return; + state_stack.push_back(appState); setApplicationState(ApplicationState::DiveSites); } @@ -1472,6 +1474,17 @@ bool MainWindow::userMayChangeAppState() const return applicationState[(int)appState].allowUserChange; } +// For the dive-site list view and the dive-site edit states, +// we remember the previous state and then switch back to that. +void MainWindow::enterPreviousState() +{ + if (state_stack.empty()) + setApplicationState(ApplicationState::Default); + ApplicationState prev = state_stack.back(); + state_stack.pop_back(); + setApplicationState(prev); +} + void MainWindow::setApplicationState(ApplicationState state) { if (appState == state) diff --git a/desktop-widgets/mainwindow.h b/desktop-widgets/mainwindow.h index 31e12694f..8b9a62820 100644 --- a/desktop-widgets/mainwindow.h +++ b/desktop-widgets/mainwindow.h @@ -72,6 +72,7 @@ public: void importFiles(const QStringList importFiles); void setToolButtonsEnabled(bool enabled); void setApplicationState(ApplicationState state); + void enterPreviousState(); NotificationWidget *getNotificationWidget(); void enableDisableCloudActions(); void enableDisableOtherDCsActions(); @@ -162,6 +163,7 @@ slots: private: ApplicationState appState; + std::vector state_stack; Ui::MainWindow ui; FilterWidget filterWidget; std::unique_ptr topSplitter;