QtcProcess: Remove TerminalMode::Pty enum value

Make Pty::Data optional. When set, the PtyProcessImpl
implementation is implied.

Change-Id: I7990e9d9016223e6597d876a5d0c4ed177365874
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Jarek Kobus
2023-03-14 12:10:59 +01:00
parent 666f3258ba
commit a43c20969c
7 changed files with 22 additions and 22 deletions

View File

@@ -24,7 +24,6 @@ enum class ProcessImpl {
enum class TerminalMode { enum class TerminalMode {
Off, Off,
Pty,
Run, Run,
Debug, Debug,
Suspend, Suspend,

View File

@@ -50,7 +50,7 @@ public:
ProcessMode m_processMode = ProcessMode::Reader; ProcessMode m_processMode = ProcessMode::Reader;
TerminalMode m_terminalMode = TerminalMode::Off; TerminalMode m_terminalMode = TerminalMode::Off;
Pty::Data m_ptyData; std::optional<Pty::Data> m_ptyData;
CommandLine m_commandLine; CommandLine m_commandLine;
FilePath m_workingDirectory; FilePath m_workingDirectory;
Environment m_environment; Environment m_environment;

View File

@@ -310,7 +310,7 @@ private:
class PtyProcessImpl final : public DefaultImpl class PtyProcessImpl final : public DefaultImpl
{ {
public: public:
~PtyProcessImpl() { m_setup.m_ptyData.setResizeHandler({}); } ~PtyProcessImpl() { QTC_CHECK(m_setup.m_ptyData); m_setup.m_ptyData->setResizeHandler({}); }
qint64 write(const QByteArray &data) final qint64 write(const QByteArray &data) final
{ {
@@ -338,7 +338,8 @@ public:
void doDefaultStart(const QString &program, const QStringList &arguments) final void doDefaultStart(const QString &program, const QStringList &arguments) final
{ {
m_setup.m_ptyData.setResizeHandler([this](const QSize &size) { QTC_CHECK(m_setup.m_ptyData);
m_setup.m_ptyData->setResizeHandler([this](const QSize &size) {
if (m_ptyProcess) if (m_ptyProcess)
m_ptyProcess->resize(size.width(), size.height()); m_ptyProcess->resize(size.width(), size.height());
}); });
@@ -357,8 +358,8 @@ public:
arguments, arguments,
m_setup.m_workingDirectory.path(), m_setup.m_workingDirectory.path(),
m_setup.m_environment.toProcessEnvironment().toStringList(), m_setup.m_environment.toProcessEnvironment().toStringList(),
m_setup.m_ptyData.size().width(), m_setup.m_ptyData->size().width(),
m_setup.m_ptyData.size().height()); m_setup.m_ptyData->size().height());
if (!startResult) { if (!startResult) {
const ProcessResultData result = {-1, const ProcessResultData result = {-1,
@@ -725,16 +726,16 @@ public:
ProcessInterface *createProcessInterface() ProcessInterface *createProcessInterface()
{ {
if (m_setup.m_terminalMode == TerminalMode::Pty) if (m_setup.m_ptyData)
return new PtyProcessImpl(); return new PtyProcessImpl;
if (m_setup.m_terminalMode != TerminalMode::Off) if (m_setup.m_terminalMode != TerminalMode::Off)
return Terminal::Hooks::instance().createTerminalProcessInterfaceHook()(); return Terminal::Hooks::instance().createTerminalProcessInterfaceHook()();
const ProcessImpl impl = m_setup.m_processImpl == ProcessImpl::Default const ProcessImpl impl = m_setup.m_processImpl == ProcessImpl::Default
? defaultProcessImpl() : m_setup.m_processImpl; ? defaultProcessImpl() : m_setup.m_processImpl;
if (impl == ProcessImpl::QProcess) if (impl == ProcessImpl::QProcess)
return new QProcessImpl(); return new QProcessImpl;
return new ProcessLauncherImpl(); return new ProcessLauncherImpl;
} }
void setProcessInterface(ProcessInterface *process) void setProcessInterface(ProcessInterface *process)
@@ -1123,12 +1124,12 @@ void QtcProcess::setProcessImpl(ProcessImpl processImpl)
d->m_setup.m_processImpl = processImpl; d->m_setup.m_processImpl = processImpl;
} }
void QtcProcess::setPtyData(const Pty::Data &data) void QtcProcess::setPtyData(const std::optional<Pty::Data> &data)
{ {
d->m_setup.m_ptyData = data; d->m_setup.m_ptyData = data;
} }
Pty::Data QtcProcess::ptyData() const std::optional<Pty::Data> QtcProcess::ptyData() const
{ {
return d->m_setup.m_ptyData; return d->m_setup.m_ptyData;
} }

View File

@@ -77,8 +77,8 @@ public:
void setProcessImpl(ProcessImpl processImpl); void setProcessImpl(ProcessImpl processImpl);
void setPtyData(const Pty::Data &data); void setPtyData(const std::optional<Pty::Data> &data);
Pty::Data ptyData() const; std::optional<Pty::Data> ptyData() const;
void setTerminalMode(TerminalMode mode); void setTerminalMode(TerminalMode mode);
TerminalMode terminalMode() const; TerminalMode terminalMode() const;

View File

@@ -304,7 +304,7 @@ void DockerProcessImpl::start()
m_setup.m_workingDirectory, m_setup.m_workingDirectory,
interactive, interactive,
true, true,
m_setup.m_terminalMode == TerminalMode::Pty); m_setup.m_ptyData.has_value());
m_process.setCommand(fullCommandLine); m_process.setCommand(fullCommandLine);
m_process.start(); m_process.start();

View File

@@ -535,7 +535,7 @@ QString LinuxProcessInterface::fullCommandLine(const CommandLine &commandLine) c
cmd.addArgs("&&", CommandLine::Raw); cmd.addArgs("&&", CommandLine::Raw);
} }
if (m_setup.m_terminalMode == TerminalMode::Off) if (m_setup.m_terminalMode == TerminalMode::Off && !m_setup.m_ptyData)
cmd.addArgs(QString("echo ") + s_pidMarker + "$$" + s_pidMarker + " && ", CommandLine::Raw); cmd.addArgs(QString("echo ") + s_pidMarker + "$$" + s_pidMarker + " && ", CommandLine::Raw);
const Environment &env = m_setup.m_environment; const Environment &env = m_setup.m_environment;
@@ -543,7 +543,7 @@ QString LinuxProcessInterface::fullCommandLine(const CommandLine &commandLine) c
cmd.addArgs(key + "='" + env.expandVariables(value) + '\'', CommandLine::Raw); cmd.addArgs(key + "='" + env.expandVariables(value) + '\'', CommandLine::Raw);
}); });
if (m_setup.m_terminalMode == TerminalMode::Off) if (m_setup.m_terminalMode == TerminalMode::Off && !m_setup.m_ptyData)
cmd.addArg("exec"); cmd.addArg("exec");
if (!commandLine.isEmpty()) if (!commandLine.isEmpty())
@@ -555,7 +555,7 @@ void LinuxProcessInterface::handleStarted(qint64 processId)
{ {
// Don't emit started() when terminal is off, // Don't emit started() when terminal is off,
// it's being done later inside handleReadyReadStandardOutput(). // it's being done later inside handleReadyReadStandardOutput().
if (m_setup.m_terminalMode == TerminalMode::Off) if (m_setup.m_terminalMode == TerminalMode::Off && !m_setup.m_ptyData)
return; return;
m_pidParsed = true; m_pidParsed = true;
@@ -740,7 +740,7 @@ CommandLine SshProcessInterfacePrivate::fullLocalCommandLine() const
if (!m_sshParameters.x11DisplayName.isEmpty()) if (!m_sshParameters.x11DisplayName.isEmpty())
cmd.addArg("-X"); cmd.addArg("-X");
if (q->m_setup.m_terminalMode != TerminalMode::Off) if (q->m_setup.m_terminalMode != TerminalMode::Off || q->m_setup.m_ptyData)
cmd.addArg("-tt"); cmd.addArg("-tt");
cmd.addArg("-q"); cmd.addArg("-q");

View File

@@ -126,7 +126,7 @@ void TerminalWidget::setupPty()
env.unset("CLINK_NOAUTORUN"); env.unset("CLINK_NOAUTORUN");
m_process->setProcessMode(ProcessMode::Writer); m_process->setProcessMode(ProcessMode::Writer);
m_process->setTerminalMode(TerminalMode::Pty); m_process->setPtyData(Utils::Pty::Data());
m_process->setCommand(shellCommand); m_process->setCommand(shellCommand);
if (m_openParameters.workingDirectory.has_value()) if (m_openParameters.workingDirectory.has_value())
m_process->setWorkingDirectory(*m_openParameters.workingDirectory); m_process->setWorkingDirectory(*m_openParameters.workingDirectory);
@@ -912,8 +912,8 @@ void TerminalWidget::applySizeChange()
if (newLiveSize.width() <= 0) if (newLiveSize.width() <= 0)
newLiveSize.setWidth(1); newLiveSize.setWidth(1);
if (m_process) if (m_process && m_process->ptyData())
m_process->ptyData().resize(newLiveSize); m_process->ptyData()->resize(newLiveSize);
m_surface->resize(newLiveSize); m_surface->resize(newLiveSize);
flushVTerm(true); flushVTerm(true);