From d21cd202908ca17f1224992ed6e4669c2a09a395 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Fri, 31 Jul 2020 20:45:30 +0200 Subject: [PATCH] fix some pause bugs --- src/frontend/qt_sdl/main.cpp | 11 +++++++++++ src/frontend/qt_sdl/main.h | 1 + 2 files changed, 12 insertions(+) diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp index 47b34903..4f90ebe2 100644 --- a/src/frontend/qt_sdl/main.cpp +++ b/src/frontend/qt_sdl/main.cpp @@ -255,6 +255,7 @@ EmuThread::EmuThread(QObject* parent) : QThread(parent) { EmuStatus = 0; EmuRunning = 2; + EmuPause = 0; RunningSomething = false; connect(this, SIGNAL(windowUpdate()), mainWindow->panel, SLOT(update())); @@ -564,6 +565,7 @@ void EmuThread::changeWindowTitle(char* title) void EmuThread::emuRun() { EmuRunning = 1; + EmuPause = 0; RunningSomething = true; // checkme @@ -574,6 +576,9 @@ void EmuThread::emuRun() void EmuThread::emuPause() { + EmuPause++; + if (EmuPause > 1) return; + PrevEmuStatus = EmuRunning; EmuRunning = 2; while (EmuStatus != 2); @@ -584,6 +589,11 @@ void EmuThread::emuPause() void EmuThread::emuUnpause() { + if (EmuPause < 1) return; + + EmuPause--; + if (EmuPause > 0) return; + EmuRunning = PrevEmuStatus; if (audioDevice) SDL_PauseAudioDevice(audioDevice, 0); @@ -593,6 +603,7 @@ void EmuThread::emuUnpause() void EmuThread::emuStop() { EmuRunning = 0; + EmuPause = 0; if (audioDevice) SDL_PauseAudioDevice(audioDevice, 1); if (micDevice) SDL_PauseAudioDevice(micDevice, 1); diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h index eec2a483..7f339732 100644 --- a/src/frontend/qt_sdl/main.h +++ b/src/frontend/qt_sdl/main.h @@ -74,6 +74,7 @@ private: volatile int EmuStatus; int PrevEmuStatus; int EmuRunning; + int EmuPause; QOffscreenSurface* oglSurface; QOpenGLContext* oglContext;