From d502f78c4f25f75b5f7f8512b5ed51c50560388b Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 21 Feb 2022 15:52:03 +0100 Subject: [PATCH] TerminalImpl: Drop ProcessImpl and Terminal mode from c'tor Change-Id: I0571eabb1a20389055a8e98dd942776b3d054981 Reviewed-by: hjk --- src/libs/utils/qtcprocess.cpp | 13 +++++++------ src/libs/utils/terminalprocess.cpp | 26 ++++++++++++++++---------- src/libs/utils/terminalprocess_p.h | 5 ++++- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 6c15cf8c666..c33a93d1857 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -218,8 +218,7 @@ public: class TerminalImpl : public ProcessInterface { public: - TerminalImpl(ProcessImpl processImpl, TerminalMode terminalMode) - : m_terminal(this, processImpl, terminalMode) + TerminalImpl() : m_terminal(this) { connect(&m_terminal, &Internal::TerminalProcess::started, this, &ProcessInterface::started); @@ -237,6 +236,8 @@ public: void start() override { + m_terminal.setProcessImpl(m_setup.m_processImpl); + m_terminal.setTerminalMode(m_setup.m_terminalMode); m_terminal.setAbortOnMetaChars(m_setup.m_abortOnMetaChars); m_terminal.setCommand(m_setup.m_commandLine); m_terminal.setWorkingDirectory(m_setup.m_workingDirectory); @@ -451,12 +452,12 @@ public: ProcessInterface *createProcessInterface() { + if (m_setup.m_terminalMode != TerminalMode::Off) + return new TerminalImpl(); + const ProcessImpl impl = m_setup.m_processImpl == ProcessImpl::Default ? defaultProcessImpl() : m_setup.m_processImpl; - - if (m_setup.m_terminalMode != TerminalMode::Off) - return new TerminalImpl(impl, m_setup.m_terminalMode); - else if (impl == ProcessImpl::QProcess) + if (impl == ProcessImpl::QProcess) return new QProcessImpl(); return new ProcessLauncherImpl(); } diff --git a/src/libs/utils/terminalprocess.cpp b/src/libs/utils/terminalprocess.cpp index eaec73de6dd..d57d9cb72b4 100644 --- a/src/libs/utils/terminalprocess.cpp +++ b/src/libs/utils/terminalprocess.cpp @@ -123,14 +123,10 @@ static QString msgCannotExecute(const QString & p, const QString &why) class TerminalProcessPrivate { public: - TerminalProcessPrivate(QObject *parent, ProcessImpl processImpl, TerminalMode terminalMode) - : m_terminalMode(terminalMode) - , m_process(parent) - { - m_process.setProcessImpl(processImpl); - } + TerminalProcessPrivate(QObject *parent) + : m_process(parent) {} - const TerminalMode m_terminalMode; + TerminalMode m_terminalMode = TerminalMode::On; FilePath m_workingDir; Environment m_environment; qint64 m_processId = 0; @@ -160,9 +156,8 @@ public: #endif }; -TerminalProcess::TerminalProcess(QObject *parent, ProcessImpl processImpl, - TerminalMode terminalMode) - : QObject(parent), d(new TerminalProcessPrivate(this, processImpl, terminalMode)) +TerminalProcess::TerminalProcess(QObject *parent) + : QObject(parent), d(new TerminalProcessPrivate(this)) { connect(&d->m_stubServer, &QLocalServer::newConnection, this, &TerminalProcess::stubConnectionAvailable); @@ -176,6 +171,17 @@ TerminalProcess::~TerminalProcess() delete d; } +void TerminalProcess::setProcessImpl(ProcessImpl processImpl) +{ + d->m_process.setProcessImpl(processImpl); +} + +void TerminalProcess::setTerminalMode(TerminalMode mode) +{ + QTC_ASSERT(mode != TerminalMode::Off, return); + d->m_terminalMode = mode; +} + void TerminalProcess::setCommand(const CommandLine &command) { d->m_commandLine = command; diff --git a/src/libs/utils/terminalprocess_p.h b/src/libs/utils/terminalprocess_p.h index 5534c1a55a1..5352485aafc 100644 --- a/src/libs/utils/terminalprocess_p.h +++ b/src/libs/utils/terminalprocess_p.h @@ -41,9 +41,12 @@ class TerminalProcess : public QObject { Q_OBJECT public: - explicit TerminalProcess(QObject *parent, ProcessImpl processImpl, TerminalMode terminalMode); + explicit TerminalProcess(QObject *parent); ~TerminalProcess() override; + void setProcessImpl(ProcessImpl processImpl); + void setTerminalMode(TerminalMode mode); + void setCommand(const CommandLine &command); const CommandLine &commandLine() const;