aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/projectexplorer/buildmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/projectexplorer/buildmanager.cpp')
-rw-r--r--src/plugins/projectexplorer/buildmanager.cpp70
1 files changed, 19 insertions, 51 deletions
diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index 68fe6f1356..544677517a 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -79,9 +79,8 @@ public:
// is set to true while canceling, so that nextBuildStep knows that the BuildStep finished because of canceling
bool m_skipDisabled = false;
bool m_canceling = false;
- QFutureWatcher<bool> m_watcher;
- QFutureInterface<bool> m_futureInterfaceForAysnc;
- BuildStep *m_currentBuildStep;
+ bool m_lastStepSucceeded = true;
+ BuildStep *m_currentBuildStep = nullptr;
QString m_currentConfiguration;
// used to decide if we are building a project to decide when to emit buildStateChanged(Project *)
QHash<Project *, int> m_activeBuildSteps;
@@ -107,16 +106,6 @@ BuildManager::BuildManager(QObject *parent, QAction *cancelBuildAction)
m_instance = this;
d = new BuildManagerPrivate;
- connect(&d->m_watcher, &QFutureWatcherBase::finished,
- this, &BuildManager::nextBuildQueue, Qt::QueuedConnection);
-
- connect(&d->m_watcher, &QFutureWatcherBase::progressValueChanged,
- this, &BuildManager::progressChanged);
- connect(&d->m_watcher, &QFutureWatcherBase::progressTextChanged,
- this, &BuildManager::progressTextChanged);
- connect(&d->m_watcher, &QFutureWatcherBase::progressRangeChanged,
- this, &BuildManager::progressChanged);
-
connect(SessionManager::instance(), &SessionManager::aboutToRemoveProject,
this, &BuildManager::aboutToRemoveProject);
@@ -203,14 +192,9 @@ void BuildManager::cancel()
if (d->m_canceling)
return;
d->m_canceling = true;
- d->m_watcher.cancel();
- if (d->m_currentBuildStep->runInGuiThread()) {
- d->m_currentBuildStep->cancel();
- while (d->m_canceling)
- QApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
- } else {
- d->m_watcher.waitForFinished();
- }
+ d->m_currentBuildStep->cancel();
+ while (d->m_canceling)
+ QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); // TODO: Is this really necessary?
}
}
@@ -352,8 +336,6 @@ void BuildManager::addToOutputWindow(const QString &string, BuildStep::OutputFor
void BuildManager::nextBuildQueue()
{
- d->m_futureInterfaceForAysnc = QFutureInterface<bool>();
-
d->m_outputWindow->flush();
if (d->m_canceling) {
d->m_canceling = false;
@@ -375,7 +357,7 @@ void BuildManager::nextBuildQueue()
d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100, msgProgress(d->m_progress, d->m_maxProgress));
decrementActiveBuildSteps(d->m_currentBuildStep);
- const bool success = d->m_skipDisabled || d->m_watcher.result();
+ const bool success = d->m_skipDisabled || d->m_lastStepSucceeded;
if (success) {
nextStep();
} else {
@@ -397,28 +379,10 @@ void BuildManager::nextBuildQueue()
}
}
-void BuildManager::progressChanged()
+void BuildManager::progressChanged(int percent, const QString &text)
{
- if (!d->m_progressFutureInterface)
- return;
- int range = d->m_watcher.progressMaximum() - d->m_watcher.progressMinimum();
- if (range != 0) {
- int percent = (d->m_watcher.progressValue() - d->m_watcher.progressMinimum()) * 100 / range;
- d->m_progressFutureInterface->setProgressValueAndText(d->m_progress * 100 + percent, msgProgress(d->m_progress, d->m_maxProgress)
- + QLatin1Char('\n') + d->m_watcher.progressText());
- }
-}
-
-void BuildManager::progressTextChanged()
-{
- if (!d->m_progressFutureInterface)
- return;
- int range = d->m_watcher.progressMaximum() - d->m_watcher.progressMinimum();
- int percent = 0;
- if (range != 0)
- percent = (d->m_watcher.progressValue() - d->m_watcher.progressMinimum()) * 100 / range;
- d->m_progressFutureInterface->setProgressValueAndText(d->m_progress*100 + percent, msgProgress(d->m_progress, d->m_maxProgress) +
- QLatin1Char('\n') + d->m_watcher.progressText());
+ if (d->m_progressFutureInterface)
+ d->m_progressFutureInterface->setProgressValueAndText(percent, text);
}
void BuildManager::nextStep()
@@ -445,12 +409,16 @@ void BuildManager::nextStep()
return;
}
- if (d->m_currentBuildStep->runInGuiThread()) {
- d->m_watcher.setFuture(d->m_futureInterfaceForAysnc.future());
- d->m_currentBuildStep->run(d->m_futureInterfaceForAysnc);
- } else {
- d->m_watcher.setFuture(Utils::runAsync(&BuildStep::run, d->m_currentBuildStep));
- }
+ static const auto finishedHandler = [](bool success) {
+ d->m_lastStepSucceeded = success;
+ disconnect(d->m_currentBuildStep, nullptr, instance(), nullptr);
+ BuildManager::nextBuildQueue();
+ };
+ connect(d->m_currentBuildStep, &BuildStep::finished, instance(), finishedHandler,
+ Qt::QueuedConnection);
+ connect(d->m_currentBuildStep, &BuildStep::progress,
+ instance(), &BuildManager::progressChanged);
+ d->m_currentBuildStep->run();
} else {
d->m_running = false;
d->m_previousBuildStepProject = nullptr;