diff options
author | hjk <[email protected]> | 2022-02-10 19:25:03 +0100 |
---|---|---|
committer | hjk <[email protected]> | 2022-02-11 17:33:48 +0000 |
commit | e2cb64471a59133d2b073b9d14bb0f270a27260b (patch) | |
tree | 8b8b859c6f192136bbca3c4ccba4046a840c3de9 /src/libs | |
parent | 825c89987c88e606dc2dbf5d1c166ac78153d230 (diff) |
Utils: Move QtcProcess constructor setup data to shared setup data
This includes replacing DeviceProcess terminal handling with base
member.
Change-Id: Id1541bfce33c71dddc71b4816ad0b174dce3879c
Reviewed-by: Jarek Kobus <[email protected]>
Diffstat (limited to 'src/libs')
-rw-r--r-- | src/libs/ssh/sshprocess.cpp | 3 | ||||
-rw-r--r-- | src/libs/utils/qtcprocess.cpp | 66 | ||||
-rw-r--r-- | src/libs/utils/qtcprocess.h | 30 | ||||
-rw-r--r-- | src/libs/utils/terminalprocess.cpp | 6 |
4 files changed, 60 insertions, 45 deletions
diff --git a/src/libs/ssh/sshprocess.cpp b/src/libs/ssh/sshprocess.cpp index 7064deed4b2..57dd9fc2836 100644 --- a/src/libs/ssh/sshprocess.cpp +++ b/src/libs/ssh/sshprocess.cpp @@ -32,8 +32,9 @@ namespace QSsh { SshProcess::SshProcess(Utils::ProcessMode processMode) - : Utils::QtcProcess(processMode) { + setProcessMode(processMode); + Utils::Environment env = Utils::Environment::systemEnvironment(); if (SshSettings::askpassFilePath().exists()) { env.set("SSH_ASKPASS", SshSettings::askpassFilePath().toUserOutput()); diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 085e251042b..e7dc08227ab 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -215,6 +215,10 @@ public: class ProcessSetupData { public: + QtcProcess::ProcessImpl m_processImpl = QtcProcess::DefaultImpl; + ProcessMode m_processMode = ProcessMode::Reader; + QtcProcess::TerminalMode m_terminalMode = QtcProcess::TerminalOff; + QString m_nativeArguments; QString m_standardInputFile; QString m_initialErrorString; @@ -532,17 +536,6 @@ static QtcProcess::ProcessImpl defaultProcessImpl() return QtcProcess::ProcessLauncherImpl; } -static ProcessInterface *newProcessInstance(QObject *parent, const QtcProcess::Setup &setup) -{ - if (setup.terminalMode != QtcProcess::TerminalOff) - return new TerminalImpl(parent, setup.processImpl, setup.terminalMode); - const QtcProcess::ProcessImpl impl = setup.processImpl == QtcProcess::DefaultImpl - ? defaultProcessImpl() : setup.processImpl; - if (impl == QtcProcess::QProcessImpl) - return new QProcessImpl(parent, setup.processMode); - return new ProcessLauncherImpl(parent, setup.processMode); -} - class QtcProcessPrivate : public QObject { public: @@ -552,19 +545,34 @@ public: OtherFailure }; - explicit QtcProcessPrivate(QtcProcess *parent, const QtcProcess::Setup &processSetup) + explicit QtcProcessPrivate(QtcProcess *parent) : QObject(parent) , q(parent) - , m_processSetup(processSetup) {} + void setupNewProcessInstance() + { + const QtcProcess::ProcessImpl impl = + m_setup.m_processImpl == QtcProcess::DefaultImpl + ? defaultProcessImpl() + : m_setup.m_processImpl; + + if (m_setup.m_terminalMode != QtcProcess::TerminalOff) + m_process = new TerminalImpl(parent(), impl, m_setup.m_terminalMode); + else if (impl == QtcProcess::QProcessImpl) + m_process = new QProcessImpl(parent(), m_setup.m_processMode); + else + m_process = new ProcessLauncherImpl(parent(), m_setup.m_processMode); + + m_process->m_setup = &m_setup; + } + void ensureProcessInstanceExists() { if (m_process) return; - m_process = newProcessInstance(parent(), m_processSetup); - m_process->m_setup = &m_setup; + setupNewProcessInstance(); connect(m_process, &ProcessInterface::started, q, &QtcProcess::started); @@ -691,7 +699,6 @@ public: QtcProcess *q; ProcessInterface *m_process = nullptr; - const QtcProcess::Setup m_processSetup; CommandLine m_commandLine; FilePath m_workingDirectory; Environment m_environment; @@ -752,9 +759,9 @@ QtcProcess::Result QtcProcessPrivate::interpretExitCode(int exitCode) \sa Utils::ProcessArgs */ -QtcProcess::QtcProcess(const Setup &setup, QObject *parent) +QtcProcess::QtcProcess(QObject *parent) : QObject(parent), - d(new QtcProcessPrivate(this, setup)) + d(new QtcProcessPrivate(this)) { static int qProcessExitStatusMeta = qRegisterMetaType<QProcess::ExitStatus>(); static int qProcessProcessErrorMeta = qRegisterMetaType<QProcess::ProcessError>(); @@ -762,23 +769,34 @@ QtcProcess::QtcProcess(const Setup &setup, QObject *parent) Q_UNUSED(qProcessProcessErrorMeta) } -QtcProcess::QtcProcess(QObject *parent) - : QtcProcess({}, parent) -{} - QtcProcess::~QtcProcess() { delete d; } +void QtcProcess::setProcessImpl(ProcessImpl processImpl) +{ + d->m_setup.m_processImpl = processImpl; +} + ProcessMode QtcProcess::processMode() const { - return d->m_processSetup.processMode; + return d->m_setup.m_processMode; +} + +void QtcProcess::setTerminalMode(TerminalMode mode) +{ + d->m_setup.m_terminalMode = mode; } QtcProcess::TerminalMode QtcProcess::terminalMode() const { - return d->m_processSetup.terminalMode; + return d->m_setup.m_terminalMode; +} + +void QtcProcess::setProcessMode(ProcessMode processMode) +{ + d->m_setup.m_processMode = processMode; } void QtcProcess::setEnvironment(const Environment &env) diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index fa844d18955..406bc0fab7f 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -60,6 +60,9 @@ class QTCREATOR_UTILS_EXPORT QtcProcess : public QObject Q_OBJECT public: + QtcProcess(QObject *parent = nullptr); + ~QtcProcess(); + enum ProcessImpl { QProcessImpl, ProcessLauncherImpl, @@ -74,24 +77,6 @@ public: TerminalOn = TerminalRun // default mode for ON }; - struct Setup { - Setup() {} - Setup(ProcessImpl processImpl) : processImpl(processImpl) {} - Setup(ProcessMode processMode) : processMode(processMode) {} - Setup(TerminalMode terminalMode) : terminalMode(terminalMode) {} - - ProcessImpl processImpl = DefaultImpl; - ProcessMode processMode = ProcessMode::Reader; - TerminalMode terminalMode = TerminalOff; - }; - - QtcProcess(const Setup &setup = {}, QObject *parent = nullptr); - QtcProcess(QObject *parent); - ~QtcProcess(); - - ProcessMode processMode() const; - TerminalMode terminalMode() const; - enum Result { // Finished successfully. Unless an ExitCodeInterpreter is set // this corresponds to a return code 0. @@ -109,6 +94,15 @@ public: Hang }; + void setProcessImpl(ProcessImpl processImpl); + + void setTerminalMode(TerminalMode mode); + bool usesTerminal() const { return terminalMode() != TerminalOff; } + TerminalMode terminalMode() const; + + void setProcessMode(ProcessMode processMode); + ProcessMode processMode() const; + void setEnvironment(const Environment &env); void unsetEnvironment(); const Environment &environment() const; diff --git a/src/libs/utils/terminalprocess.cpp b/src/libs/utils/terminalprocess.cpp index f24b6aaf952..e844209b6ed 100644 --- a/src/libs/utils/terminalprocess.cpp +++ b/src/libs/utils/terminalprocess.cpp @@ -126,8 +126,10 @@ public: TerminalProcessPrivate(QObject *parent, QtcProcess::ProcessImpl processImpl, QtcProcess::TerminalMode terminalMode) : m_terminalMode(terminalMode) - , m_process(processImpl, parent) - {} + , m_process(parent) + { + m_process.setProcessImpl(processImpl); + } const QtcProcess::TerminalMode m_terminalMode; FilePath m_workingDir; |