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 {
Off,
Pty,
Run,
Debug,
Suspend,

View File

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

View File

@@ -310,7 +310,7 @@ private:
class PtyProcessImpl final : public DefaultImpl
{
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
{
@@ -338,7 +338,8 @@ public:
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)
m_ptyProcess->resize(size.width(), size.height());
});
@@ -357,8 +358,8 @@ public:
arguments,
m_setup.m_workingDirectory.path(),
m_setup.m_environment.toProcessEnvironment().toStringList(),
m_setup.m_ptyData.size().width(),
m_setup.m_ptyData.size().height());
m_setup.m_ptyData->size().width(),
m_setup.m_ptyData->size().height());
if (!startResult) {
const ProcessResultData result = {-1,
@@ -725,16 +726,16 @@ public:
ProcessInterface *createProcessInterface()
{
if (m_setup.m_terminalMode == TerminalMode::Pty)
return new PtyProcessImpl();
if (m_setup.m_ptyData)
return new PtyProcessImpl;
if (m_setup.m_terminalMode != TerminalMode::Off)
return Terminal::Hooks::instance().createTerminalProcessInterfaceHook()();
const ProcessImpl impl = m_setup.m_processImpl == ProcessImpl::Default
? defaultProcessImpl() : m_setup.m_processImpl;
if (impl == ProcessImpl::QProcess)
return new QProcessImpl();
return new ProcessLauncherImpl();
return new QProcessImpl;
return new ProcessLauncherImpl;
}
void setProcessInterface(ProcessInterface *process)
@@ -1123,12 +1124,12 @@ void QtcProcess::setProcessImpl(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;
}
Pty::Data QtcProcess::ptyData() const
std::optional<Pty::Data> QtcProcess::ptyData() const
{
return d->m_setup.m_ptyData;
}

View File

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

View File

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

View File

@@ -535,7 +535,7 @@ QString LinuxProcessInterface::fullCommandLine(const CommandLine &commandLine) c
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);
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);
});
if (m_setup.m_terminalMode == TerminalMode::Off)
if (m_setup.m_terminalMode == TerminalMode::Off && !m_setup.m_ptyData)
cmd.addArg("exec");
if (!commandLine.isEmpty())
@@ -555,7 +555,7 @@ void LinuxProcessInterface::handleStarted(qint64 processId)
{
// Don't emit started() when terminal is off,
// 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;
m_pidParsed = true;
@@ -740,7 +740,7 @@ CommandLine SshProcessInterfacePrivate::fullLocalCommandLine() const
if (!m_sshParameters.x11DisplayName.isEmpty())
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("-q");

View File

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