forked from qt-creator/qt-creator
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:
@@ -24,7 +24,6 @@ enum class ProcessImpl {
|
||||
|
||||
enum class TerminalMode {
|
||||
Off,
|
||||
Pty,
|
||||
Run,
|
||||
Debug,
|
||||
Suspend,
|
||||
|
@@ -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;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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();
|
||||
|
@@ -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");
|
||||
|
@@ -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);
|
||||
|
Reference in New Issue
Block a user