Просмотр исходного кода

Merge pull request #9486 from liamwhite/shutdown-hell

qt: exit properly on guest-initiated close
Morph 3 лет назад
Родитель
Сommit
fa231645f2
2 измененных файлов с 9 добавлено и 1 удалено
  1. 0 1
      src/yuzu/bootmanager.cpp
  2. 9 0
      src/yuzu/main.cpp

+ 0 - 1
src/yuzu/bootmanager.cpp

@@ -78,7 +78,6 @@ void EmuThread::run() {
     gpu.Start();
 
     m_system.GetCpuManager().OnGpuReady();
-    m_system.RegisterExitCallback([this] { m_stop_source.request_stop(); });
 
     if (m_system.DebuggerEnabled()) {
         m_system.InitializeDebugger();

+ 9 - 0
src/yuzu/main.cpp

@@ -1710,6 +1710,11 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t
     system->RegisterExecuteProgramCallback(
         [this](std::size_t program_index_) { render_window->ExecuteProgram(program_index_); });
 
+    system->RegisterExitCallback([this] {
+        emu_thread->ForceStop();
+        render_window->Exit();
+    });
+
     connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
     connect(render_window, &GRenderWindow::MouseActivity, this, &GMainWindow::OnMouseActivity);
     // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views
@@ -4143,6 +4148,10 @@ bool GMainWindow::ConfirmForceLockedExit() {
 }
 
 void GMainWindow::RequestGameExit() {
+    if (!system->IsPoweredOn()) {
+        return;
+    }
+
     auto& sm{system->ServiceManager()};
     auto applet_oe = sm.GetService<Service::AM::AppletOE>("appletOE");
     auto applet_ae = sm.GetService<Service::AM::AppletAE>("appletAE");