diff --git a/src/libs/solutions/terminal/terminalsurface.cpp b/src/libs/solutions/terminal/terminalsurface.cpp index 0c6d88f62ec..40dc2809c0d 100644 --- a/src/libs/solutions/terminal/terminalsurface.cpp +++ b/src/libs/solutions/terminal/terminalsurface.cpp @@ -120,6 +120,7 @@ struct TerminalSurfacePrivate }; m_vtermScreenCallbacks.sb_clear = [](void *user) { auto p = static_cast(user); + emit p->q->cleared(); return p->sb_clear(); }; m_vtermScreenCallbacks.bell = [](void *user) { diff --git a/src/libs/solutions/terminal/terminalsurface.h b/src/libs/solutions/terminal/terminalsurface.h index a8cc12fa4b0..6700156da9b 100644 --- a/src/libs/solutions/terminal/terminalsurface.h +++ b/src/libs/solutions/terminal/terminalsurface.h @@ -111,6 +111,7 @@ signals: void cursorChanged(Cursor oldCursor, Cursor newCursor); void altscreenChanged(bool altScreen); void unscroll(); + void cleared(); private: std::unique_ptr d; diff --git a/src/libs/solutions/terminal/terminalview.cpp b/src/libs/solutions/terminal/terminalview.cpp index 7ed75159a54..1010e546d97 100644 --- a/src/libs/solutions/terminal/terminalview.cpp +++ b/src/libs/solutions/terminal/terminalview.cpp @@ -176,6 +176,7 @@ TerminalSurface *TerminalView::surface() const void TerminalView::setupSurface() { d->m_surface = std::make_unique(QSize{80, 60}); + connect(d->m_surface.get(), &TerminalSurface::cleared, this, &TerminalView::cleared); if (d->m_surfaceIntegration) d->m_surface->setSurfaceIntegration(d->m_surfaceIntegration); diff --git a/src/libs/solutions/terminal/terminalview.h b/src/libs/solutions/terminal/terminalview.h index 6e0c55d06f8..fcc5994a75e 100644 --- a/src/libs/solutions/terminal/terminalview.h +++ b/src/libs/solutions/terminal/terminalview.h @@ -224,6 +224,9 @@ protected: private: void scheduleViewportUpdate(); +signals: + void cleared(); + private: std::unique_ptr d; }; diff --git a/src/plugins/coreplugin/terminal/searchableterminal.cpp b/src/plugins/coreplugin/terminal/searchableterminal.cpp index 5022be6b19c..66626523464 100644 --- a/src/plugins/coreplugin/terminal/searchableterminal.cpp +++ b/src/plugins/coreplugin/terminal/searchableterminal.cpp @@ -47,6 +47,18 @@ void TerminalSearch::setSearchString(const QString &searchString, FindFlags find } } +void TerminalSearch::clearAndSearchAgain() +{ + if (!m_hits.isEmpty()) { + m_hits.clear(); + m_currentHit = -1; + emit hitsChanged(); + emit currentHitChanged(); + } + + m_debounceTimer.start(); +} + void TerminalSearch::nextHit() { if (m_hits.isEmpty()) @@ -67,13 +79,6 @@ void TerminalSearch::previousHit() void TerminalSearch::updateHits() { - if (!m_hits.isEmpty()) { - m_hits.clear(); - m_currentHit = -1; - emit hitsChanged(); - emit currentHitChanged(); - } - m_debounceTimer.start(); } @@ -282,6 +287,10 @@ SearchableTerminal::SearchableTerminal(QWidget *parent) m_aggregate->add(this); surfaceChanged(); + + connect(this, &TerminalSolution::TerminalView::cleared, this, [this] { + m_search->clearAndSearchAgain(); + }); } SearchableTerminal::~SearchableTerminal() = default; diff --git a/src/plugins/coreplugin/terminal/searchableterminal.h b/src/plugins/coreplugin/terminal/searchableterminal.h index d1747fd99b2..958dac3bac0 100644 --- a/src/plugins/coreplugin/terminal/searchableterminal.h +++ b/src/plugins/coreplugin/terminal/searchableterminal.h @@ -25,6 +25,7 @@ public: void setCurrentSelection(std::optional selection); void setSearchString(const QString &searchString, Utils::FindFlags findFlags); + void clearAndSearchAgain(); void nextHit(); void previousHit();