Fix crash with empty hotkeys. Closes #1420.
Originally committed to SVN as r6360.
This commit is contained in:
parent
e9dcbf66f3
commit
a4eb7ef528
1 changed files with 15 additions and 8 deletions
|
@ -79,11 +79,17 @@ void Hotkey::BuildHotkey(std::string const& context, const json::Object& object)
|
||||||
const json::Array& array = index->second;
|
const json::Array& array = index->second;
|
||||||
|
|
||||||
for (json::Array::const_iterator arr_index(array.begin()); arr_index != array.end(); ++arr_index) {
|
for (json::Array::const_iterator arr_index(array.begin()); arr_index != array.end(); ++arr_index) {
|
||||||
const json::Array& arr_mod = (*arr_index)["modifiers"];
|
|
||||||
std::vector<std::string> keys;
|
std::vector<std::string> keys;
|
||||||
keys.reserve(arr_mod.size() + 1);
|
|
||||||
copy(arr_mod.begin(), arr_mod.end(), back_inserter(keys));
|
try {
|
||||||
keys.push_back((*arr_index)["key"]);
|
const json::Array& arr_mod = (*arr_index)["modifiers"];
|
||||||
|
keys.reserve(arr_mod.size() + 1);
|
||||||
|
copy(arr_mod.begin(), arr_mod.end(), back_inserter(keys));
|
||||||
|
keys.push_back((*arr_index)["key"]);
|
||||||
|
}
|
||||||
|
catch (json::Exception const& e) {
|
||||||
|
LOG_E("agi/hotkey/load") << "Failed loading hotkey for command '" << index->first << "': " << e.what();
|
||||||
|
}
|
||||||
|
|
||||||
ComboInsert(Combo(context, index->first, keys));
|
ComboInsert(Combo(context, index->first, keys));
|
||||||
}
|
}
|
||||||
|
@ -156,10 +162,11 @@ void Hotkey::Flush() {
|
||||||
std::vector<std::string> const& combo_map(index->second.Get());
|
std::vector<std::string> const& combo_map(index->second.Get());
|
||||||
|
|
||||||
json::Object hotkey;
|
json::Object hotkey;
|
||||||
hotkey["key"] = combo_map.back();
|
if (combo_map.size()) {
|
||||||
json::Array& modifiers = hotkey["modifiers"];
|
hotkey["key"] = combo_map.back();
|
||||||
|
json::Array& modifiers = hotkey["modifiers"];
|
||||||
copy(combo_map.begin(), combo_map.end() - 1, std::back_inserter(modifiers));
|
copy(combo_map.begin(), combo_map.end() - 1, std::back_inserter(modifiers));
|
||||||
|
}
|
||||||
|
|
||||||
json::Array& combo_array = root[index->second.Context()][index->second.CmdName()];
|
json::Array& combo_array = root[index->second.Context()][index->second.CmdName()];
|
||||||
combo_array.push_back(hotkey);
|
combo_array.push_back(hotkey);
|
||||||
|
|
Loading…
Reference in a new issue