diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 162112d88b5..87ba8856bcb 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -705,7 +705,6 @@ public: StartFailure m_startFailure = NoFailure; bool m_timeOutMessageBoxEnabled = false; bool m_waitingForUser = false; - bool m_processUserEvents = false; }; void QtcProcessPrivate::clearForRun() @@ -1445,11 +1444,6 @@ void ChannelBuffer::handleRest() } } -void QtcProcess::setProcessUserEventWhileRunning() -{ - d->m_processUserEvents = true; -} - void QtcProcess::setTimeoutS(int timeoutS) { if (timeoutS > 0) @@ -1486,7 +1480,7 @@ static bool isGuiThread() } #endif -void QtcProcess::runBlocking() +void QtcProcess::runBlocking(QtcProcess::EventLoopMode eventLoopMode) { // FIXME: Implement properly @@ -1497,10 +1491,10 @@ void QtcProcess::runBlocking() }; qCDebug(processLog).noquote() << "Starting blocking:" << d->m_commandLine.toUserOutput() - << " process user events: " << d->m_processUserEvents; + << " process user events: " << (eventLoopMode == QtcProcess::WithEventLoop); ExecuteOnDestruction logResult([this] { qCDebug(processLog) << *this; }); - if (d->m_processUserEvents) { + if (eventLoopMode == QtcProcess::WithEventLoop) { QtcProcess::start(); // On Windows, start failure is triggered immediately if the diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 652033b9c92..63b9d65ea5b 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -126,11 +126,15 @@ public: static bool startDetached(const CommandLine &cmd, const FilePath &workingDirectory = {}, qint64 *pid = nullptr); - // Starts the command and waits for finish. User input processing depends - // on whether setProcessUserEventWhileRunning was called. - void runBlocking(); - // This starts a nested event loop when running the command. - void setProcessUserEventWhileRunning(); // Avoid. + + enum EventLoopMode { + NoEventLoop, + WithEventLoop // Avoid + }; + + // Starts the command and waits for finish. + // User input processing is enabled when WithEventLoop was passed. + void runBlocking(EventLoopMode eventLoopMode = NoEventLoop); /* Timeout for hanging processes (triggers after no more output * occurs on stderr/stdout). */ diff --git a/src/libs/utils/shellcommand.cpp b/src/libs/utils/shellcommand.cpp index 08523c13e3e..e5527c127b4 100644 --- a/src/libs/utils/shellcommand.cpp +++ b/src/libs/utils/shellcommand.cpp @@ -416,8 +416,7 @@ void ShellCommand::runSynchronous(QtcProcess &process, const FilePath &workingDi if (d->m_codec) process.setCodec(d->m_codec); - process.setProcessUserEventWhileRunning(); - process.runBlocking(); + process.runBlocking(QtcProcess::WithEventLoop); } const QVariant &ShellCommand::cookie() const diff --git a/src/plugins/android/androidbuildapkstep.cpp b/src/plugins/android/androidbuildapkstep.cpp index 3039eb226c5..c97a337c231 100644 --- a/src/plugins/android/androidbuildapkstep.cpp +++ b/src/plugins/android/androidbuildapkstep.cpp @@ -1061,8 +1061,7 @@ QAbstractItemModel *AndroidBuildApkStep::keystoreCertificates() QtcProcess keytoolProc; keytoolProc.setTimeoutS(30); keytoolProc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), params}); - keytoolProc.setProcessUserEventWhileRunning(); - keytoolProc.runBlocking(); + keytoolProc.runBlocking(QtcProcess::WithEventLoop); if (keytoolProc.result() > QtcProcess::FinishedWithError) QMessageBox::critical(nullptr, tr("Error"), tr("Failed to run keytool.")); else diff --git a/src/plugins/android/androidcreatekeystorecertificate.cpp b/src/plugins/android/androidcreatekeystorecertificate.cpp index 44e5b290cdd..42296720ed3 100644 --- a/src/plugins/android/androidcreatekeystorecertificate.cpp +++ b/src/plugins/android/androidcreatekeystorecertificate.cpp @@ -199,8 +199,7 @@ void AndroidCreateKeystoreCertificate::buttonBoxAccepted() QtcProcess genKeyCertProc; genKeyCertProc.setTimeoutS(15); genKeyCertProc.setCommand(command); - genKeyCertProc.setProcessUserEventWhileRunning(); - genKeyCertProc.runBlocking(); + genKeyCertProc.runBlocking(QtcProcess::WithEventLoop); if (genKeyCertProc.result() != QtcProcess::FinishedWithSuccess) { QMessageBox::critical(this, tr("Error"), diff --git a/src/plugins/android/androiddeployqtstep.cpp b/src/plugins/android/androiddeployqtstep.cpp index e5ee3ed8039..16177ca1afa 100644 --- a/src/plugins/android/androiddeployqtstep.cpp +++ b/src/plugins/android/androiddeployqtstep.cpp @@ -527,8 +527,7 @@ void AndroidDeployQtStep::runCommand(const CommandLine &command) OutputFormat::NormalMessage); buildProc.setCommand(command); - buildProc.setProcessUserEventWhileRunning(); - buildProc.runBlocking(); + buildProc.runBlocking(QtcProcess::WithEventLoop); if (buildProc.result() != QtcProcess::FinishedWithSuccess) reportWarningOrError(buildProc.exitMessage(), Task::Error); } diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp index 049de020b0f..a256bf43c7b 100644 --- a/src/plugins/android/androidmanager.cpp +++ b/src/plugins/android/androidmanager.cpp @@ -591,8 +591,7 @@ bool AndroidManager::checkKeystorePassword(const QString &keystorePath, const QS QtcProcess proc; proc.setTimeoutS(10); proc.setCommand(cmd); - proc.setProcessUserEventWhileRunning(); - proc.runBlocking(); + proc.runBlocking(QtcProcess::WithEventLoop); return proc.result() == QtcProcess::FinishedWithSuccess; } @@ -609,8 +608,7 @@ bool AndroidManager::checkCertificatePassword(const QString &keystorePath, const QtcProcess proc; proc.setTimeoutS(10); proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments}); - proc.setProcessUserEventWhileRunning(); - proc.runBlocking(); + proc.runBlocking(QtcProcess::WithEventLoop); return proc.result() == QtcProcess::FinishedWithSuccess; } @@ -624,8 +622,7 @@ bool AndroidManager::checkCertificateExists(const QString &keystorePath, QtcProcess proc; proc.setTimeoutS(10); proc.setCommand({AndroidConfigurations::currentConfig().keytoolPath(), arguments}); - proc.setProcessUserEventWhileRunning(); - proc.runBlocking(); + proc.runBlocking(QtcProcess::WithEventLoop); return proc.result() == QtcProcess::FinishedWithSuccess; } @@ -780,8 +777,7 @@ SdkToolResult AndroidManager::runCommand(const CommandLine &command, cmdProc.setWriteData(writeData); qCDebug(androidManagerLog) << "Running command (sync):" << command.toUserOutput(); cmdProc.setCommand(command); - cmdProc.setProcessUserEventWhileRunning(); - cmdProc.runBlocking(); + cmdProc.runBlocking(QtcProcess::WithEventLoop); cmdResult.m_stdOut = cmdProc.stdOut().trimmed(); cmdResult.m_stdErr = cmdProc.stdErr().trimmed(); cmdResult.m_success = cmdProc.result() == QtcProcess::FinishedWithSuccess; diff --git a/src/plugins/android/androidsdkmanager.cpp b/src/plugins/android/androidsdkmanager.cpp index eaa6996014a..050b55c4ea1 100644 --- a/src/plugins/android/androidsdkmanager.cpp +++ b/src/plugins/android/androidsdkmanager.cpp @@ -136,8 +136,7 @@ static bool sdkManagerCommand(const AndroidConfig &config, const QStringList &ar proc.setTimeoutS(timeout); proc.setTimeOutMessageBoxEnabled(true); proc.setCommand({config.sdkManagerToolPath(), newArgs}); - proc.setProcessUserEventWhileRunning(); - proc.runBlocking(); + proc.runBlocking(QtcProcess::WithEventLoop); if (output) *output = proc.allOutput(); return proc.result() == QtcProcess::FinishedWithSuccess; @@ -178,8 +177,7 @@ static void sdkManagerCommand(const AndroidConfig &config, const QStringList &ar &proc, &QtcProcess::stopProcess); } proc.setCommand({config.sdkManagerToolPath(), newArgs}); - proc.setProcessUserEventWhileRunning(); - proc.runBlocking(); + proc.runBlocking(QtcProcess::WithEventLoop); if (assertionFound) { output.success = false; output.stdOutput = proc.stdOut(); diff --git a/src/plugins/clearcase/clearcaseplugin.cpp b/src/plugins/clearcase/clearcaseplugin.cpp index 8a058e9e71e..9f8afc89aba 100644 --- a/src/plugins/clearcase/clearcaseplugin.cpp +++ b/src/plugins/clearcase/clearcaseplugin.cpp @@ -2354,8 +2354,7 @@ QString ClearCasePluginPrivate::runExtDiff(const FilePath &workingDir, const QSt process.setWorkingDirectory(workingDir); process.setCodec(outputCodec ? outputCodec : QTextCodec::codecForName("UTF-8")); process.setCommand(diff); - process.setProcessUserEventWhileRunning(); - process.runBlocking(); + process.runBlocking(QtcProcess::WithEventLoop); if (process.result() != QtcProcess::FinishedWithSuccess) return QString(); return process.allOutput(); diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp index fcc7465db33..cd340be879c 100644 --- a/src/plugins/perforce/perforceplugin.cpp +++ b/src/plugins/perforce/perforceplugin.cpp @@ -1270,8 +1270,7 @@ PerforceResponse PerforcePluginPrivate::synchronousProcess(const FilePath &worki } process.setTimeOutMessageBoxEnabled(true); process.setCommand({m_settings.p4BinaryPath.filePath(), args}); - process.setProcessUserEventWhileRunning(); - process.runBlocking(); + process.runBlocking(QtcProcess::WithEventLoop); PerforceResponse response; response.error = true; diff --git a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp index 1b68a68dd44..d2170775b6c 100644 --- a/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp +++ b/src/plugins/projectexplorer/customwizard/customwizardscriptgenerator.cpp @@ -115,8 +115,7 @@ static bool qDebug("In %s, running:\n%s\n", qPrintable(workingDirectory.toUserOutput()), qPrintable(cmd.toUserOutput())); process.setCommand(cmd); - process.setProcessUserEventWhileRunning(); - process.runBlocking(); + process.runBlocking(QtcProcess::WithEventLoop); if (process.result() != Utils::QtcProcess::FinishedWithSuccess) { *errorMessage = QString("Generator script failed: %1").arg(process.exitMessage()); const QString stdErr = process.stdErr();