diff options
Diffstat (limited to 'src/emu/natkeyboard.cpp')
-rw-r--r-- | src/emu/natkeyboard.cpp | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/src/emu/natkeyboard.cpp b/src/emu/natkeyboard.cpp index fd39bc7b5e0..a5d856a20e9 100644 --- a/src/emu/natkeyboard.cpp +++ b/src/emu/natkeyboard.cpp @@ -372,7 +372,13 @@ void natural_keyboard::set_in_use(bool usage) for (auto &port : machine().ioport().ports()) for (ioport_field &field : port.second->fields()) if (field.type() == IPT_KEYBOARD) + { field.live().lockout = usage; + + // clear pressed status when going out of use + if (!usage) + field.set_value(0); + } } } @@ -722,8 +728,23 @@ void natural_keyboard::timer(void *ptr, int param) const bool new_keydown = !m_status_keydown; const keycode_map_entry *const code = find_code(m_buffer[m_bufbegin]); if (code != nullptr) - for (int fieldnum = 0; fieldnum < ARRAY_LENGTH(code->field) && code->field[fieldnum] != nullptr; fieldnum++) - code->field[fieldnum]->set_value(new_keydown); + { + for (int fieldnum = 0; fieldnum < ARRAY_LENGTH(code->field); fieldnum++) + { + ioport_field *const field = code->field[fieldnum]; + if (field == nullptr) + break; + + // special handling for toggle fields + if (field->live().toggle) + { + if (new_keydown) + field->set_value(!field->digital_value()); + } + else + field->set_value(new_keydown); + } + } // proceed to next character when keydown expires if (!new_keydown) |