ActionsFilter: Use Acceptor for LocatorFilterEntry

Change-Id: I433f9b44173efd0c66130bcf411cf0ec04816edb
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Jarek Kobus
2023-04-11 22:20:10 +02:00
parent b5d7b24733
commit eb98f2f404
2 changed files with 16 additions and 19 deletions

View File

@@ -168,15 +168,12 @@ QList<LocatorFilterEntry> ActionsFilter::matchesFor(QFutureInterface<LocatorFilt
return result; return result;
} }
void ActionsFilter::accept(const LocatorFilterEntry &selection, QString *newText, LocatorFilterEntry::Acceptor ActionsFilter::acceptor(const ActionFilterEntryData &data) const
int *selectionStart, int *selectionLength) const
{ {
static const int maxHistorySize = 30; static const int maxHistorySize = 30;
Q_UNUSED(newText) return [this, data] {
Q_UNUSED(selectionStart) if (!data.action)
Q_UNUSED(selectionLength) return AcceptResult();
auto data = selection.internalData.value<ActionFilterEntryData>();
if (data.action) {
m_lastTriggered.removeAll(data); m_lastTriggered.removeAll(data);
m_lastTriggered.prepend(data); m_lastTriggered.prepend(data);
QMetaObject::invokeMethod(data.action, [action = data.action] { QMetaObject::invokeMethod(data.action, [action = data.action] {
@@ -185,7 +182,8 @@ void ActionsFilter::accept(const LocatorFilterEntry &selection, QString *newText
}, Qt::QueuedConnection); }, Qt::QueuedConnection);
if (m_lastTriggered.size() > maxHistorySize) if (m_lastTriggered.size() > maxHistorySize)
m_lastTriggered.resize(maxHistorySize); m_lastTriggered.resize(maxHistorySize);
} return AcceptResult();
};
} }
static QString actionText(QAction *action) static QString actionText(QAction *action)
@@ -214,9 +212,9 @@ void ActionsFilter::collectEntriesForAction(QAction *action,
collectEntriesForAction(menuAction, menuPath, processedMenus); collectEntriesForAction(menuAction, menuPath, processedMenus);
} }
} else if (!text.isEmpty()) { } else if (!text.isEmpty()) {
const ActionFilterEntryData data{action, {}}; LocatorFilterEntry filterEntry;
LocatorFilterEntry filterEntry(this, text); filterEntry.displayName = text;
filterEntry.internalData = QVariant::fromValue(data); filterEntry.acceptor = acceptor({action, {}});
filterEntry.displayIcon = action->icon(); filterEntry.displayIcon = action->icon();
filterEntry.extraInfo = path.join(" > "); filterEntry.extraInfo = path.join(" > ");
updateEntry(action, filterEntry); updateEntry(action, filterEntry);
@@ -243,9 +241,9 @@ void ActionsFilter::collectEntriesForCommands()
const QString identifier = command->id().toString(); const QString identifier = command->id().toString();
const QStringList path = identifier.split(QLatin1Char('.')); const QStringList path = identifier.split(QLatin1Char('.'));
const ActionFilterEntryData data{}; LocatorFilterEntry filterEntry;
LocatorFilterEntry filterEntry(this, text); filterEntry.displayName = text;
filterEntry.internalData = QVariant::fromValue(ActionFilterEntryData{action, command->id()}); filterEntry.acceptor = acceptor({action, command->id()});
filterEntry.displayIcon = action->icon(); filterEntry.displayIcon = action->icon();
filterEntry.displayExtra = command->keySequence().toString(QKeySequence::NativeText); filterEntry.displayExtra = command->keySequence().toString(QKeySequence::NativeText);
if (path.size() >= 2) if (path.size() >= 2)
@@ -263,9 +261,9 @@ void ActionsFilter::collectEntriesForLastTriggered()
} }
if (!data.action || !m_enabledActions.contains(data.action)) if (!data.action || !m_enabledActions.contains(data.action))
continue; continue;
const QString text = actionText(data.action); LocatorFilterEntry filterEntry;
LocatorFilterEntry filterEntry(this, text); filterEntry.displayName = actionText(data.action);
filterEntry.internalData = QVariant::fromValue(data); filterEntry.acceptor = acceptor(data);
filterEntry.displayIcon = data.action->icon(); filterEntry.displayIcon = data.action->icon();
updateEntry(data.action, filterEntry); updateEntry(data.action, filterEntry);
} }

View File

@@ -36,13 +36,12 @@ public:
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future, QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &future,
const QString &entry) override; const QString &entry) override;
void accept(const LocatorFilterEntry &selection, QString *newText,
int *selectionStart, int *selectionLength) const override;
void prepareSearch(const QString &entry) override; void prepareSearch(const QString &entry) override;
private: private:
void saveState(QJsonObject &object) const override; void saveState(QJsonObject &object) const override;
void restoreState(const QJsonObject &object) override; void restoreState(const QJsonObject &object) override;
LocatorFilterEntry::Acceptor acceptor(const ActionFilterEntryData &data) const;
void collectEntriesForAction(QAction *action, void collectEntriesForAction(QAction *action,
const QStringList &path, const QStringList &path,
QList<const QMenu *> &processedMenus); QList<const QMenu *> &processedMenus);