diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp index 44d741ed1f2..8a600f90f7f 100644 --- a/src/libs/utils/persistentsettings.cpp +++ b/src/libs/utils/persistentsettings.cpp @@ -443,6 +443,12 @@ bool PersistentSettingsWriter::save(const QVariantMap &data, QWidget *parent) co FileName PersistentSettingsWriter::fileName() const { return m_fileName; } +//** * @brief Set contents of file (e.g. from data read from it). */ +void PersistentSettingsWriter::setContents(const QVariantMap &data) +{ + m_savedData = data; +} + bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorString) const { QDir tmp; @@ -472,10 +478,12 @@ bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorStri saver.setResult(&w); } bool ok = saver.finalize(); - if (ok) + if (ok) { m_savedData = data; - else if (errorString) + } else if (errorString) { + m_savedData.clear(); *errorString = saver.errorString(); + } return ok; } diff --git a/src/libs/utils/persistentsettings.h b/src/libs/utils/persistentsettings.h index 3ea7fac904f..a7255dcb8a0 100644 --- a/src/libs/utils/persistentsettings.h +++ b/src/libs/utils/persistentsettings.h @@ -61,6 +61,8 @@ public: FileName fileName() const; + void setContents(const QVariantMap &data); + private: bool write(const QVariantMap &data, QString *errorString) const; diff --git a/src/libs/utils/settingsaccessor.cpp b/src/libs/utils/settingsaccessor.cpp index 0d161a59b14..fa359358db5 100644 --- a/src/libs/utils/settingsaccessor.cpp +++ b/src/libs/utils/settingsaccessor.cpp @@ -82,6 +82,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const QTC_ASSERT(!m_baseFilePath.isEmpty(), return QVariantMap()); const RestoreData result = readData(m_baseFilePath, parent); + const ProceedInfo pi = result.hasIssue() ? reportIssues(result.issue.value(), result.path, parent) : ProceedInfo::Continue; return pi == ProceedInfo::DiscardAndContinue ? QVariantMap() : result.data; } @@ -92,6 +93,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const bool SettingsAccessor::saveSettings(const QVariantMap &data, QWidget *parent) const { const optional result = writeData(m_baseFilePath, data, parent); + const ProceedInfo pi = result ? reportIssues(result.value(), m_baseFilePath, parent) : ProceedInfo::Continue; return pi == ProceedInfo::Continue; } @@ -132,7 +134,14 @@ SettingsAccessor::RestoreData SettingsAccessor::readFile(const FileName &path) c .arg(path.toUserOutput()), Issue::Type::ERROR)); } - return RestoreData(path, reader.restoreValues()); + const QVariantMap data = reader.restoreValues(); + if (path == m_baseFilePath) { + if (!m_writer) + m_writer = std::make_unique(m_baseFilePath, docType); + m_writer->setContents(data); + } + + return RestoreData(path, data); } /*!