diff --git a/src/plugins/projectexplorer/makestep.cpp b/src/plugins/projectexplorer/makestep.cpp index ffd3bed69c1..23eb063d6f5 100644 --- a/src/plugins/projectexplorer/makestep.cpp +++ b/src/plugins/projectexplorer/makestep.cpp @@ -70,24 +70,31 @@ namespace Internal { class OverrideMakeflagsAspect final : public BaseBoolAspect { public: - OverrideMakeflagsAspect() - { - const QString text = tr("Override MAKEFLAGS"); - setLabel(text, LabelPlacement::AtCheckBox); + OverrideMakeflagsAspect() {} - m_nonOverrideWarning = new QLabel; - m_nonOverrideWarning->setToolTip("

" + - tr("MAKEFLAGS specifies parallel jobs. Check \"%1\" to override.") - .arg(text) + "

"); - m_nonOverrideWarning->setPixmap(Icons::WARNING.pixmap()); + void setWarningVisible(bool on) + { + if (m_nonOverrideWarning) + m_nonOverrideWarning->setVisible(on); } void addToLayout(LayoutBuilder &builder) final { + if (!m_nonOverrideWarning) { + const QString text = tr("Override MAKEFLAGS"); + setLabel(text, LabelPlacement::AtCheckBox); + m_nonOverrideWarning = new QLabel; + m_nonOverrideWarning->setToolTip("

" + + tr("MAKEFLAGS specifies parallel jobs. Check \"%1\" to override.") + .arg(text) + "

"); + m_nonOverrideWarning->setPixmap(Icons::WARNING.pixmap()); + } + BaseBoolAspect::addToLayout(builder); builder.addItem(m_nonOverrideWarning.data()); } +private: QPointer m_nonOverrideWarning; }; @@ -461,7 +468,8 @@ BuildStepConfigWidget *MakeStep::createConfigWidget() return param.summaryInWorkdir(displayName()); }); - auto updateDetails = [this, widget] { + auto updateDetails = [this, widget = QPointer(widget)] { + QTC_ASSERT(widget, return); const bool jobCountVisible = isJobCountSupported(); m_userJobCountAspect->setVisible(jobCountVisible); m_overrideMakeflagsAspect->setVisible(jobCountVisible); @@ -469,10 +477,8 @@ BuildStepConfigWidget *MakeStep::createConfigWidget() const bool jobCountEnabled = !userArgsContainsJobCount(); m_userJobCountAspect->setEnabled(jobCountEnabled); m_overrideMakeflagsAspect->setEnabled(jobCountEnabled); - - QTC_ASSERT(m_overrideMakeflagsAspect->m_nonOverrideWarning, return); - m_overrideMakeflagsAspect->m_nonOverrideWarning->setVisible( - makeflagsJobCountMismatch() && !jobCountOverridesMakeflags()); + m_overrideMakeflagsAspect->setWarningVisible(makeflagsJobCountMismatch() + && !jobCountOverridesMakeflags()); widget->m_disableInSubDirsCheckBox->setChecked(!enabledForSubDirs()); widget->recreateSummary(); @@ -480,10 +486,10 @@ BuildStepConfigWidget *MakeStep::createConfigWidget() updateDetails(); - connect(m_makeCommandAspect, &BaseStringAspect::changed, this, updateDetails); - connect(m_userArgumentsAspect, &BaseStringAspect::changed, this, updateDetails); - connect(m_userJobCountAspect, &BaseIntegerAspect::changed, this, updateDetails); - connect(m_overrideMakeflagsAspect, &BaseBoolAspect::changed, this, updateDetails); + connect(m_makeCommandAspect, &BaseStringAspect::changed, widget, updateDetails); + connect(m_userArgumentsAspect, &BaseStringAspect::changed, widget, updateDetails); + connect(m_userJobCountAspect, &BaseIntegerAspect::changed, widget, updateDetails); + connect(m_overrideMakeflagsAspect, &BaseBoolAspect::changed, widget, updateDetails); connect(widget->m_targetsList, &QListWidget::itemChanged, this, [this, updateDetails](QListWidgetItem *item) { @@ -492,13 +498,13 @@ BuildStepConfigWidget *MakeStep::createConfigWidget() }); connect(ProjectExplorerPlugin::instance(), &ProjectExplorerPlugin::settingsChanged, - this, updateDetails); + widget, updateDetails); - connect(target(), &Target::kitChanged, this, updateDetails); + connect(target(), &Target::kitChanged, widget, updateDetails); - connect(buildConfiguration(), &BuildConfiguration::environmentChanged, this, updateDetails); - connect(buildConfiguration(), &BuildConfiguration::buildDirectoryChanged, this, updateDetails); - connect(target(), &Target::parsingFinished, this, updateDetails); + connect(buildConfiguration(), &BuildConfiguration::environmentChanged, widget, updateDetails); + connect(buildConfiguration(), &BuildConfiguration::buildDirectoryChanged, widget, updateDetails); + connect(target(), &Target::parsingFinished, widget, updateDetails); return widget; }