diff --git a/src/plugins/coreplugin/menubarfilter.cpp b/src/plugins/coreplugin/menubarfilter.cpp index 6a82d8676e7..c9ba7428ced 100644 --- a/src/plugins/coreplugin/menubarfilter.cpp +++ b/src/plugins/coreplugin/menubarfilter.cpp @@ -59,17 +59,8 @@ QList MenuBarFilter::matchesFor(QFutureInterface entries; - QString normalized = entry; - normalized.replace(seperatorRegExp, separators.at(0)); - const QStringList entryPath = normalized.split(separators.at(0), QString::SkipEmptyParts); - QVector processedMenus; - for (QAction* action : menuBarActions()) - entries << matchesForAction(action, entryPath, QStringList(), processedMenus); - - return entries; + Q_UNUSED(entry); + return std::move(m_entries); } void MenuBarFilter::accept(LocatorFilterEntry selection, QString *newText, @@ -161,6 +152,15 @@ static void requestMenuUpdate(const QAction* action) void Core::Internal::MenuBarFilter::prepareSearch(const QString &entry) { Q_UNUSED(entry); - for (const QAction *action : menuBarActions()) + static const QString separators = ". >/"; + static const QRegularExpression seperatorRegExp(QString("[%1]").arg(separators)); + QString normalized = entry; + normalized.replace(seperatorRegExp, separators.at(0)); + const QStringList entryPath = normalized.split(separators.at(0), QString::SkipEmptyParts); + m_entries.clear(); + QVector processedMenus; + for (QAction* action : menuBarActions()) { requestMenuUpdate(action); + m_entries << matchesForAction(action, entryPath, QStringList(), processedMenus); + } } diff --git a/src/plugins/coreplugin/menubarfilter.h b/src/plugins/coreplugin/menubarfilter.h index c7b137e6a9f..68f98dddeac 100644 --- a/src/plugins/coreplugin/menubarfilter.h +++ b/src/plugins/coreplugin/menubarfilter.h @@ -53,6 +53,7 @@ private: const QStringList &path, QVector &processedMenus); + QList m_entries; }; } // namespace Internal