forked from qt-creator/qt-creator
ProcessInterface: Fix parent-child relationship
Make ProcessInterface c'tor accept nullptr as parent. Remove parent argument from subclasses of ProcessInterface, as calling setProcessInterface() sets the parent anyway. Fix parent-child relationship in subclasses of ProcessInterface - pass *this as a parent. Change-Id: I3c37c305a87bad0e6d11251ec3db538f3a5dd64b Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -67,7 +67,7 @@ class QTCREATOR_UTILS_EXPORT ProcessInterface : public QObject
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ProcessInterface(QObject *parent) : QObject(parent) {}
|
ProcessInterface(QObject *parent = nullptr) : QObject(parent) {}
|
||||||
|
|
||||||
virtual void start() { defaultStart(); }
|
virtual void start() { defaultStart(); }
|
||||||
virtual void terminate() = 0;
|
virtual void terminate() = 0;
|
||||||
|
@@ -218,9 +218,8 @@ public:
|
|||||||
class TerminalImpl : public ProcessInterface
|
class TerminalImpl : public ProcessInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TerminalImpl(QObject *parent, ProcessImpl processImpl, TerminalMode terminalMode)
|
TerminalImpl(ProcessImpl processImpl, TerminalMode terminalMode)
|
||||||
: ProcessInterface(parent)
|
: m_terminal(this, processImpl, terminalMode)
|
||||||
, m_terminal(this, processImpl, terminalMode)
|
|
||||||
{
|
{
|
||||||
connect(&m_terminal, &Internal::TerminalProcess::started,
|
connect(&m_terminal, &Internal::TerminalProcess::started,
|
||||||
this, &ProcessInterface::started);
|
this, &ProcessInterface::started);
|
||||||
@@ -274,9 +273,7 @@ private:
|
|||||||
class QProcessImpl : public ProcessInterface
|
class QProcessImpl : public ProcessInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
QProcessImpl(QObject *parent)
|
QProcessImpl() : m_process(new ProcessHelper(this))
|
||||||
: ProcessInterface(parent)
|
|
||||||
, m_process(new ProcessHelper(parent))
|
|
||||||
{
|
{
|
||||||
connect(m_process, &QProcess::started,
|
connect(m_process, &QProcess::started,
|
||||||
this, &QProcessImpl::handleStarted);
|
this, &QProcessImpl::handleStarted);
|
||||||
@@ -368,10 +365,9 @@ class ProcessLauncherImpl : public ProcessInterface
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
ProcessLauncherImpl(QObject *parent)
|
ProcessLauncherImpl() : m_token(uniqueToken())
|
||||||
: ProcessInterface(parent), m_token(uniqueToken())
|
|
||||||
{
|
{
|
||||||
m_handle = LauncherInterface::registerHandle(parent, token());
|
m_handle = LauncherInterface::registerHandle(this, token());
|
||||||
connect(m_handle, &CallerHandle::errorOccurred,
|
connect(m_handle, &CallerHandle::errorOccurred,
|
||||||
this, &ProcessInterface::errorOccurred);
|
this, &ProcessInterface::errorOccurred);
|
||||||
connect(m_handle, &CallerHandle::started,
|
connect(m_handle, &CallerHandle::started,
|
||||||
@@ -459,10 +455,10 @@ public:
|
|||||||
? defaultProcessImpl() : m_setup.m_processImpl;
|
? defaultProcessImpl() : m_setup.m_processImpl;
|
||||||
|
|
||||||
if (m_setup.m_terminalMode != TerminalMode::Off)
|
if (m_setup.m_terminalMode != TerminalMode::Off)
|
||||||
return new TerminalImpl(parent(), impl, m_setup.m_terminalMode);
|
return new TerminalImpl(impl, m_setup.m_terminalMode);
|
||||||
else if (impl == ProcessImpl::QProcess)
|
else if (impl == ProcessImpl::QProcess)
|
||||||
return new QProcessImpl(parent());
|
return new QProcessImpl();
|
||||||
return new ProcessLauncherImpl(parent());
|
return new ProcessLauncherImpl();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setProcessInterface(ProcessInterface *process)
|
void setProcessInterface(ProcessInterface *process)
|
||||||
|
Reference in New Issue
Block a user