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