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;
}
void ActionsFilter::accept(const LocatorFilterEntry &selection, QString *newText,
int *selectionStart, int *selectionLength) const
LocatorFilterEntry::Acceptor ActionsFilter::acceptor(const ActionFilterEntryData &data) const
{
static const int maxHistorySize = 30;
Q_UNUSED(newText)
Q_UNUSED(selectionStart)
Q_UNUSED(selectionLength)
auto data = selection.internalData.value<ActionFilterEntryData>();
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);
}

View File

@@ -36,13 +36,12 @@ public:
QList<LocatorFilterEntry> matchesFor(QFutureInterface<LocatorFilterEntry> &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<const QMenu *> &processedMenus);