summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordt <qtc-committer@nokia.com>2009-10-08 20:01:07 +0200
committercon <qtc-committer@nokia.com>2009-10-09 10:42:24 +0200
commit064dadb8a1ce1715f974694bb5c545f6eee5d3eb (patch)
tree0114f78a02ae844a40601fa7b23d3924d5888a18
parentfb4d4531e7c5587653ddffba2ff1715cf3295076 (diff)
downloadqt-creator-064dadb8a1ce1715f974694bb5c545f6eee5d3eb.tar.gz
Fix crash on cloning and removing buildconfigurations
(cherry picked from commit a3141e9d744aa1d4a232de35722cb8bf2cf40c7f)
-rw-r--r--src/plugins/projectexplorer/buildsettingspropertiespage.cpp19
-rw-r--r--src/plugins/projectexplorer/project.cpp10
-rw-r--r--src/plugins/projectexplorer/project.h2
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;