From 1d1a9dde96b0a29ac83996f7b0740db4866d757d Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Fri, 5 Jun 2026 17:08:58 +0800 Subject: [PATCH] feat(shortcut): support multi-field searching for shortcuts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Support searching shortcuts by ID, localized name, English name, and hotkeys simultaneously. - Update SearchShortcuts to use Qt::CaseInsensitive for performance. - Avoid early return to ensure all matches are found. - 支持通过 ID、本地化名称、英文名称和快捷键同时搜索快捷键。 - 更新 SearchShortcuts 使用 Qt::CaseInsensitive 以提高性能。 - 避免提前返回,以确保找到所有匹配项。 Log: feat(shortcut): support multi-field searching for shortcuts Change-Id: Ie697d66101f0b95b28e033139a1aa92b5cb0ec9d --- .../shortcut/src/core/keybindingmanager.cpp | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/plugin-qt/shortcut/src/core/keybindingmanager.cpp b/src/plugin-qt/shortcut/src/core/keybindingmanager.cpp index 55f0921..c5163bb 100644 --- a/src/plugin-qt/shortcut/src/core/keybindingmanager.cpp +++ b/src/plugin-qt/shortcut/src/core/keybindingmanager.cpp @@ -162,10 +162,37 @@ ShortcutInfo KeybindingManager::LookupConflictShortcut(const QString &hotkey) QList KeybindingManager::SearchShortcuts(const QString &keyword) { QList list; - QList configs = m_keyConfigsMap.values(); - for (const KeyConfig &config : configs) { - if (config.hotkeys.contains(keyword, Qt::CaseInsensitive)) { + if (keyword.isEmpty()) return list; + + for (auto it = m_keyConfigsMap.constBegin(); it != m_keyConfigsMap.constEnd(); ++it) { + const KeyConfig &config = it.value(); + if (!config.isValid()) continue; + + // Match against shortcutId + if (config.getId().contains(keyword, Qt::CaseInsensitive)) { + list.append(toShortcutInfo(config)); + continue; + } + + // Match against display name + if (config.displayName.contains(keyword, Qt::CaseInsensitive)) { list.append(toShortcutInfo(config)); + continue; + } + + // Match against localized display name + QString localName = m_translationManager->translate(config.appId, config.displayName); + if (localName.contains(keyword, Qt::CaseInsensitive)) { + list.append(toShortcutInfo(config)); + continue; + } + + // Match against hotkey combinations + for (const QString &hk : config.hotkeys) { + if (hk.contains(keyword, Qt::CaseInsensitive)) { + list.append(toShortcutInfo(config)); + break; + } } }