From 02d9a9b7b7f8906828dc0835c2a57ced9ca55bd5 Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 21 Feb 2022 13:14:43 +0100 Subject: [PATCH] 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 --- src/libs/utils/processinterface.h | 2 +- src/libs/utils/qtcprocess.cpp | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/libs/utils/processinterface.h b/src/libs/utils/processinterface.h index 3b5e360e455..7b2999c69c4 100644 --- a/src/libs/utils/processinterface.h +++ b/src/libs/utils/processinterface.h @@ -67,7 +67,7 @@ class QTCREATOR_UTILS_EXPORT ProcessInterface : public QObject Q_OBJECT public: - ProcessInterface(QObject *parent) : QObject(parent) {} + ProcessInterface(QObject *parent = nullptr) : QObject(parent) {} virtual void start() { defaultStart(); } virtual void terminate() = 0; diff --git a/src/libs/utils/qtcprocess.cpp b/src/libs/utils/qtcprocess.cpp index 91fa2f84b85..6c15cf8c666 100644 --- a/src/libs/utils/qtcprocess.cpp +++ b/src/libs/utils/qtcprocess.cpp @@ -218,9 +218,8 @@ public: class TerminalImpl : public ProcessInterface { public: - TerminalImpl(QObject *parent, ProcessImpl processImpl, TerminalMode terminalMode) - : ProcessInterface(parent) - , m_terminal(this, processImpl, terminalMode) + TerminalImpl(ProcessImpl processImpl, TerminalMode terminalMode) + : m_terminal(this, processImpl, terminalMode) { connect(&m_terminal, &Internal::TerminalProcess::started, this, &ProcessInterface::started); @@ -274,9 +273,7 @@ private: class QProcessImpl : public ProcessInterface { public: - QProcessImpl(QObject *parent) - : ProcessInterface(parent) - , m_process(new ProcessHelper(parent)) + QProcessImpl() : m_process(new ProcessHelper(this)) { connect(m_process, &QProcess::started, this, &QProcessImpl::handleStarted); @@ -368,10 +365,9 @@ class ProcessLauncherImpl : public ProcessInterface { Q_OBJECT public: - ProcessLauncherImpl(QObject *parent) - : ProcessInterface(parent), m_token(uniqueToken()) + ProcessLauncherImpl() : m_token(uniqueToken()) { - m_handle = LauncherInterface::registerHandle(parent, token()); + m_handle = LauncherInterface::registerHandle(this, token()); connect(m_handle, &CallerHandle::errorOccurred, this, &ProcessInterface::errorOccurred); connect(m_handle, &CallerHandle::started, @@ -459,10 +455,10 @@ public: ? defaultProcessImpl() : m_setup.m_processImpl; 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) - return new QProcessImpl(parent()); - return new ProcessLauncherImpl(parent()); + return new QProcessImpl(); + return new ProcessLauncherImpl(); } void setProcessInterface(ProcessInterface *process)