From f34773ed73fd27e0e1f85607657f46b91dea6010 Mon Sep 17 00:00:00 2001 From: Eladash Date: Mon, 3 Oct 2022 11:23:24 +0300 Subject: [PATCH] Savestates: Make Ctrl+R work when not ingame Restore old behavior of Ctrl+R making it restart emulation when stoppped. --- rpcs3/Emu/System.cpp | 20 ++++++++++++-------- rpcs3/rpcs3qt/gs_frame.cpp | 6 ++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/System.cpp b/rpcs3/Emu/System.cpp index 2b17593a66..62fca14117 100644 --- a/rpcs3/Emu/System.cpp +++ b/rpcs3/Emu/System.cpp @@ -2536,6 +2536,12 @@ std::shared_ptr Emulator::Kill(bool allow_autoexit, bool savestat } sys_log.success("Saved savestate! path='%s'", path); + + if (!g_cfg.savestate.suspend_emu) + { + // Allow to reboot from GUI + m_path = path; + } } ar.set_reading_state(); @@ -2567,17 +2573,15 @@ std::shared_ptr Emulator::Kill(bool allow_autoexit, bool savestat game_boot_result Emulator::Restart() { - if (m_state == system_state::stopped) + if (!IsStopped()) { - return game_boot_result::generic_error; + auto save_args = std::make_tuple(argv, envp, data, disc, klic, hdd1, m_config_mode, m_config_mode); + + GracefulShutdown(false, false); + + std::tie(argv, envp, data, disc, klic, hdd1, m_config_mode, m_config_mode) = std::move(save_args); } - auto save_args = std::make_tuple(argv, envp, data, disc, klic, hdd1, m_config_mode, m_config_mode); - - GracefulShutdown(false, false); - - std::tie(argv, envp, data, disc, klic, hdd1, m_config_mode, m_config_mode) = std::move(save_args); - // Reload with prior configs. if (const auto error = Load(m_title_id); error != game_boot_result::no_errors) { diff --git a/rpcs3/rpcs3qt/gs_frame.cpp b/rpcs3/rpcs3qt/gs_frame.cpp index 0eb8c07a78..53a60e725c 100644 --- a/rpcs3/rpcs3qt/gs_frame.cpp +++ b/rpcs3/rpcs3qt/gs_frame.cpp @@ -279,6 +279,12 @@ void gs_frame::keyPressEvent(QKeyEvent *keyEvent) case Qt::Key_R: if (keyEvent->modifiers() == Qt::ControlModifier && !m_disable_kb_hotkeys) { + if (Emu.IsStopped()) + { + Emu.Restart(); + return; + } + extern bool boot_last_savestate(); boot_last_savestate(); }