diff --git a/src/libs/utils/processinterface.cpp b/src/libs/utils/processinterface.cpp index 9e13494cda1..a5e60c97a31 100644 --- a/src/libs/utils/processinterface.cpp +++ b/src/libs/utils/processinterface.cpp @@ -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 diff --git a/src/libs/utils/processinterface.h b/src/libs/utils/processinterface.h index d398d8fe139..210df7d268a 100644 --- a/src/libs/utils/processinterface.h +++ b/src/libs/utils/processinterface.h @@ -10,11 +10,39 @@ #include "processenums.h" #include +#include namespace Utils { namespace Internal { class QtcProcessPrivate; } +namespace Pty { + +using ResizeHandler = std::function; + +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 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; diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 096f6445617..42a29366bd9 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -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; diff --git a/src/libs/utils/qtcprocess.h b/src/libs/utils/qtcprocess.h index 67898ba855a..72181051491 100644 --- a/src/libs/utils/qtcprocess.h +++ b/src/libs/utils/qtcprocess.h @@ -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; } diff --git a/src/plugins/docker/dockerdevice.cpp b/src/plugins/docker/dockerdevice.cpp index b0e0c281258..9c6bf8c9bd8 100644 --- a/src/plugins/docker/dockerdevice.cpp +++ b/src/plugins/docker/dockerdevice.cpp @@ -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); diff --git a/src/plugins/remotelinux/linuxdevice.cpp b/src/plugins/remotelinux/linuxdevice.cpp index 781147a1e2e..6d611bf7b83 100644 --- a/src/plugins/remotelinux/linuxdevice.cpp +++ b/src/plugins/remotelinux/linuxdevice.cpp @@ -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? diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index 5f6b8f079b0..94cff232d16 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -12,6 +12,7 @@ #include #include #include +#include #include #include