From 9a8a7a88a607ff2f96426a8d9a1263984e6236a5 Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 7 Jun 2021 13:17:25 +0200 Subject: [PATCH] BaseFileFind: Centralize waiting for search to finish Instead of adding a FutureSynchronizer to all backends, we can use a central one in BaseFileFind. Amends 269f15df6bdcf5aca7f1ac26141150dd482104fa Change-Id: Iad0145317b53a95b686c091017b8197d759dc253 Reviewed-by: Qt CI Bot Reviewed-by: Orgad Shaneh Reviewed-by: Jarek Kobus --- src/plugins/git/gitgrep.cpp | 5 +---- src/plugins/git/gitgrep.h | 2 -- .../findinfilessilversearcher.cpp | 9 +++++---- .../silversearcher/findinfilessilversearcher.h | 3 +-- src/plugins/texteditor/basefilefind.cpp | 18 ++++++++++++------ 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/src/plugins/git/gitgrep.cpp b/src/plugins/git/gitgrep.cpp index c7289f89045..73af5db9590 100644 --- a/src/plugins/git/gitgrep.cpp +++ b/src/plugins/git/gitgrep.cpp @@ -235,7 +235,6 @@ static bool isGitDirectory(const QString &path) GitGrep::GitGrep(GitClient *client) : m_client(client) { - m_futureSynchronizer.setCancelOnWait(true); m_widget = new QWidget; auto layout = new QHBoxLayout(m_widget); layout->setContentsMargins(0, 0, 0, 0); @@ -305,9 +304,7 @@ void GitGrep::writeSettings(QSettings *settings) const QFuture GitGrep::executeSearch(const TextEditor::FileFindParameters ¶meters, TextEditor::BaseFileFind * /*baseFileFind*/) { - auto future = Utils::runAsync(GitGrepRunner(parameters)); - m_futureSynchronizer.addFuture(future); - return future; + return Utils::runAsync(GitGrepRunner(parameters)); } IEditor *GitGrep::openEditor(const SearchResultItem &item, diff --git a/src/plugins/git/gitgrep.h b/src/plugins/git/gitgrep.h index 5a734bd648e..a24bfcfde09 100644 --- a/src/plugins/git/gitgrep.h +++ b/src/plugins/git/gitgrep.h @@ -26,7 +26,6 @@ #pragma once #include -#include #include @@ -63,7 +62,6 @@ private: QWidget *m_widget; Utils::FancyLineEdit *m_treeLineEdit; QCheckBox *m_recurseSubmodules = nullptr; - Utils::FutureSynchronizer m_futureSynchronizer; }; } // namespace Internal diff --git a/src/plugins/silversearcher/findinfilessilversearcher.cpp b/src/plugins/silversearcher/findinfilessilversearcher.cpp index bcd1abaf084..91670f28035 100644 --- a/src/plugins/silversearcher/findinfilessilversearcher.cpp +++ b/src/plugins/silversearcher/findinfilessilversearcher.cpp @@ -163,7 +163,6 @@ FindInFilesSilverSearcher::FindInFilesSilverSearcher(QObject *parent) , m_path("ag") , m_toolName("SilverSearcher") { - m_futureSynchronizer.setCancelOnWait(true); m_widget = new QWidget; auto layout = new QHBoxLayout(m_widget); layout->setContentsMargins(0, 0, 0, 0); @@ -183,6 +182,10 @@ FindInFilesSilverSearcher::FindInFilesSilverSearcher(QObject *parent) } } +FindInFilesSilverSearcher::~FindInFilesSilverSearcher() +{ +} + QVariant FindInFilesSilverSearcher::parameters() const { SilverSearcherSearchOptions silverSearcherSearchOptions; @@ -213,9 +216,7 @@ void FindInFilesSilverSearcher::writeSettings(QSettings *settings) const QFuture FindInFilesSilverSearcher::executeSearch( const FileFindParameters ¶meters, BaseFileFind * /*baseFileFind*/) { - auto future = Utils::runAsync(runSilverSeacher, parameters); - m_futureSynchronizer.addFuture(future); - return future; + return Utils::runAsync(runSilverSeacher, parameters); } IEditor *FindInFilesSilverSearcher::openEditor(const SearchResultItem & /*item*/, diff --git a/src/plugins/silversearcher/findinfilessilversearcher.h b/src/plugins/silversearcher/findinfilessilversearcher.h index 76be55390c1..798b7f9fd90 100644 --- a/src/plugins/silversearcher/findinfilessilversearcher.h +++ b/src/plugins/silversearcher/findinfilessilversearcher.h @@ -27,7 +27,6 @@ #include #include -#include #include @@ -45,6 +44,7 @@ class FindInFilesSilverSearcher : public TextEditor::SearchEngine public: explicit FindInFilesSilverSearcher(QObject *parent); + ~FindInFilesSilverSearcher() override; // TextEditor::FileFindExtension QString title() const override; @@ -66,7 +66,6 @@ private: QPointer m_searchOptionsLineEdit; QString m_path; QString m_toolName; - Utils::FutureSynchronizer m_futureSynchronizer; }; } // namespace SilverSearcher diff --git a/src/plugins/texteditor/basefilefind.cpp b/src/plugins/texteditor/basefilefind.cpp index ccbe2e13638..ff4daf9cc2c 100644 --- a/src/plugins/texteditor/basefilefind.cpp +++ b/src/plugins/texteditor/basefilefind.cpp @@ -27,18 +27,19 @@ #include "textdocument.h" #include -#include -#include -#include #include #include #include #include -#include +#include +#include +#include #include +#include #include #include #include +#include #include #include @@ -111,8 +112,11 @@ public: class BaseFileFindPrivate { public: + BaseFileFindPrivate() { m_futureSynchronizer.setCancelOnWait(true); } + QPointer m_currentFindSupport; + Utils::FutureSynchronizer m_futureSynchronizer; QLabel *m_resultLabel = nullptr; // models in native path format QStringListModel m_filterStrings; @@ -308,8 +312,10 @@ void BaseFileFind::runSearch(SearchResult *search) connect(watcher, &QFutureWatcherBase::finished, search, [watcher, search]() { search->finishSearch(watcher->isCanceled()); }); - watcher->setFuture(executeSearch(parameters)); - FutureProgress *progress = ProgressManager::addTask(QFuture(watcher->future()), + QFuture future = executeSearch(parameters); + watcher->setFuture(future); + d->m_futureSynchronizer.addFuture(future); + FutureProgress *progress = ProgressManager::addTask(QFuture(future), tr("Searching"), Constants::TASK_SEARCH); connect(search, &SearchResult::countChanged, progress, [progress](int c) {