diff options
Diffstat (limited to 'src/emu/natkeyboard.cpp')
-rw-r--r-- | src/emu/natkeyboard.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/emu/natkeyboard.cpp b/src/emu/natkeyboard.cpp index 110e0462b6d..53a95f46a4b 100644 --- a/src/emu/natkeyboard.cpp +++ b/src/emu/natkeyboard.cpp @@ -660,9 +660,9 @@ void natural_keyboard::build_codes(ioport_manager &manager) newcode.field[fieldnum] = &field; if (m_keycode_map.end() == found) { - keycode_map_list map_list; - map_list.emplace_back(newcode); - m_keycode_map.emplace(code, map_list); + keycode_map_entries entries; + entries.emplace_back(newcode); + m_keycode_map.emplace(code, std::move(entries)); } else found->second.emplace_back(newcode); @@ -679,6 +679,15 @@ void natural_keyboard::build_codes(ioport_manager &manager) } } } + + // sort mapping entries by shift state + for (auto &mapping : m_keycode_map) + { + std::sort( + mapping.second.begin(), + mapping.second.end(), + [] (keycode_map_entry const &x, keycode_map_entry const &y) { return x.shift < y.shift; }); + } } @@ -880,7 +889,8 @@ std::string natural_keyboard::unicode_to_string(char32_t ch) const const natural_keyboard::keycode_map_entry *natural_keyboard::find_code(char32_t ch) const { keycode_map::const_iterator const found(m_keycode_map.find(ch)); - if (m_keycode_map.end() == found) return nullptr; + if (m_keycode_map.end() == found) + return nullptr; for (keycode_map_entry const &entry : found->second) { if (entry.condition.eval()) |