mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	citra-sdl: use the result of system.RunLoop()
If a shutdown was requested by the application, close the SDL window, initiating the normal shutdown procedure. This causes a graceful exit process instead of hanging.
This commit is contained in:
		
							parent
							
								
									a90b0daebe
								
							
						
					
					
						commit
						c634c263db
					
				
					 3 changed files with 21 additions and 2 deletions
				
			
		|  | @ -391,6 +391,8 @@ int main(int argc, char** argv) { | |||
|         return -1; | ||||
|     case Core::System::ResultStatus::Success: | ||||
|         break; // Expected case
 | ||||
|     default: | ||||
|         LOG_ERROR(Frontend, "Error while loading ROM: {}", system.GetStatusDetails()); | ||||
|     } | ||||
| 
 | ||||
|     system.TelemetrySession().AddField(Common::Telemetry::FieldType::App, "Frontend", "SDL"); | ||||
|  | @ -437,7 +439,17 @@ int main(int argc, char** argv) { | |||
|         }); | ||||
| 
 | ||||
|     while (emu_window->IsOpen()) { | ||||
|         system.RunLoop(); | ||||
|         const auto result = system.RunLoop(); | ||||
| 
 | ||||
|         switch (result) { | ||||
|         case Core::System::ResultStatus::ShutdownRequested: | ||||
|             emu_window->Close(); | ||||
|             break; | ||||
|         case Core::System::ResultStatus::Success: | ||||
|             break; | ||||
|         default: | ||||
|             LOG_ERROR(Frontend, "Error in main run loop: {}", result, system.GetStatusDetails()); | ||||
|         } | ||||
|     } | ||||
|     render_thread.join(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -104,6 +104,10 @@ bool EmuWindow_SDL2::IsOpen() const { | |||
|     return is_open; | ||||
| } | ||||
| 
 | ||||
| void EmuWindow_SDL2::Close() { | ||||
|     is_open = false; | ||||
| } | ||||
| 
 | ||||
| void EmuWindow_SDL2::OnResize() { | ||||
|     int width, height; | ||||
|     SDL_GetWindowSize(render_window, &width, &height); | ||||
|  | @ -134,7 +138,7 @@ void EmuWindow_SDL2::Fullscreen() { | |||
| EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { | ||||
|     // Initialize the window
 | ||||
|     if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) < 0) { | ||||
|         LOG_CRITICAL(Frontend, "Failed to initialize SDL2! Exiting..."); | ||||
|         LOG_CRITICAL(Frontend, "Failed to initialize SDL2: {}! Exiting...", SDL_GetError()); | ||||
|         exit(1); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -46,6 +46,9 @@ public: | |||
|     /// Whether the window is still open, and a close request hasn't yet been sent
 | ||||
|     bool IsOpen() const; | ||||
| 
 | ||||
|     /// Close the window.
 | ||||
|     void Close(); | ||||
| 
 | ||||
|     /// Creates a new context that is shared with the current context
 | ||||
|     std::unique_ptr<GraphicsContext> CreateSharedContext() const override; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue