summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/natkeyboard.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2016-10-20 17:13:04 -0400
committer AJR <ajrhacker@users.noreply.github.com>2016-10-20 17:58:03 -0400
commit6d2d6bfa0d010c1de8a46b74821fc2633b5e1e9e (patch)
treefd15928aefacb06e2ec5ac89ff20e22f10d06b4d /src/emu/natkeyboard.cpp
parent93b37d2d786ed352f13ccd3c8f96c5c6cd94e2eb (diff)
Lock out ioport_fields independently of natural keyboard state (nw)
Diffstat (limited to 'src/emu/natkeyboard.cpp')
-rw-r--r--src/emu/natkeyboard.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/emu/natkeyboard.cpp b/src/emu/natkeyboard.cpp
index 9a654c2078d..9e88b589440 100644
--- a/src/emu/natkeyboard.cpp
+++ b/src/emu/natkeyboard.cpp
@@ -10,6 +10,7 @@
#include "emu.h"
#include "natkeyboard.h"
+#include "emuopts.h"
//**************************************************************************
@@ -314,6 +315,7 @@ const char_info charinfo[] =
natural_keyboard::natural_keyboard(running_machine &machine)
: m_machine(machine),
+ m_in_use(false),
m_bufbegin(0),
m_bufend(0),
m_status_keydown(false),
@@ -331,6 +333,9 @@ natural_keyboard::natural_keyboard(running_machine &machine)
m_buffer.resize(KEY_BUFFER_SIZE);
m_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(natural_keyboard::timer), this));
}
+
+ // retrieve option setting
+ set_in_use(machine.options().natural_keyboard());
}
@@ -349,6 +354,30 @@ void natural_keyboard::configure(ioport_queue_chars_delegate queue_chars, ioport
//-------------------------------------------------
+// set_in_use - specify whether the natural
+// keyboard is active
+//-------------------------------------------------
+
+void natural_keyboard::set_in_use(bool usage)
+{
+ if (m_in_use != usage)
+ {
+ // update active usage
+ m_in_use = usage;
+ std::string error;
+ machine().options().set_value(OPTION_NATURAL_KEYBOARD, usage, OPTION_PRIORITY_CMDLINE, error);
+ assert(error.empty());
+
+ // lock out (or unlock) all keyboard inputs
+ for (auto &port : machine().ioport().ports())
+ for (ioport_field &field : port.second->fields())
+ if (field.type() == IPT_KEYBOARD)
+ field.live().lockout = usage;
+ }
+}
+
+
+//-------------------------------------------------
// post - post a single character
//-------------------------------------------------