summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/bootmanager.cpp5
-rw-r--r--src/yuzu/bootmanager.h4
-rw-r--r--src/yuzu/main.cpp7
-rw-r--r--src/yuzu/main.h1
4 files changed, 17 insertions, 0 deletions
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index 1519a46ed..8b9e186b0 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -302,12 +302,17 @@ GRenderWindow::GRenderWindow(GMainWindow* parent, EmuThread* emu_thread_,
302 connect(this, &GRenderWindow::FirstFrameDisplayed, parent, &GMainWindow::OnLoadComplete); 302 connect(this, &GRenderWindow::FirstFrameDisplayed, parent, &GMainWindow::OnLoadComplete);
303 connect(this, &GRenderWindow::ExecuteProgramSignal, parent, &GMainWindow::OnExecuteProgram, 303 connect(this, &GRenderWindow::ExecuteProgramSignal, parent, &GMainWindow::OnExecuteProgram,
304 Qt::QueuedConnection); 304 Qt::QueuedConnection);
305 connect(this, &GRenderWindow::ExitSignal, parent, &GMainWindow::OnExit, Qt::QueuedConnection);
305} 306}
306 307
307void GRenderWindow::ExecuteProgram(std::size_t program_index) { 308void GRenderWindow::ExecuteProgram(std::size_t program_index) {
308 emit ExecuteProgramSignal(program_index); 309 emit ExecuteProgramSignal(program_index);
309} 310}
310 311
312void GRenderWindow::Exit() {
313 emit ExitSignal();
314}
315
311GRenderWindow::~GRenderWindow() { 316GRenderWindow::~GRenderWindow() {
312 input_subsystem->Shutdown(); 317 input_subsystem->Shutdown();
313} 318}
diff --git a/src/yuzu/bootmanager.h b/src/yuzu/bootmanager.h
index 402dd2ee1..54c4e2142 100644
--- a/src/yuzu/bootmanager.h
+++ b/src/yuzu/bootmanager.h
@@ -181,6 +181,9 @@ public:
181 */ 181 */
182 void ExecuteProgram(std::size_t program_index); 182 void ExecuteProgram(std::size_t program_index);
183 183
184 /// Instructs the window to exit the application.
185 void Exit();
186
184public slots: 187public slots:
185 void OnEmulationStarting(EmuThread* emu_thread); 188 void OnEmulationStarting(EmuThread* emu_thread);
186 void OnEmulationStopping(); 189 void OnEmulationStopping();
@@ -191,6 +194,7 @@ signals:
191 void Closed(); 194 void Closed();
192 void FirstFrameDisplayed(); 195 void FirstFrameDisplayed();
193 void ExecuteProgramSignal(std::size_t program_index); 196 void ExecuteProgramSignal(std::size_t program_index);
197 void ExitSignal();
194 void MouseActivity(); 198 void MouseActivity();
195 199
196private: 200private:
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 3c2824362..0bd0c5b04 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -1384,6 +1384,9 @@ void GMainWindow::BootGame(const QString& filename, u64 program_id, std::size_t
1384 system.RegisterExecuteProgramCallback( 1384 system.RegisterExecuteProgramCallback(
1385 [this](std::size_t program_index) { render_window->ExecuteProgram(program_index); }); 1385 [this](std::size_t program_index) { render_window->ExecuteProgram(program_index); });
1386 1386
1387 // Register an Exit callback such that Core can exit the currently running application.
1388 system.RegisterExitCallback([this]() { render_window->Exit(); });
1389
1387 connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame); 1390 connect(render_window, &GRenderWindow::Closed, this, &GMainWindow::OnStopGame);
1388 connect(render_window, &GRenderWindow::MouseActivity, this, &GMainWindow::OnMouseActivity); 1391 connect(render_window, &GRenderWindow::MouseActivity, this, &GMainWindow::OnMouseActivity);
1389 // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views 1392 // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views
@@ -2469,6 +2472,10 @@ void GMainWindow::OnExecuteProgram(std::size_t program_index) {
2469 BootGame(last_filename_booted, 0, program_index); 2472 BootGame(last_filename_booted, 0, program_index);
2470} 2473}
2471 2474
2475void GMainWindow::OnExit() {
2476 OnStopGame();
2477}
2478
2472void GMainWindow::ErrorDisplayDisplayError(QString error_code, QString error_text) { 2479void GMainWindow::ErrorDisplayDisplayError(QString error_code, QString error_text) {
2473 OverlayDialog dialog(render_window, Core::System::GetInstance(), error_code, error_text, 2480 OverlayDialog dialog(render_window, Core::System::GetInstance(), error_code, error_text,
2474 QString{}, tr("OK"), Qt::AlignLeft | Qt::AlignVCenter); 2481 QString{}, tr("OK"), Qt::AlignLeft | Qt::AlignVCenter);
diff --git a/src/yuzu/main.h b/src/yuzu/main.h
index 36eed6103..60ce01471 100644
--- a/src/yuzu/main.h
+++ b/src/yuzu/main.h
@@ -153,6 +153,7 @@ signals:
153public slots: 153public slots:
154 void OnLoadComplete(); 154 void OnLoadComplete();
155 void OnExecuteProgram(std::size_t program_index); 155 void OnExecuteProgram(std::size_t program_index);
156 void OnExit();
156 void ControllerSelectorReconfigureControllers( 157 void ControllerSelectorReconfigureControllers(
157 const Core::Frontend::ControllerParameters& parameters); 158 const Core::Frontend::ControllerParameters& parameters);
158 void SoftwareKeyboardInitialize( 159 void SoftwareKeyboardInitialize(