summaryrefslogtreecommitdiffstats
path: root/src/emu/natkeyboard.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/natkeyboard.cpp')
-rw-r--r--src/emu/natkeyboard.cpp18
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())