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; |         return -1; | ||||||
|     case Core::System::ResultStatus::Success: |     case Core::System::ResultStatus::Success: | ||||||
|         break; // Expected case
 |         break; // Expected case
 | ||||||
|  |     default: | ||||||
|  |         LOG_ERROR(Frontend, "Error while loading ROM: {}", system.GetStatusDetails()); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     system.TelemetrySession().AddField(Common::Telemetry::FieldType::App, "Frontend", "SDL"); |     system.TelemetrySession().AddField(Common::Telemetry::FieldType::App, "Frontend", "SDL"); | ||||||
|  | @ -437,7 +439,17 @@ int main(int argc, char** argv) { | ||||||
|         }); |         }); | ||||||
| 
 | 
 | ||||||
|     while (emu_window->IsOpen()) { |     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(); |     render_thread.join(); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -104,6 +104,10 @@ bool EmuWindow_SDL2::IsOpen() const { | ||||||
|     return is_open; |     return is_open; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void EmuWindow_SDL2::Close() { | ||||||
|  |     is_open = false; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void EmuWindow_SDL2::OnResize() { | void EmuWindow_SDL2::OnResize() { | ||||||
|     int width, height; |     int width, height; | ||||||
|     SDL_GetWindowSize(render_window, &width, &height); |     SDL_GetWindowSize(render_window, &width, &height); | ||||||
|  | @ -134,7 +138,7 @@ void EmuWindow_SDL2::Fullscreen() { | ||||||
| EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { | EmuWindow_SDL2::EmuWindow_SDL2(bool fullscreen) { | ||||||
|     // Initialize the window
 |     // Initialize the window
 | ||||||
|     if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER) < 0) { |     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); |         exit(1); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -46,6 +46,9 @@ public: | ||||||
|     /// Whether the window is still open, and a close request hasn't yet been sent
 |     /// Whether the window is still open, and a close request hasn't yet been sent
 | ||||||
|     bool IsOpen() const; |     bool IsOpen() const; | ||||||
| 
 | 
 | ||||||
|  |     /// Close the window.
 | ||||||
|  |     void Close(); | ||||||
|  | 
 | ||||||
|     /// Creates a new context that is shared with the current context
 |     /// Creates a new context that is shared with the current context
 | ||||||
|     std::unique_ptr<GraphicsContext> CreateSharedContext() const override; |     std::unique_ptr<GraphicsContext> CreateSharedContext() const override; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue