mirror of
https://github.com/citra-emu/citra.git
synced 2024-11-25 11:40:14 +00:00
Implement pause on focus lost for SDL frontend
This commit is contained in:
parent
40d59f085f
commit
4e097e05d2
@ -150,6 +150,10 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
while (emu_window->IsOpen()) {
|
while (emu_window->IsOpen()) {
|
||||||
Core::RunLoop();
|
Core::RunLoop();
|
||||||
|
|
||||||
|
// Pause on focus lost
|
||||||
|
if (!emu_window->HasFocus())
|
||||||
|
emu_window->WaitForFocus();
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -50,6 +50,10 @@ bool EmuWindow_SDL2::IsOpen() const {
|
|||||||
return is_open;
|
return is_open;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool EmuWindow_SDL2::HasFocus() const {
|
||||||
|
return has_focus;
|
||||||
|
}
|
||||||
|
|
||||||
void EmuWindow_SDL2::OnResize() {
|
void EmuWindow_SDL2::OnResize() {
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
@ -58,6 +62,24 @@ void EmuWindow_SDL2::OnResize() {
|
|||||||
NotifyFramebufferLayoutChanged(EmuWindow::FramebufferLayout::DefaultScreenLayout(width, height));
|
NotifyFramebufferLayoutChanged(EmuWindow::FramebufferLayout::DefaultScreenLayout(width, height));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EmuWindow_SDL2::WaitForFocus() {
|
||||||
|
while(!has_focus) {
|
||||||
|
SDL_Event event;
|
||||||
|
SDL_WaitEvent(&event);
|
||||||
|
if(event.type == SDL_WINDOWEVENT) {
|
||||||
|
switch (event.window.event) {
|
||||||
|
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||||
|
has_focus=true;
|
||||||
|
break;
|
||||||
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
|
has_focus=true;
|
||||||
|
is_open = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EmuWindow_SDL2::EmuWindow_SDL2() {
|
EmuWindow_SDL2::EmuWindow_SDL2() {
|
||||||
keyboard_id = KeyMap::NewDeviceId();
|
keyboard_id = KeyMap::NewDeviceId();
|
||||||
|
|
||||||
@ -136,6 +158,12 @@ void EmuWindow_SDL2::PollEvents() {
|
|||||||
case SDL_WINDOWEVENT_MINIMIZED:
|
case SDL_WINDOWEVENT_MINIMIZED:
|
||||||
OnResize();
|
OnResize();
|
||||||
break;
|
break;
|
||||||
|
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||||
|
has_focus = true;
|
||||||
|
break;
|
||||||
|
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||||
|
has_focus = false;
|
||||||
|
break;
|
||||||
case SDL_WINDOWEVENT_CLOSE:
|
case SDL_WINDOWEVENT_CLOSE:
|
||||||
is_open = false;
|
is_open = false;
|
||||||
break;
|
break;
|
||||||
|
@ -30,6 +30,12 @@ public:
|
|||||||
/// Whether the window is still open, and a close request hasn't yet been sent
|
/// Whether the window is still open, and a close request hasn't yet been sent
|
||||||
bool IsOpen() const;
|
bool IsOpen() const;
|
||||||
|
|
||||||
|
/// Whether the window has focus
|
||||||
|
bool HasFocus() const;
|
||||||
|
|
||||||
|
/// Wait for the window to gain focus
|
||||||
|
void WaitForFocus();
|
||||||
|
|
||||||
/// Load keymap from configuration
|
/// Load keymap from configuration
|
||||||
void ReloadSetKeymaps() override;
|
void ReloadSetKeymaps() override;
|
||||||
|
|
||||||
@ -52,6 +58,9 @@ private:
|
|||||||
/// Is the window still open?
|
/// Is the window still open?
|
||||||
bool is_open = true;
|
bool is_open = true;
|
||||||
|
|
||||||
|
/// Is the window has focus
|
||||||
|
bool has_focus = true;
|
||||||
|
|
||||||
/// Internal SDL2 render window
|
/// Internal SDL2 render window
|
||||||
SDL_Window* render_window;
|
SDL_Window* render_window;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user