Browse Source

Enable shortcut mapper to filter keycombos for scintilla commands

Previously the shortcut mapper filtered the keycombo
    for every other type of command, but not scintilla commands.
pull/14732/head
molsonkiko 9 months ago
parent
commit
36793b5164
  1. 35
      PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp
  2. 1
      PowerEditor/src/WinControls/Grid/ShortcutMapper.h

35
PowerEditor/src/WinControls/Grid/ShortcutMapper.cpp

@ -222,6 +222,41 @@ bool ShortcutMapper::isFilterValid(PluginCmdShortcut sc)
return match; 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() void ShortcutMapper::fillOutBabyGrid()
{ {
NppParameters& nppParam = NppParameters::getInstance(); NppParameters& nppParam = NppParameters::getInstance();

1
PowerEditor/src/WinControls/Grid/ShortcutMapper.h

@ -57,6 +57,7 @@ public:
generic_string getTextFromCombo(HWND hCombo); generic_string getTextFromCombo(HWND hCombo);
bool isFilterValid(Shortcut); bool isFilterValid(Shortcut);
bool isFilterValid(PluginCmdShortcut sc); bool isFilterValid(PluginCmdShortcut sc);
bool isFilterValid(ScintillaKeyMap sc);
protected : protected :
intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam); intptr_t CALLBACK run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam);

Loading…
Cancel
Save