diff --git a/src/libs/utils/processinterface.h b/src/libs/utils/processinterface.h index 16c038b25d5..d24b4eb8f26 100644 --- a/src/libs/utils/processinterface.h +++ b/src/libs/utils/processinterface.h @@ -48,6 +48,7 @@ public: QProcess::ExitStatus m_exitStatus = QProcess::NormalExit; QProcess::ProcessError m_error = QProcess::UnknownError; QString m_errorString; + bool m_canceledByUser = false; }; enum class ControlSignal { diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index d04da95e923..1ffbccea6f1 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -940,6 +940,9 @@ void QtcProcessPrivate::sendControlSignal(ControlSignal controlSignal) if (!m_process || (m_state == QProcess::NotRunning)) return; + if (controlSignal == ControlSignal::Terminate || controlSignal == ControlSignal::Kill) + m_resultData.m_canceledByUser = true; + QMetaObject::invokeMethod(m_process.get(), [this, controlSignal] { m_process->sendControlSignal(controlSignal); }, connectionType()); @@ -1958,7 +1961,9 @@ void QtcProcessPrivate::handleReadyRead(const QByteArray &outputData, const QByt void QtcProcessPrivate::handleDone(const ProcessResultData &data) { m_killTimer.stop(); + const bool wasCanceled = m_resultData.m_canceledByUser; m_resultData = data; + m_resultData.m_canceledByUser = wasCanceled; switch (m_state) { case QProcess::NotRunning: