Fix saving of xml files

Do not save XML config files (profiles.xml, toolchains.xml, etc.)
if the file has not changed.

Change-Id: I5f0dea374b33a05e7c428f4031d53c83d92de595
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
This commit is contained in:
Tobias Hunger
2012-08-17 13:18:31 +02:00
parent 29ec32a531
commit 96d8009693
17 changed files with 214 additions and 144 deletions

View File

@@ -91,7 +91,8 @@ SessionManager::SessionManager(QObject *parent)
m_sessionName(QLatin1String("default")),
m_virginSession(true),
m_loadingSession(false),
m_startupProject(0)
m_startupProject(0),
m_writer(0)
{
connect(ModeManager::instance(), SIGNAL(currentModeChanged(Core::IMode*)),
this, SLOT(saveActiveMode(Core::IMode*)));
@@ -111,6 +112,7 @@ SessionManager::SessionManager(QObject *parent)
SessionManager::~SessionManager()
{
emit aboutToUnloadSession(m_sessionName);
delete m_writer;
}
@@ -304,12 +306,15 @@ bool SessionManager::save()
emit aboutToSaveSession();
PersistentSettingsWriter writer;
if (!m_writer || m_writer->fileName() != sessionNameToFileName(m_sessionName)) {
delete m_writer;
m_writer = new Utils::PersistentSettingsWriter(sessionNameToFileName(m_sessionName),
QLatin1String("QtCreatorSession"));
}
// save the startup project
if (m_startupProject) {
writer.saveValue(QLatin1String("StartupProject"), m_startupProject->document()->fileName());
}
if (m_startupProject)
m_writer->saveValue(QLatin1String("StartupProject"), m_startupProject->document()->fileName());
QStringList projectFiles;
foreach (Project *pro, m_projects)
@@ -321,7 +326,7 @@ bool SessionManager::save()
if (!projectFiles.contains(failed))
projectFiles << failed;
writer.saveValue(QLatin1String("ProjectList"), projectFiles);
m_writer->saveValue(QLatin1String("ProjectList"), projectFiles);
QMap<QString, QVariant> depMap;
QMap<QString, QStringList>::const_iterator i = m_depMap.constBegin();
@@ -334,7 +339,7 @@ bool SessionManager::save()
depMap.insert(key, values);
++i;
}
writer.saveValue(QLatin1String("ProjectDependencies"), QVariant(depMap));
m_writer->saveValue(QLatin1String("ProjectDependencies"), QVariant(depMap));
int editorCount = 0;
QList<Core::IEditor *> editors = ICore::editorManager()->openedEditors();
@@ -343,25 +348,24 @@ bool SessionManager::save()
if (!editor->isTemporary())
++editorCount;
}
writer.saveValue(QLatin1String("OpenEditors"), editorCount);
writer.saveValue(QLatin1String("EditorSettings"),
ICore::editorManager()->saveState().toBase64());
m_writer->saveValue(QLatin1String("OpenEditors"), editorCount);
m_writer->saveValue(QLatin1String("EditorSettings"),
ICore::editorManager()->saveState().toBase64());
QMap<QString, QVariant>::const_iterator it, end;
end = m_values.constEnd();
QStringList keys;
for (it = m_values.constBegin(); it != end; ++it) {
writer.saveValue(QLatin1String("value-") + it.key(), it.value());
m_writer->saveValue(QLatin1String("value-") + it.key(), it.value());
keys << it.key();
}
writer.saveValue(QLatin1String("valueKeys"), keys);
m_writer->saveValue(QLatin1String("valueKeys"), keys);
Utils::FileName fileName = sessionNameToFileName(m_sessionName);
bool result = writer.save(fileName, QLatin1String("QtCreatorSession"), Core::ICore::mainWindow());
bool result = m_writer->save(Core::ICore::mainWindow());
if (!result) {
QMessageBox::warning(0, tr("Error while saving session"),
tr("Could not save session to file %1").arg(fileName.toUserOutput()));
tr("Could not save session to file %1").arg(m_writer->fileName().toUserOutput()));
}
if (debug)