diff --git a/src/plugins/projectexplorer/runconfigurationaspects.cpp b/src/plugins/projectexplorer/runconfigurationaspects.cpp index b8a77facad3..a7dd028f022 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.cpp +++ b/src/plugins/projectexplorer/runconfigurationaspects.cpp @@ -159,18 +159,18 @@ void WorkingDirectoryAspect::addToMainConfigurationWidget(QWidget *parent, QForm m_chooser->setHistoryCompleter(m_key); m_chooser->setExpectedKind(Utils::PathChooser::Directory); m_chooser->setPromptDialogTitle(tr("Select Working Directory")); - connect(m_chooser, &PathChooser::pathChanged, this, &WorkingDirectoryAspect::setWorkingDirectory); + connect(m_chooser.data(), &PathChooser::pathChanged, + this, &WorkingDirectoryAspect::setWorkingDirectory); auto resetButton = new QToolButton(parent); resetButton->setToolTip(tr("Reset to default")); resetButton->setIcon(QIcon(QLatin1String(Core::Constants::ICON_RESET))); - connect(resetButton, &QAbstractButton::clicked, this, [this] { m_chooser->setPath(QString()); }); + connect(resetButton, &QAbstractButton::clicked, this, &WorkingDirectoryAspect::resetPath); if (auto envAspect = runConfiguration()->extraAspect()) { - connect(envAspect, &EnvironmentAspect::environmentChanged, this, [this, envAspect] { - m_chooser->setEnvironment(envAspect->environment()); - }); - m_chooser->setEnvironment(envAspect->environment()); + connect(envAspect, &EnvironmentAspect::environmentChanged, + this, &WorkingDirectoryAspect::updateEnvironment); + updateEnvironment(); } auto hbox = new QHBoxLayout; @@ -179,6 +179,20 @@ void WorkingDirectoryAspect::addToMainConfigurationWidget(QWidget *parent, QForm layout->addRow(tr("Working directory:"), hbox); } +void WorkingDirectoryAspect::updateEnvironment() +{ + auto envAspect = runConfiguration()->extraAspect(); + QTC_ASSERT(envAspect, return); + QTC_ASSERT(m_chooser, return); + m_chooser->setEnvironment(envAspect->environment()); +} + +void WorkingDirectoryAspect::resetPath() +{ + QTC_ASSERT(m_chooser, return); + m_chooser->setPath(QString()); +} + void WorkingDirectoryAspect::fromMap(const QVariantMap &map) { m_workingDirectory = map.value(m_key).toBool(); @@ -204,6 +218,11 @@ void WorkingDirectoryAspect::setWorkingDirectory(const QString &workingDirectory m_workingDirectory = workingDirectory; } +PathChooser *WorkingDirectoryAspect::pathChooser() const +{ + return m_chooser; +} + /*! \class ProjectExplorer::ArgumentsAspect diff --git a/src/plugins/projectexplorer/runconfigurationaspects.h b/src/plugins/projectexplorer/runconfigurationaspects.h index a619fd3fb7b..5b44f33da57 100644 --- a/src/plugins/projectexplorer/runconfigurationaspects.h +++ b/src/plugins/projectexplorer/runconfigurationaspects.h @@ -95,14 +95,17 @@ public: QString workingDirectory() const; QString unexpandedWorkingDirectory() const; void setWorkingDirectory(const QString &workingDirectory); - Utils::PathChooser *pathChooser() const { return m_chooser; } + Utils::PathChooser *pathChooser() const; private: void fromMap(const QVariantMap &map) override; void toMap(QVariantMap &map) const override; + void resetPath(); + void updateEnvironment(); + QString m_workingDirectory; - Utils::PathChooser *m_chooser; + QPointer m_chooser; QString m_key; };