diff --git a/src/duckstation-qt/qthostinterface.cpp b/src/duckstation-qt/qthostinterface.cpp index ea531ef52..b638c7b90 100644 --- a/src/duckstation-qt/qthostinterface.cpp +++ b/src/duckstation-qt/qthostinterface.cpp @@ -914,6 +914,11 @@ void QtHostInterface::threadEntryPoint() m_system->RunFrame(); UpdateControllerRumble(); + if (m_frame_step_request) + { + m_frame_step_request = false; + PauseSystem(true); + } renderDisplay(); diff --git a/src/duckstation-sdl/sdl_host_interface.cpp b/src/duckstation-sdl/sdl_host_interface.cpp index 99bd63928..bb9365387 100644 --- a/src/duckstation-sdl/sdl_host_interface.cpp +++ b/src/duckstation-sdl/sdl_host_interface.cpp @@ -402,8 +402,6 @@ bool SDLHostInterface::Initialize() ImGui::NewFrame(); - RegisterHotkeys(); - // process events to pick up controllers before updating input map ProcessEvents(); UpdateInputMap(); @@ -1435,16 +1433,6 @@ void SDLHostInterface::ClearImGuiFocus() ImGui::SetWindowFocus(nullptr); } -void SDLHostInterface::RegisterHotkeys() -{ - RegisterHotkey(StaticString("General"), StaticString("FrameStep"), StaticString("Frame Step"), [this](bool pressed) { - if (!pressed) - { - DoFrameStep(); - } - }); -} - void SDLHostInterface::DoStartDisc() { Assert(!m_system); @@ -1476,15 +1464,6 @@ void SDLHostInterface::DoChangeDisc() m_system->ResetPerformanceCounters(); } -void SDLHostInterface::DoFrameStep() -{ - if (!m_system) - return; - - m_frame_step_request = true; - m_paused = false; -} - void SDLHostInterface::Run() { while (!m_quit_request) diff --git a/src/duckstation-sdl/sdl_host_interface.h b/src/duckstation-sdl/sdl_host_interface.h index d5c165c17..43cea4821 100644 --- a/src/duckstation-sdl/sdl_host_interface.h +++ b/src/duckstation-sdl/sdl_host_interface.h @@ -66,7 +66,6 @@ private: void DestroyDisplay(); void CreateImGuiContext(); void UpdateFramebufferScale(); - void RegisterHotkeys(); /// Executes a callback later, after the UI has finished rendering. Needed to boot while rendering ImGui. void RunLater(std::function callback); @@ -80,7 +79,6 @@ private: void DrawImGuiWindows() override; void DoStartDisc(); void DoChangeDisc(); - void DoFrameStep(); void HandleSDLEvent(const SDL_Event* event); void ProcessEvents(); @@ -101,7 +99,6 @@ private: bool m_fullscreen = false; bool m_quit_request = false; - bool m_frame_step_request = false; bool m_settings_window_open = false; bool m_about_window_open = false; diff --git a/src/frontend-common/common_host_interface.cpp b/src/frontend-common/common_host_interface.cpp index b0e711b3b..f20b5944c 100644 --- a/src/frontend-common/common_host_interface.cpp +++ b/src/frontend-common/common_host_interface.cpp @@ -856,6 +856,16 @@ void CommonHostInterface::DrawDebugWindows() m_system->GetMDEC()->DrawDebugStateWindow(); } +void CommonHostInterface::DoFrameStep() +{ + if (!m_system) + return; + + m_frame_step_request = true; + if (m_paused) + PauseSystem(false); +} + std::optional CommonHostInterface::GetHostKeyCode(const std::string_view key_code) const { @@ -1263,6 +1273,13 @@ void CommonHostInterface::RegisterGeneralHotkeys() if (!pressed && m_system) SaveScreenshot(); }); + + RegisterHotkey(StaticString("General"), StaticString("FrameStep"), StaticString("Frame Step"), [this](bool pressed) { + if (!pressed) + { + DoFrameStep(); + } + }); } void CommonHostInterface::RegisterGraphicsHotkeys() diff --git a/src/frontend-common/common_host_interface.h b/src/frontend-common/common_host_interface.h index a16349e80..2c2e1ff58 100644 --- a/src/frontend-common/common_host_interface.h +++ b/src/frontend-common/common_host_interface.h @@ -271,6 +271,7 @@ protected: void DrawFPSWindow(); void DrawOSDMessages(); void DrawDebugWindows(); + void DoFrameStep(); std::unique_ptr m_game_list; @@ -280,6 +281,7 @@ protected: std::mutex m_osd_messages_lock; bool m_paused = false; + bool m_frame_step_request = false; bool m_speed_limiter_temp_disabled = false; bool m_speed_limiter_enabled = false; bool m_timer_resolution_increased = false;