From 8e9fbf63a39f4e434ed988818dc217f424cc7b5d Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Tue, 11 May 2021 15:14:03 +1000 Subject: [PATCH] NoGUI/SDL: Implement pause on focus loss --- src/duckstation-nogui/sdl_host_interface.cpp | 39 +++++++++++++++++--- src/duckstation-nogui/sdl_host_interface.h | 1 + 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/duckstation-nogui/sdl_host_interface.cpp b/src/duckstation-nogui/sdl_host_interface.cpp index 6cf9e0361..cd6037baa 100644 --- a/src/duckstation-nogui/sdl_host_interface.cpp +++ b/src/duckstation-nogui/sdl_host_interface.cpp @@ -1,4 +1,5 @@ #include "sdl_host_interface.h" +#include "core/system.h" #include "frontend-common/controller_interface.h" #include "frontend-common/fullscreen_ui.h" #include "frontend-common/icon.h" @@ -276,12 +277,40 @@ void SDLHostInterface::HandleSDLEvent(const SDL_Event* event) { case SDL_WINDOWEVENT: { - if (event->window.event == SDL_WINDOWEVENT_SIZE_CHANGED) + switch (event->window.event) { - s32 window_width, window_height; - SDL_GetWindowSize(m_window, &window_width, &window_height); - m_display->ResizeRenderWindow(window_width, window_height); - OnHostDisplayResized(); + case SDL_WINDOWEVENT_SIZE_CHANGED: + { + s32 window_width, window_height; + SDL_GetWindowSize(m_window, &window_width, &window_height); + m_display->ResizeRenderWindow(window_width, window_height); + OnHostDisplayResized(); + } + break; + + case SDL_WINDOWEVENT_FOCUS_LOST: + { + if (!m_was_paused_by_focus_loss && !System::IsPaused()) + { + PauseSystem(true); + m_was_paused_by_focus_loss = true; + } + } + break; + + case SDL_WINDOWEVENT_FOCUS_GAINED: + { + if (m_was_paused_by_focus_loss) + { + if (System::IsPaused()) + PauseSystem(false); + m_was_paused_by_focus_loss = false; + } + } + break; + + default: + break; } } break; diff --git a/src/duckstation-nogui/sdl_host_interface.h b/src/duckstation-nogui/sdl_host_interface.h index 3a9b44d77..f6be73c7d 100644 --- a/src/duckstation-nogui/sdl_host_interface.h +++ b/src/duckstation-nogui/sdl_host_interface.h @@ -34,4 +34,5 @@ private: SDL_Window* m_window = nullptr; bool m_fullscreen = false; + bool m_was_paused_by_focus_loss = false; };