aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/citra_qt/main.cpp
diff options
context:
space:
mode:
authorGravatar bunnei <bunneidev@gmail.com>2015-04-27 23:13:57 -0400
committerGravatar bunnei <bunneidev@gmail.com>2015-05-01 18:27:06 -0400
commit3dd268878570c2c48e2be4018ff4d0ea851ece60 (patch)
treeb00f5eb003d5f3f34d5a34190a3e645fe854e0d4 /src/citra_qt/main.cpp
parent5a855bdb2f263c143c54c0f37609aaa22e61c281 (diff)
Qt: Fix loading a new game without stopping emulation.
Diffstat (limited to 'src/citra_qt/main.cpp')
-rw-r--r--src/citra_qt/main.cpp39
1 files changed, 24 insertions, 15 deletions
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index fe1dac62..5441c17f 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -199,6 +199,10 @@ void GMainWindow::OnDisplayTitleBars(bool show)
void GMainWindow::BootGame(std::string filename) {
LOG_INFO(Frontend, "Citra starting...\n");
+ // Shutdown previous session if the emu thread is still active...
+ if (emu_thread != nullptr)
+ ShutdownGame();
+
System::Init(render_window);
// Load a game or die...
@@ -217,6 +221,25 @@ void GMainWindow::BootGame(std::string filename) {
OnStartGame();
}
+void GMainWindow::ShutdownGame() {
+ emu_thread->SetCpuRunning(false);
+
+ emu_thread->ShutdownCpu();
+ emu_thread->WaitForCpuShutdown();
+ emu_thread->Stop();
+
+ delete emu_thread;
+ emu_thread = nullptr;
+
+ System::Shutdown();
+
+ ui.action_Start->setEnabled(true);
+ ui.action_Pause->setEnabled(false);
+ ui.action_Stop->setEnabled(false);
+
+ render_window->hide();
+}
+
void GMainWindow::OnMenuLoadFile()
{
QString filename = QFileDialog::getOpenFileName(this, tr("Load File"), QString(), tr("3DS executable (*.3ds *.3dsx *.elf *.axf *.bin *.cci *.cxi)"));
@@ -249,21 +272,7 @@ void GMainWindow::OnPauseGame()
}
void GMainWindow::OnStopGame() {
- emu_thread->SetCpuRunning(false);
-
- emu_thread->ShutdownCpu();
- emu_thread->WaitForCpuShutdown();
- emu_thread->Stop();
-
- delete emu_thread;
-
- System::Shutdown();
-
- ui.action_Start->setEnabled(true);
- ui.action_Pause->setEnabled(false);
- ui.action_Stop->setEnabled(false);
-
- render_window->hide();
+ ShutdownGame();
}
void GMainWindow::OnOpenHotkeysDialog()