ProjectExplorer: Propagate build environment changes more directly

To check this still works I used a CustomRunConfiguration with
a executable name $AAA, the tooltip there tries to expand that
(and complains that $AAA is not an executable).

By inserting a AAA=/bin/ls in the build environment, the tool tip
on the run config exectable path chooser changes appropriately,
same for changing the AAA value.

The connection seems also needed, dropping it destroys that updating.

Change-Id: I28965cbd3ce530a83d98808ca7624a6799cd9800
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
hjk
2019-07-26 09:23:57 +02:00
parent f940aad53c
commit a6c85993ba
9 changed files with 9 additions and 49 deletions

View File

@@ -103,7 +103,7 @@ void CMakeRunConfiguration::updateTargetInformation()
BuildTargetInfo bti = buildTargetInfo();
aspect<ExecutableAspect>()->setExecutable(bti.targetFilePath);
aspect<WorkingDirectoryAspect>()->setDefaultWorkingDirectory(bti.workingDirectory);
aspect<LocalEnvironmentAspect>()->buildEnvironmentHasChanged();
aspect<LocalEnvironmentAspect>()->environmentChanged();
auto terminalAspect = aspect<TerminalAspect>();
terminalAspect->setUseTerminalHint(bti.usesTerminal);

View File

@@ -101,6 +101,7 @@ BuildConfiguration::BuildConfiguration(Target *target, Core::Id id)
connect(this, &BuildConfiguration::environmentChanged, this, [this] {
m_buildDirectoryAspect->setEnvironment(environment());
this->target()->buildEnvironmentChanged(this);
});
}

View File

@@ -30,8 +30,6 @@
#include "kit.h"
#include "target.h"
#include <utils/qtcassert.h>
using namespace Utils;
namespace ProjectExplorer {
@@ -56,15 +54,10 @@ LocalEnvironmentAspect::LocalEnvironmentAspect(Target *target)
return env;
});
target->subscribeSignal(&BuildConfiguration::environmentChanged,
this, &LocalEnvironmentAspect::buildEnvironmentHasChanged);
connect(target, &Target::activeBuildConfigurationChanged,
this, &LocalEnvironmentAspect::buildEnvironmentHasChanged);
}
void LocalEnvironmentAspect::buildEnvironmentHasChanged()
{
emit environmentChanged();
this, &EnvironmentAspect::environmentChanged);
connect(target, &Target::buildEnvironmentChanged,
this, &EnvironmentAspect::environmentChanged);
}
} // namespace ProjectExplorer

View File

@@ -35,8 +35,6 @@ class PROJECTEXPLORER_EXPORT LocalEnvironmentAspect : public EnvironmentAspect
public:
explicit LocalEnvironmentAspect(Target *parent);
void buildEnvironmentHasChanged();
};
} // namespace ProjectExplorer

View File

@@ -124,22 +124,5 @@ ProjectSubscription::ProjectSubscription(const Subscription::Connector &s, const
ProjectSubscription::~ProjectSubscription() = default;
TargetSubscription::TargetSubscription(const Subscription::Connector &s, const QObject *r,
Target *t) :
Subscription(s, r, t)
{
QTC_ASSERT(m_subscriber, return);
subscribe(t);
// Disconnect on removal of a target, to make it save to remove/add a target:
connect(t->project(), &Project::removedTarget, this,
[t, this](const Target *reportedTarget) { if (t == reportedTarget) { destroy(); } });
connect(t, &Target::addedProjectConfiguration, this, &TargetSubscription::subscribe);
connect(t, &Target::removedProjectConfiguration, this, &TargetSubscription::unsubscribe);
}
TargetSubscription::~TargetSubscription() = default;
} // namespace Internal
} // namespace ProjectExplorer

View File

@@ -70,12 +70,5 @@ public:
~ProjectSubscription() final;
};
class PROJECTEXPLORER_EXPORT TargetSubscription : public Subscription
{
public:
TargetSubscription(const Connector &s, const QObject *receiver, Target *t);
~TargetSubscription() final;
};
} // namespace Internal
} // namespace ProjectExplorer

View File

@@ -119,15 +119,6 @@ public:
QVariant additionalData(Core::Id id) const;
MakeInstallCommand makeInstallCommand(const QString &installRoot) const;
template<typename S, typename R, typename T>
void subscribeSignal(void (S::*sig)(), R*recv, T (R::*sl)()) {
new Internal::TargetSubscription([sig, recv, sl, this](ProjectConfiguration *pc) {
if (S* sender = qobject_cast<S*>(pc))
return connect(sender, sig, recv, sl);
return QMetaObject::Connection();
}, recv, this);
}
signals:
void targetEnabled(bool);
void iconChanged();
@@ -150,6 +141,7 @@ signals:
void removedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc);
void addedBuildConfiguration(ProjectExplorer::BuildConfiguration *bc);
void activeBuildConfigurationChanged(ProjectExplorer::BuildConfiguration *);
void buildEnvironmentChanged(ProjectExplorer::BuildConfiguration *bc);
void removedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc);
void addedDeployConfiguration(ProjectExplorer::DeployConfiguration *dc);

View File

@@ -84,8 +84,8 @@ QbsRunConfiguration::QbsRunConfiguration(Target *target, Core::Id id)
});
}
connect(project(), &Project::parsingFinished, this,
[envAspect]() { envAspect->buildEnvironmentHasChanged(); });
connect(project(), &Project::parsingFinished,
envAspect, &EnvironmentAspect::environmentChanged);
connect(target, &Target::deploymentDataChanged,
this, &QbsRunConfiguration::updateTargetInformation);

View File

@@ -97,7 +97,7 @@ DesktopQmakeRunConfiguration::DesktopQmakeRunConfiguration(Target *target, Core:
void DesktopQmakeRunConfiguration::updateTargetInformation()
{
setDefaultDisplayName(defaultDisplayName());
aspect<LocalEnvironmentAspect>()->buildEnvironmentHasChanged();
aspect<EnvironmentAspect>()->environmentChanged();
BuildTargetInfo bti = buildTargetInfo();