mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Stop emulation when render window is closed
This commit is contained in:
		
							parent
							
								
									f5a49df679
								
							
						
					
					
						commit
						86e29ac281
					
				
					 3 changed files with 15 additions and 0 deletions
				
			
		|  | @ -223,6 +223,11 @@ QByteArray GRenderWindow::saveGeometry() | |||
|         return geometry; | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::closeEvent(QCloseEvent* event) { | ||||
|     emit Closed(); | ||||
|     QWidget::closeEvent(event); | ||||
| } | ||||
| 
 | ||||
| void GRenderWindow::keyPressEvent(QKeyEvent* event) | ||||
| { | ||||
|     this->KeyPressed({event->key(), keyboard_id}); | ||||
|  |  | |||
|  | @ -110,6 +110,8 @@ public: | |||
|     void restoreGeometry(const QByteArray& geometry); // overridden
 | ||||
|     QByteArray saveGeometry();  // overridden
 | ||||
| 
 | ||||
|     void closeEvent(QCloseEvent* event) override; | ||||
| 
 | ||||
|     void keyPressEvent(QKeyEvent* event) override; | ||||
|     void keyReleaseEvent(QKeyEvent* event) override; | ||||
| 
 | ||||
|  | @ -129,6 +131,10 @@ public slots: | |||
|     void OnEmulationStarting(EmuThread* emu_thread); | ||||
|     void OnEmulationStopping(); | ||||
| 
 | ||||
| signals: | ||||
|     /// Emitted when the window is closed
 | ||||
|     void Closed(); | ||||
| 
 | ||||
| private: | ||||
|     void OnMinimalClientAreaChangeRequest(const std::pair<unsigned,unsigned>& minimal_size) override; | ||||
| 
 | ||||
|  |  | |||
|  | @ -251,6 +251,7 @@ void GMainWindow::BootGame(const std::string& filename) { | |||
|     render_window->moveContext(); | ||||
|     emu_thread->start(); | ||||
| 
 | ||||
|     connect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame())); | ||||
|     // BlockingQueuedConnection is important here, it makes sure we've finished refreshing our views before the CPU continues
 | ||||
|     connect(emu_thread.get(), SIGNAL(DebugModeEntered()), disasmWidget, SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); | ||||
|     connect(emu_thread.get(), SIGNAL(DebugModeEntered()), registersWidget, SLOT(OnDebugModeEntered()), Qt::BlockingQueuedConnection); | ||||
|  | @ -283,6 +284,9 @@ void GMainWindow::ShutdownGame() { | |||
|     emu_thread->wait(); | ||||
|     emu_thread = nullptr; | ||||
| 
 | ||||
|     // The emulation is stopped, so closing the window or not does not matter anymore
 | ||||
|     disconnect(render_window, SIGNAL(Closed()), this, SLOT(OnStopGame())); | ||||
| 
 | ||||
|     // Update the GUI
 | ||||
|     ui.action_Start->setEnabled(false); | ||||
|     ui.action_Start->setText(tr("Start")); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue