From bc86878b9117edc46b3b4aad53ab8fde9ab5a297 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos <mvourlakos@gmail.com> Date: Wed, 14 Apr 2021 11:45:28 +0300 Subject: [PATCH] detailsdialog:fix save confirmation dialog behavior --most importantly Discard acts properly now meaning that layout is updated and previous settings are discarded --- app/settings/detailsdialog/detailshandler.cpp | 34 ++++++++++++------- app/settings/detailsdialog/detailshandler.h | 4 ++- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/settings/detailsdialog/detailshandler.cpp b/app/settings/detailsdialog/detailshandler.cpp index 335f8a372..ed814c04e 100644 --- a/app/settings/detailsdialog/detailshandler.cpp +++ b/app/settings/detailsdialog/detailshandler.cpp @@ -109,6 +109,7 @@ void DetailsHandler::init() connect(this, &DetailsHandler::currentLayoutChanged, this, &DetailsHandler::reload); reload(); + m_lastConfirmedLayoutIndex = m_ui->colorsCmb->currentIndex(); //! connect layout combobox after the selected layout has been loaded connect(m_ui->layoutsCmb, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &DetailsHandler::onCurrentLayoutIndexChanged); @@ -254,17 +255,25 @@ void DetailsHandler::onCurrentColorIndexChanged(int row) void DetailsHandler::onCurrentLayoutIndexChanged(int row) { - bool switchtonewlayout{true}; - - if (hasChangedData()) { - int result = saveChanges(); - - if (result == QMessageBox::Apply) { - save(); - } else if (result == QMessageBox::Discard) { - //do nothing - } else if (result == QMessageBox::Cancel) { - switchtonewlayout = false; + bool switchtonewlayout{false}; + + if (m_lastConfirmedLayoutIndex != row) { + if (hasChangedData()) { //new layout was chosen but there are changes + int result = saveChangesConfirmation(); + + if (result == QMessageBox::Apply) { + switchtonewlayout = true; + m_lastConfirmedLayoutIndex = row; + save(); + } else if (result == QMessageBox::Discard) { + switchtonewlayout = true; + m_lastConfirmedLayoutIndex = row; + } else if (result == QMessageBox::Cancel) { + //do nothing + } + } else { //new layout was chosen and there are no changes + switchtonewlayout = true; + m_lastConfirmedLayoutIndex = row; } } @@ -272,7 +281,6 @@ void DetailsHandler::onCurrentLayoutIndexChanged(int row) QString layoutId = m_layoutsProxyModel->data(m_layoutsProxyModel->index(row, Model::Layouts::IDCOLUMN), Qt::UserRole).toString(); m_dialog->layoutsController()->selectRow(layoutId); reload(); - emit currentLayoutChanged(); } else { //! reset combobox index @@ -400,7 +408,7 @@ void DetailsHandler::updateWindowTitle() m_dialog->setWindowTitle(i18nc("<layout name> Details","%0 Details").arg(m_ui->layoutsCmb->currentText())); } -int DetailsHandler::saveChanges() +int DetailsHandler::saveChangesConfirmation() { if (hasChangedData()) { QString layoutName = c_data.name; diff --git a/app/settings/detailsdialog/detailshandler.h b/app/settings/detailsdialog/detailshandler.h index b0211e609..028aa6342 100644 --- a/app/settings/detailsdialog/detailshandler.h +++ b/app/settings/detailsdialog/detailshandler.h @@ -106,7 +106,7 @@ private: void loadLayout(const Latte::Data::Layout &data); - int saveChanges(); + int saveChangesConfirmation(); private: Dialog::DetailsDialog *m_dialog{nullptr}; @@ -114,6 +114,8 @@ private: QSortFilterProxyModel *m_layoutsProxyModel{nullptr}; + int m_lastConfirmedLayoutIndex{-1}; + //! current data Model::Colors *m_colorsModel{nullptr};