diff options
author | dt <qtc-committer@nokia.com> | 2009-10-08 20:01:07 +0200 |
---|---|---|
committer | con <qtc-committer@nokia.com> | 2009-10-09 10:42:24 +0200 |
commit | 064dadb8a1ce1715f974694bb5c545f6eee5d3eb (patch) | |
tree | 0114f78a02ae844a40601fa7b23d3924d5888a18 | |
parent | fb4d4531e7c5587653ddffba2ff1715cf3295076 (diff) | |
download | qt-creator-064dadb8a1ce1715f974694bb5c545f6eee5d3eb.tar.gz |
Fix crash on cloning and removing buildconfigurations
(cherry picked from commit a3141e9d744aa1d4a232de35722cb8bf2cf40c7f)
-rw-r--r-- | src/plugins/projectexplorer/buildsettingspropertiespage.cpp | 19 | ||||
-rw-r--r-- | src/plugins/projectexplorer/project.cpp | 10 | ||||
-rw-r--r-- | src/plugins/projectexplorer/project.h | 2 |
3 files changed, 16 insertions, 15 deletions
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp index 82e187367b..3a422f8348 100644 --- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp +++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp @@ -306,13 +306,18 @@ void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration) return; QString newDisplayName = newBuildConfiguration; - // Check that the internal name is not taken and use a different one otherwise - if (m_project->buildConfiguration(newBuildConfiguration)) { - int i = 2; - while (m_project->buildConfiguration(newBuildConfiguration + QString::number(i))) - ++i; - newBuildConfiguration += QString::number(i); - } + QStringList buildConfigurationDisplayNames; + foreach(BuildConfiguration *bc, m_project->buildConfigurations()) + buildConfigurationDisplayNames << bc->displayName(); + newDisplayName = Project::makeUnique(newDisplayName, buildConfigurationDisplayNames); + + QStringList buildConfigurationNames; + foreach(BuildConfiguration *bc, m_project->buildConfigurations()) + buildConfigurationNames << bc->name(); + + newBuildConfiguration = Project::makeUnique(newBuildConfiguration, buildConfigurationNames); + + qDebug()<<"BuildSettingsWidget::cloneConfiguration source:"<<sourceConfiguration<<"to: "<<newBuildConfiguration; m_project->copyBuildConfiguration(sourceConfiguration, newBuildConfiguration); m_project->setDisplayNameFor(m_project->buildConfiguration(newBuildConfiguration), newDisplayName); diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index 32d3fbdc4f..c556b5ad1e 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -150,15 +150,10 @@ void Project::addBuildConfiguration(BuildConfiguration *configuration) void Project::removeBuildConfiguration(BuildConfiguration *configuration) { //todo: this might be error prone - if (!buildConfigurations().contains(configuration)) + if (!m_buildConfigurationValues.contains(configuration)) return; - for (int i = 0; i != m_buildConfigurationValues.size(); ++i) - if (m_buildConfigurationValues.at(i)->name() == configuration->name()) { - delete m_buildConfigurationValues.at(i); - m_buildConfigurationValues.removeAt(i); - break; - } + m_buildConfigurationValues.removeOne(configuration); for (int i = 0; i != m_buildSteps.size(); ++i) m_buildSteps.at(i)->removeBuildConfiguration(configuration->name()); @@ -166,6 +161,7 @@ void Project::removeBuildConfiguration(BuildConfiguration *configuration) m_cleanSteps.at(i)->removeBuildConfiguration(configuration->name()); emit removedBuildConfiguration(this, configuration->name()); + delete configuration; } void Project::copyBuildConfiguration(const QString &source, const QString &dest) diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 0df80346bb..2740b17e49 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -141,6 +141,7 @@ public: virtual QStringList includePaths(const QString &fileName) const; virtual QStringList frameworkPaths(const QString &fileName) const; + static QString makeUnique(const QString &preferedName, const QStringList &usedNames); signals: void fileListChanged(); @@ -183,7 +184,6 @@ protected: virtual bool restoreSettingsImpl(PersistentSettingsReader &reader); private: - static QString makeUnique(const QString &preferedName, const QStringList &usedNames); QList<BuildStep *> m_buildSteps; QList<BuildStep *> m_cleanSteps; QMap<QString, QVariant> m_values; |