diff options
| author | 2015-09-05 12:29:44 +0200 | |
|---|---|---|
| committer | 2015-09-07 20:34:39 +0200 | |
| commit | 86e29ac2814be7789370c021eb858558557a7362 (patch) | |
| tree | ed0855e6e962d979d06e00ee007a26e6c8a7c233 /src | |
| parent | Merge pull request #1117 from yuriks/fix-glad-build (diff) | |
| download | yuzu-86e29ac2814be7789370c021eb858558557a7362.tar.gz yuzu-86e29ac2814be7789370c021eb858558557a7362.tar.xz yuzu-86e29ac2814be7789370c021eb858558557a7362.zip | |
Stop emulation when render window is closed
Diffstat (limited to 'src')
| -rw-r--r-- | src/citra_qt/bootmanager.cpp | 5 | ||||
| -rw-r--r-- | src/citra_qt/bootmanager.h | 6 | ||||
| -rw-r--r-- | src/citra_qt/main.cpp | 4 |
3 files changed, 15 insertions, 0 deletions
diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index 9aec16506..2aab343f2 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp | |||
| @@ -223,6 +223,11 @@ QByteArray GRenderWindow::saveGeometry() | |||
| 223 | return geometry; | 223 | return geometry; |
| 224 | } | 224 | } |
| 225 | 225 | ||
| 226 | void GRenderWindow::closeEvent(QCloseEvent* event) { | ||
| 227 | emit Closed(); | ||
| 228 | QWidget::closeEvent(event); | ||
| 229 | } | ||
| 230 | |||
| 226 | void GRenderWindow::keyPressEvent(QKeyEvent* event) | 231 | void GRenderWindow::keyPressEvent(QKeyEvent* event) |
| 227 | { | 232 | { |
| 228 | this->KeyPressed({event->key(), keyboard_id}); | 233 | this->KeyPressed({event->key(), keyboard_id}); |
diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h index 1a1e0e6a5..d0fe397af 100644 --- a/src/citra_qt/bootmanager.h +++ b/src/citra_qt/bootmanager.h | |||
| @@ -110,6 +110,8 @@ public: | |||
| 110 | void restoreGeometry(const QByteArray& geometry); // overridden | 110 | void restoreGeometry(const QByteArray& geometry); // overridden |
| 111 | QByteArray saveGeometry(); // overridden | 111 | QByteArray saveGeometry(); // overridden |
| 112 | 112 | ||
| 113 | void closeEvent(QCloseEvent* event) override; | ||
| 114 | |||
| 113 | void keyPressEvent(QKeyEvent* event) override; | 115 | void keyPressEvent(QKeyEvent* event) override; |
| 114 | void keyReleaseEvent(QKeyEvent* event) override; | 116 | void keyReleaseEvent(QKeyEvent* event) override; |
| 115 | 117 | ||
| @@ -129,6 +131,10 @@ public slots: | |||
| 129 | void OnEmulationStarting(EmuThread* emu_thread); | 131 | void OnEmulationStarting(EmuThread* emu_thread); |
| 130 | void OnEmulationStopping(); | 132 | void OnEmulationStopping(); |
| 131 | 133 | ||
| 134 | signals: | ||
| 135 | /// Emitted when the window is closed | ||
| 136 | void Closed(); | ||
| 137 | |||
| 132 | private: | 138 | private: |
| 133 | void OnMinimalClientAreaChangeRequest(const std::pair<unsigned,unsigned>& minimal_size) override; | 139 | void OnMinimalClientAreaChangeRequest(const std::pair<unsigned,unsigned>& minimal_size) override; |
| 134 | 140 | ||
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 11813a2a8..8dadb44ef 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp | |||
| @@ -251,6 +251,7 @@ void GMainWindow::BootGame(const std::string& filename) { | |||
| 251 | render_window->moveContext(); | 251 | render_window->moveContext(); |
| 252 | emu_thread->start(); | 252 | emu_thread->start(); |
| 253 | 253 | ||
| 254 | connect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame())); | ||
| 254 | // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views before the CPU continues | 255 | // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views before the CPU continues |
| 255 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), disasmWidget, SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); | 256 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), disasmWidget, SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); |
| 256 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); | 257 | connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); |
| @@ -283,6 +284,9 @@ void GMainWindow::ShutdownGame() { | |||
| 283 | emu_thread->wait(); | 284 | emu_thread->wait(); |
| 284 | emu_thread = nullptr; | 285 | emu_thread = nullptr; |
| 285 | 286 | ||
| 287 | // The emulation is stopped, so closing the window or not does not matter anymore | ||
| 288 | disconnect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame())); | ||
| 289 | |||
| 286 | // Update the GUI | 290 | // Update the GUI |
| 287 | ui.action_Start->setEnabled(false); | 291 | ui.action_Start->setEnabled(false); |
| 288 | ui.action_Start->setText(tr("Start")); | 292 | ui.action_Start->setText(tr("Start")); |