forked from qt-creator/qt-creator
NodeInstanceView: Connect to done() signal instead of finished()
Don't block the caller thread when starting the process. Handle failed to start case inside done() handler. Change-Id: I57e2fd1e069c3c6285603cbe30f42bad9d80cecd Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: hjk <hjk@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
@@ -39,7 +39,6 @@
|
||||
#include <QElapsedTimer>
|
||||
#include <QHash>
|
||||
#include <QImage>
|
||||
#include <QPointer>
|
||||
#include <QRectF>
|
||||
#include <QTime>
|
||||
#include <QTimer>
|
||||
|
@@ -2035,14 +2035,12 @@ void NodeInstanceView::handleQsbProcessExit(Utils::QtcProcess *qsbProcess, const
|
||||
{
|
||||
--m_remainingQsbTargets;
|
||||
|
||||
QString errStr = qsbProcess->errorString();
|
||||
QByteArray stdErrStr = qsbProcess->readAllStandardError();
|
||||
const QString errStr = qsbProcess->errorString();
|
||||
const QByteArray stdErrStr = qsbProcess->readAllStandardError();
|
||||
|
||||
if (!errStr.isEmpty() || !stdErrStr.isEmpty()) {
|
||||
Core::MessageManager::writeSilently(
|
||||
QCoreApplication::translate("QmlDesigner::NodeInstanceView",
|
||||
"Failed to generate QSB file for: %1")
|
||||
.arg(shader));
|
||||
Core::MessageManager::writeSilently(QCoreApplication::translate(
|
||||
"QmlDesigner::NodeInstanceView", "Failed to generate QSB file for: %1").arg(shader));
|
||||
if (!errStr.isEmpty())
|
||||
Core::MessageManager::writeSilently(errStr);
|
||||
if (!stdErrStr.isEmpty())
|
||||
@@ -2138,26 +2136,12 @@ void NodeInstanceView::handleShaderChanges()
|
||||
args.append(outPath.toString());
|
||||
args.append(shader);
|
||||
auto qsbProcess = new Utils::QtcProcess;
|
||||
connect(qsbProcess, &Utils::QtcProcess::done, this, [this, qsbProcess, shader] {
|
||||
handleQsbProcessExit(qsbProcess, shader);
|
||||
});
|
||||
qsbProcess->setWorkingDirectory(srcPath);
|
||||
qsbProcess->setCommand({m_qsbPath, args});
|
||||
qsbProcess->start();
|
||||
|
||||
if (!qsbProcess->waitForStarted()) {
|
||||
handleQsbProcessExit(qsbProcess, shader);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (qsbProcess->state() == QProcess::Running) {
|
||||
connect(qsbProcess, &Utils::QtcProcess::finished,
|
||||
[thisView = QPointer<NodeInstanceView>(this), qsbProcess, shader]() {
|
||||
if (thisView)
|
||||
thisView->handleQsbProcessExit(qsbProcess, shader);
|
||||
else
|
||||
qsbProcess->deleteLater();
|
||||
});
|
||||
} else {
|
||||
handleQsbProcessExit(qsbProcess, shader);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user