diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index 4d2cf7bea21..0abf7d5b78b 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -28,6 +28,7 @@ #include "projectconfiguration.h" #include "projectexplorer_export.h" +#include #include #include @@ -88,6 +89,10 @@ public: bool widgetExpandedByDefault() const; void setWidgetExpandedByDefault(bool widgetExpandedByDefault); + bool hasUserExpansionState() const { return m_wasExpanded.has_value(); } + bool wasUserExpanded() const { return m_wasExpanded.value_or(false); } + void setUserExpanded(bool expanded) { m_wasExpanded = expanded; } + bool isImmutable() const { return m_immutable; } void setImmutable(bool immutable) { m_immutable = immutable; } @@ -123,6 +128,7 @@ private: bool m_immutable = false; bool m_widgetExpandedByDefault = true; bool m_runInGuiThread = true; + Utils::optional m_wasExpanded; }; class PROJECTEXPLORER_EXPORT BuildStepInfo diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index a9897e610c7..331ccd9f402 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -258,8 +258,11 @@ void BuildStepListWidget::init(BuildStepList *bsl) for (int i = 0; i < bsl->count(); ++i) { addBuildStep(i); // addBuilStep expands the config widget by default, which we don't want here - if (m_buildStepsData.at(i)->step->widgetExpandedByDefault()) - m_buildStepsData.at(i)->detailsWidget->setState(DetailsWidget::Collapsed); + if (m_buildStepsData.at(i)->step->widgetExpandedByDefault()) { + m_buildStepsData.at(i)->detailsWidget->setState( + m_buildStepsData.at(i)->step->wasUserExpanded() + ? DetailsWidget::Expanded : DetailsWidget::Collapsed); + } } m_noStepsLabel->setVisible(bsl->isEmpty()); @@ -323,10 +326,10 @@ void BuildStepListWidget::addBuildStep(int pos) this, &BuildStepListWidget::updateEnabledState); // Expand new build steps by default - if (newStep->widgetExpandedByDefault()) - s->detailsWidget->setState(DetailsWidget::Expanded); - else - s->detailsWidget->setState(DetailsWidget::OnlySummary); + const bool expand = newStep->hasUserExpansionState() + ? newStep->wasUserExpanded() : newStep->widgetExpandedByDefault(); + s->detailsWidget->setState(expand ? DetailsWidget::Expanded : DetailsWidget::OnlySummary); + connect(s->detailsWidget, &DetailsWidget::expanded, newStep, &BuildStep::setUserExpanded); m_noStepsLabel->setVisible(false); updateBuildStepButtonsState();