From 94c4800ad8b6e591c2167c787efdff59be750f1b Mon Sep 17 00:00:00 2001 From: Marcus Tillmanns Date: Tue, 28 Mar 2023 10:48:59 +0200 Subject: Terminal: Fix crash when reusing TerminalWidget Change-Id: I9d30df1abbecabd3909078e0a609fe5ba96769ae Reviewed-by: Christian Stenger Reviewed-by: --- src/plugins/terminal/terminalwidget.cpp | 6 ++++-- src/plugins/terminal/terminalwidget.h | 3 ++- 2 files changed, 6 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/plugins/terminal/terminalwidget.cpp b/src/plugins/terminal/terminalwidget.cpp index a7b3590a59..65c19576cf 100644 --- a/src/plugins/terminal/terminalwidget.cpp +++ b/src/plugins/terminal/terminalwidget.cpp @@ -131,7 +131,6 @@ TerminalWidget::~TerminalWidget() // The Aggregate stuff tries to do clever deletion of the children, but we // we don't want that. m_aggregate->remove(this); - m_aggregate->remove(m_search.get()); } void TerminalWidget::setupPty() @@ -279,7 +278,10 @@ void TerminalWidget::setupSurface() { m_shellIntegration.reset(new ShellIntegration()); m_surface = std::make_unique(QSize{80, 60}, m_shellIntegration.get()); - m_search = std::make_unique(m_surface.get()); + m_search = TerminalSearchPtr(new TerminalSearch(m_surface.get()), [this](TerminalSearch *p) { + m_aggregate->remove(p); + delete p; + }); connect(m_search.get(), &TerminalSearch::hitsChanged, this, &TerminalWidget::updateViewport); connect(m_search.get(), &TerminalSearch::currentHitChanged, this, [this] { diff --git a/src/plugins/terminal/terminalwidget.h b/src/plugins/terminal/terminalwidget.h index 215d8c6d58..8498f35f83 100644 --- a/src/plugins/terminal/terminalwidget.h +++ b/src/plugins/terminal/terminalwidget.h @@ -217,7 +217,8 @@ private: Utils::FilePath m_cwd; Utils::CommandLine m_currentCommand; - std::unique_ptr m_search; + using TerminalSearchPtr = std::unique_ptr>; + TerminalSearchPtr m_search; Aggregation::Aggregate *m_aggregate{nullptr}; SearchHit m_lastSelectedHit{}; -- cgit v1.2.1