QtcProcess: Introduce PtyData

That's going to be used by PtyProcessImpl.

Change-Id: Ifc1a7886ceed73272c9e415414db49452175a334
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Jarek Kobus
2023-03-02 14:03:54 +01:00
committed by Marcus Tillmanns
parent 81748fa00b
commit 8b09ad8898
7 changed files with 57 additions and 1 deletions

View File

@@ -7,6 +7,17 @@
namespace Utils {
namespace Pty {
void Data::resize(const QSize &size)
{
m_size = size;
if (m_data->m_handler)
m_data->m_handler(size);
}
} // namespace Pty
/*!
* \brief controlSignalToInt
* \param controlSignal

View File

@@ -10,11 +10,39 @@
#include "processenums.h"
#include <QProcess>
#include <QSize>
namespace Utils {
namespace Internal { class QtcProcessPrivate; }
namespace Pty {
using ResizeHandler = std::function<void(const QSize &)>;
class QTCREATOR_UTILS_EXPORT SharedData
{
public:
ResizeHandler m_handler;
};
class QTCREATOR_UTILS_EXPORT Data
{
public:
Data() : m_data(new SharedData) {}
void setResizeHandler(const ResizeHandler &handler) { m_data->m_handler = handler; }
QSize size() const { return m_size; }
void resize(const QSize &size);
private:
QSize m_size{80, 60};
QSharedPointer<SharedData> m_data;
};
} // namespace Pty
class QTCREATOR_UTILS_EXPORT ProcessSetupData
{
public:
@@ -22,6 +50,7 @@ public:
ProcessMode m_processMode = ProcessMode::Reader;
TerminalMode m_terminalMode = TerminalMode::Off;
Pty::Data m_ptyData;
CommandLine m_commandLine;
FilePath m_workingDirectory;
Environment m_environment;

View File

@@ -13,7 +13,6 @@
#include "processutils.h"
#include "stringutils.h"
#include "terminalhooks.h"
#include "terminalprocess_p.h"
#include "threadutils.h"
#include "utilstr.h"
@@ -1026,6 +1025,16 @@ void QtcProcess::setProcessImpl(ProcessImpl processImpl)
d->m_setup.m_processImpl = processImpl;
}
void QtcProcess::setPtyData(const Pty::Data &data)
{
d->m_setup.m_ptyData = data;
}
Pty::Data QtcProcess::ptyData() const
{
return d->m_setup.m_ptyData;
}
ProcessMode QtcProcess::processMode() const
{
return d->m_setup.m_processMode;

View File

@@ -21,6 +21,7 @@ class tst_QtcProcess;
namespace Utils {
namespace Internal { class QtcProcessPrivate; }
namespace Pty { class Data; }
class Environment;
class DeviceProcessHooks;
@@ -76,6 +77,9 @@ public:
void setProcessImpl(ProcessImpl processImpl);
void setPtyData(const Pty::Data &data);
Pty::Data ptyData() const;
void setTerminalMode(TerminalMode mode);
TerminalMode terminalMode() const;
bool usesTerminal() const { return terminalMode() != TerminalMode::Off; }

View File

@@ -284,6 +284,7 @@ void DockerProcessImpl::start()
m_process.setProcessImpl(m_setup.m_processImpl);
m_process.setProcessMode(m_setup.m_processMode);
m_process.setTerminalMode(m_setup.m_terminalMode);
m_process.setPtyData(m_setup.m_ptyData);
m_process.setReaperTimeout(m_setup.m_reaperTimeout);
m_process.setWriteData(m_setup.m_writeData);
m_process.setProcessChannelMode(m_setup.m_processChannelMode);

View File

@@ -785,6 +785,7 @@ void SshProcessInterfacePrivate::doStart()
m_process.setProcessImpl(q->m_setup.m_processImpl);
m_process.setProcessMode(q->m_setup.m_processMode);
m_process.setTerminalMode(q->m_setup.m_terminalMode);
m_process.setPtyData(q->m_setup.m_ptyData);
m_process.setReaperTimeout(q->m_setup.m_reaperTimeout);
m_process.setWriteData(q->m_setup.m_writeData);
// TODO: what about other fields from m_setup?

View File

@@ -12,6 +12,7 @@
#include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/hostosinfo.h>
#include <utils/processinterface.h>
#include <utils/stringutils.h>
#include <ptyqt.h>