Terminal: Fix crash when reusing TerminalWidget

Change-Id: I9d30df1abbecabd3909078e0a609fe5ba96769ae
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
This commit is contained in:
Marcus Tillmanns
2023-03-28 10:48:59 +02:00
parent 0015c666d2
commit 94c4800ad8
2 changed files with 6 additions and 3 deletions

View File

@@ -131,7 +131,6 @@ TerminalWidget::~TerminalWidget()
// The Aggregate stuff tries to do clever deletion of the children, but we // The Aggregate stuff tries to do clever deletion of the children, but we
// we don't want that. // we don't want that.
m_aggregate->remove(this); m_aggregate->remove(this);
m_aggregate->remove(m_search.get());
} }
void TerminalWidget::setupPty() void TerminalWidget::setupPty()
@@ -279,7 +278,10 @@ void TerminalWidget::setupSurface()
{ {
m_shellIntegration.reset(new ShellIntegration()); m_shellIntegration.reset(new ShellIntegration());
m_surface = std::make_unique<Internal::TerminalSurface>(QSize{80, 60}, m_shellIntegration.get()); m_surface = std::make_unique<Internal::TerminalSurface>(QSize{80, 60}, m_shellIntegration.get());
m_search = std::make_unique<TerminalSearch>(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::hitsChanged, this, &TerminalWidget::updateViewport);
connect(m_search.get(), &TerminalSearch::currentHitChanged, this, [this] { connect(m_search.get(), &TerminalSearch::currentHitChanged, this, [this] {

View File

@@ -217,7 +217,8 @@ private:
Utils::FilePath m_cwd; Utils::FilePath m_cwd;
Utils::CommandLine m_currentCommand; Utils::CommandLine m_currentCommand;
std::unique_ptr<TerminalSearch> m_search; using TerminalSearchPtr = std::unique_ptr<TerminalSearch, std::function<void(TerminalSearch *)>>;
TerminalSearchPtr m_search;
Aggregation::Aggregate *m_aggregate{nullptr}; Aggregation::Aggregate *m_aggregate{nullptr};
SearchHit m_lastSelectedHit{}; SearchHit m_lastSelectedHit{};