Fixup prefix matching

develop
Robob27 2023-02-02 22:46:32 -05:00
parent cece0bfca1
commit 36e4bba779
3 changed files with 6 additions and 10 deletions

@ -2422,11 +2422,9 @@ bool Core::SelectHotkey(int sym, int modifiers)
if (!binding.focus.empty()) { if (!binding.focus.empty()) {
bool found = false; bool found = false;
std::vector<std::string> focusStrings = Gui::getFocusStrings(Core::getTopViewscreen()); std::vector<std::string> focusStrings = Gui::getFocusStrings(Core::getTopViewscreen());
for (std::string focusString : focusStrings) { if(Gui::matchFocusString(binding.focus)) {
if (prefix_matches(binding.focus, focusString)) {
found = true; found = true;
} }
}
if (!found) { if (!found) {
DEBUG(keybinding).print("skipping keybinding due to focus string mismatch: '%s' !~ '%s'\n", DEBUG(keybinding).print("skipping keybinding due to focus string mismatch: '%s' !~ '%s'\n",

@ -481,7 +481,7 @@ bool Gui::matchFocusString(std::string focusString, bool prefixMatch) {
std::vector<std::string> currentFocusStrings = getFocusStrings(getCurViewscreen(true)); std::vector<std::string> currentFocusStrings = getFocusStrings(getCurViewscreen(true));
return std::find_if(currentFocusStrings.begin(), currentFocusStrings.end(), [&focusString, &prefixMatch](std::string item) { return std::find_if(currentFocusStrings.begin(), currentFocusStrings.end(), [&focusString, &prefixMatch](std::string item) {
return prefixMatch ? toLower(item).rfind(focusString, 0) == 0 : focusString == toLower(item); return prefixMatch ? prefix_matches(focusString, toLower(item)) : focusString == toLower(item);
}) != currentFocusStrings.end(); }) != currentFocusStrings.end();
} }

@ -109,8 +109,7 @@ static void find_active_keybindings(df::viewscreen *screen, bool filtermenu) {
vector<string> tokens; vector<string> tokens;
split_string(&tokens, *invoke_cmd, ":"); split_string(&tokens, *invoke_cmd, ":");
string focus = tokens[0].substr(1); string focus = tokens[0].substr(1);
for(string focusString : focusStrings) { if(Gui::matchFocusString(focus)) {
if (prefix_matches(toLower(focus), toLower(focusString))) {
auto cmdline = trim(tokens[1]); auto cmdline = trim(tokens[1]);
add_binding_if_valid(sym, cmdline, screen, filtermenu); add_binding_if_valid(sym, cmdline, screen, filtermenu);
} }
@ -120,7 +119,6 @@ static void find_active_keybindings(df::viewscreen *screen, bool filtermenu) {
} }
} }
} }
}
valid = true; valid = true;
} }