forked from qt-creator/qt-creator
Fix crash on cloning and removing buildconfigurations
This commit is contained in:
@@ -306,13 +306,18 @@ void BuildSettingsWidget::cloneConfiguration(const QString &sourceConfiguration)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
QString newDisplayName = newBuildConfiguration;
|
QString newDisplayName = newBuildConfiguration;
|
||||||
// Check that the internal name is not taken and use a different one otherwise
|
QStringList buildConfigurationDisplayNames;
|
||||||
if (m_project->buildConfiguration(newBuildConfiguration)) {
|
foreach(BuildConfiguration *bc, m_project->buildConfigurations())
|
||||||
int i = 2;
|
buildConfigurationDisplayNames << bc->displayName();
|
||||||
while (m_project->buildConfiguration(newBuildConfiguration + QString::number(i)))
|
newDisplayName = Project::makeUnique(newDisplayName, buildConfigurationDisplayNames);
|
||||||
++i;
|
|
||||||
newBuildConfiguration += QString::number(i);
|
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->copyBuildConfiguration(sourceConfiguration, newBuildConfiguration);
|
||||||
m_project->setDisplayNameFor(m_project->buildConfiguration(newBuildConfiguration), newDisplayName);
|
m_project->setDisplayNameFor(m_project->buildConfiguration(newBuildConfiguration), newDisplayName);
|
||||||
|
@@ -150,15 +150,10 @@ void Project::addBuildConfiguration(BuildConfiguration *configuration)
|
|||||||
void Project::removeBuildConfiguration(BuildConfiguration *configuration)
|
void Project::removeBuildConfiguration(BuildConfiguration *configuration)
|
||||||
{
|
{
|
||||||
//todo: this might be error prone
|
//todo: this might be error prone
|
||||||
if (!buildConfigurations().contains(configuration))
|
if (!m_buildConfigurationValues.contains(configuration))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (int i = 0; i != m_buildConfigurationValues.size(); ++i)
|
m_buildConfigurationValues.removeOne(configuration);
|
||||||
if (m_buildConfigurationValues.at(i)->name() == configuration->name()) {
|
|
||||||
delete m_buildConfigurationValues.at(i);
|
|
||||||
m_buildConfigurationValues.removeAt(i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = 0; i != m_buildSteps.size(); ++i)
|
for (int i = 0; i != m_buildSteps.size(); ++i)
|
||||||
m_buildSteps.at(i)->removeBuildConfiguration(configuration->name());
|
m_buildSteps.at(i)->removeBuildConfiguration(configuration->name());
|
||||||
@@ -166,6 +161,7 @@ void Project::removeBuildConfiguration(BuildConfiguration *configuration)
|
|||||||
m_cleanSteps.at(i)->removeBuildConfiguration(configuration->name());
|
m_cleanSteps.at(i)->removeBuildConfiguration(configuration->name());
|
||||||
|
|
||||||
emit removedBuildConfiguration(this, configuration->name());
|
emit removedBuildConfiguration(this, configuration->name());
|
||||||
|
delete configuration;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Project::copyBuildConfiguration(const QString &source, const QString &dest)
|
void Project::copyBuildConfiguration(const QString &source, const QString &dest)
|
||||||
|
@@ -141,6 +141,7 @@ public:
|
|||||||
virtual QStringList includePaths(const QString &fileName) const;
|
virtual QStringList includePaths(const QString &fileName) const;
|
||||||
virtual QStringList frameworkPaths(const QString &fileName) const;
|
virtual QStringList frameworkPaths(const QString &fileName) const;
|
||||||
|
|
||||||
|
static QString makeUnique(const QString &preferedName, const QStringList &usedNames);
|
||||||
signals:
|
signals:
|
||||||
void fileListChanged();
|
void fileListChanged();
|
||||||
|
|
||||||
@@ -183,7 +184,6 @@ protected:
|
|||||||
virtual bool restoreSettingsImpl(PersistentSettingsReader &reader);
|
virtual bool restoreSettingsImpl(PersistentSettingsReader &reader);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static QString makeUnique(const QString &preferedName, const QStringList &usedNames);
|
|
||||||
QList<BuildStep *> m_buildSteps;
|
QList<BuildStep *> m_buildSteps;
|
||||||
QList<BuildStep *> m_cleanSteps;
|
QList<BuildStep *> m_cleanSteps;
|
||||||
QMap<QString, QVariant> m_values;
|
QMap<QString, QVariant> m_values;
|
||||||
|
Reference in New Issue
Block a user