summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/ui/ui.cpp
diff options
context:
space:
mode:
author Victor Vasiliev <vasilvv@mit.edu>2016-02-01 10:29:47 -0500
committer Victor Vasiliev <vasilvv@mit.edu>2016-02-02 16:18:57 -0500
commitc626466050146c9ddb8533222c5486dc3125e07b (patch)
tree4ba5ee65ef00a95ae46c96fe7bb1037dde07b9e0 /src/emu/ui/ui.cpp
parentb11f39e7a0dbccee2a69ecc96e6584b7f3536f03 (diff)
Do not read the load/save state filename while sequence is still pressed
Fixes the issue where, if the save state button was bound to something that was a legal save state input, it would occasionally immediately save the state onto the same button as "save state" input itself was bound.
Diffstat (limited to 'src/emu/ui/ui.cpp')
-rw-r--r--src/emu/ui/ui.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/emu/ui/ui.cpp b/src/emu/ui/ui.cpp
index 304c365ac6a..df16d384ebb 100644
--- a/src/emu/ui/ui.cpp
+++ b/src/emu/ui/ui.cpp
@@ -1625,6 +1625,7 @@ UINT32 ui_manager::handler_ingame(running_machine &machine, render_container *co
if (machine.ui_input().pressed(IPT_UI_SAVE_STATE))
{
machine.pause();
+ machine.ui().m_load_save_hold = true;
return machine.ui().set_handler(handler_load_save, LOADSAVE_SAVE);
}
@@ -1632,6 +1633,7 @@ UINT32 ui_manager::handler_ingame(running_machine &machine, render_container *co
if (machine.ui_input().pressed(IPT_UI_LOAD_STATE))
{
machine.pause();
+ machine.ui().m_load_save_hold = true;
return machine.ui().set_handler(handler_load_save, LOADSAVE_LOAD);
}
@@ -1713,6 +1715,23 @@ UINT32 ui_manager::handler_load_save(running_machine &machine, render_container
else
machine.ui().draw_message_window(container, "Select position to load from");
+ // if load/save state sequence is still being pressed, do not read the filename yet
+ if (machine.ui().m_load_save_hold) {
+ bool seq_in_progress = false;
+ const input_seq &load_save_seq = state == LOADSAVE_SAVE ?
+ machine.ioport().type_seq(IPT_UI_SAVE_STATE) :
+ machine.ioport().type_seq(IPT_UI_LOAD_STATE);
+
+ for (int i = 0; i < load_save_seq.length(); i++)
+ if (machine.input().code_pressed_once(load_save_seq[i]))
+ seq_in_progress = true;
+
+ if (seq_in_progress)
+ return state;
+ else
+ machine.ui().m_load_save_hold = false;
+ }
+
// check for cancel key
if (machine.ui_input().pressed(IPT_UI_CANCEL))
{