diff --git a/src/plugins/coreplugin/actionsfilter.cpp b/src/plugins/coreplugin/actionsfilter.cpp index 9aaf5a1db74..b3ef46ca543 100644 --- a/src/plugins/coreplugin/actionsfilter.cpp +++ b/src/plugins/coreplugin/actionsfilter.cpp @@ -168,15 +168,12 @@ QList ActionsFilter::matchesFor(QFutureInterface(); - if (data.action) { + return [this, data] { + if (!data.action) + return AcceptResult(); m_lastTriggered.removeAll(data); m_lastTriggered.prepend(data); QMetaObject::invokeMethod(data.action, [action = data.action] { @@ -185,7 +182,8 @@ void ActionsFilter::accept(const LocatorFilterEntry &selection, QString *newText }, Qt::QueuedConnection); if (m_lastTriggered.size() > maxHistorySize) m_lastTriggered.resize(maxHistorySize); - } + return AcceptResult(); + }; } static QString actionText(QAction *action) @@ -214,9 +212,9 @@ void ActionsFilter::collectEntriesForAction(QAction *action, collectEntriesForAction(menuAction, menuPath, processedMenus); } } else if (!text.isEmpty()) { - const ActionFilterEntryData data{action, {}}; - LocatorFilterEntry filterEntry(this, text); - filterEntry.internalData = QVariant::fromValue(data); + LocatorFilterEntry filterEntry; + filterEntry.displayName = text; + filterEntry.acceptor = acceptor({action, {}}); filterEntry.displayIcon = action->icon(); filterEntry.extraInfo = path.join(" > "); updateEntry(action, filterEntry); @@ -243,9 +241,9 @@ void ActionsFilter::collectEntriesForCommands() const QString identifier = command->id().toString(); const QStringList path = identifier.split(QLatin1Char('.')); - const ActionFilterEntryData data{}; - LocatorFilterEntry filterEntry(this, text); - filterEntry.internalData = QVariant::fromValue(ActionFilterEntryData{action, command->id()}); + LocatorFilterEntry filterEntry; + filterEntry.displayName = text; + filterEntry.acceptor = acceptor({action, command->id()}); filterEntry.displayIcon = action->icon(); filterEntry.displayExtra = command->keySequence().toString(QKeySequence::NativeText); if (path.size() >= 2) @@ -263,9 +261,9 @@ void ActionsFilter::collectEntriesForLastTriggered() } if (!data.action || !m_enabledActions.contains(data.action)) continue; - const QString text = actionText(data.action); - LocatorFilterEntry filterEntry(this, text); - filterEntry.internalData = QVariant::fromValue(data); + LocatorFilterEntry filterEntry; + filterEntry.displayName = actionText(data.action); + filterEntry.acceptor = acceptor(data); filterEntry.displayIcon = data.action->icon(); updateEntry(data.action, filterEntry); } diff --git a/src/plugins/coreplugin/actionsfilter.h b/src/plugins/coreplugin/actionsfilter.h index 50a993ad013..3a945c26f9c 100644 --- a/src/plugins/coreplugin/actionsfilter.h +++ b/src/plugins/coreplugin/actionsfilter.h @@ -36,13 +36,12 @@ public: QList matchesFor(QFutureInterface &future, const QString &entry) override; - void accept(const LocatorFilterEntry &selection, QString *newText, - int *selectionStart, int *selectionLength) const override; void prepareSearch(const QString &entry) override; private: void saveState(QJsonObject &object) const override; void restoreState(const QJsonObject &object) override; + LocatorFilterEntry::Acceptor acceptor(const ActionFilterEntryData &data) const; void collectEntriesForAction(QAction *action, const QStringList &path, QList &processedMenus);