diff --git a/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp b/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp index da7f0a95d..c0cacff55 100644 --- a/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp +++ b/PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp @@ -222,6 +222,41 @@ bool ShortcutMapper::isFilterValid(PluginCmdShortcut sc) return match; } +bool ShortcutMapper::isFilterValid(ScintillaKeyMap sc) +{ + // do a classic search on shortcut name, then see if *any* keycombo in _keyCombos matches + if (_shortcutFilter.empty()) + return true; + + wstring shortcut_name = stringToLower(string2wstring(sc.getName(), CP_UTF8)); + if (shortcut_name.find(_shortcutFilter) != std::string::npos) + return true; // name matches; don't have to check shortcuts + + for (size_t i = 0; i < sc.getSize(); ++i) + { + KeyCombo keyCombo = sc.getKeyComboByIndex(i); + if (keyCombo._key != 0) + { + // check if this stringified shortcut matches + string sc; + if (keyCombo._isCtrl) + sc += "Ctrl+"; + if (keyCombo._isAlt) + sc += "Alt+"; + if (keyCombo._isShift) + sc += "Shift+"; + + string keyString; + getKeyStrFromVal(keyCombo._key, keyString); + sc += keyString; + wstring combo_value = stringToLower(string2wstring(sc, CP_UTF8)); + if (combo_value.find(_shortcutFilter) != std::string::npos) + return true; + } + } + return false; +} + void ShortcutMapper::fillOutBabyGrid() { NppParameters& nppParam = NppParameters::getInstance(); diff --git a/PowerEditor/src/WinControls/Grid/ShortcutMapper.h b/PowerEditor/src/WinControls/Grid/ShortcutMapper.h index a96f02907..cad79cf91 100644 --- a/PowerEditor/src/WinControls/Grid/ShortcutMapper.h +++ b/PowerEditor/src/WinControls/Grid/ShortcutMapper.h @@ -57,6 +57,7 @@ public: generic_string getTextFromCombo(HWND hCombo); bool isFilterValid(Shortcut); bool isFilterValid(PluginCmdShortcut sc); + bool isFilterValid(ScintillaKeyMap sc); protected : intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);