mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-10-31 06:46:40 +08:00 
			
		
		
		
	implement pause on system suspend (#8585)
This commit is contained in:
		
							parent
							
								
									ea861cc1c4
								
							
						
					
					
						commit
						b7642cff36
					
				| @ -386,6 +386,8 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) | ||||
|     SDL_EnableScreenSaver(); | ||||
| #endif | ||||
| 
 | ||||
|     SetupPrepareForSleep(); | ||||
| 
 | ||||
|     Common::Log::Start(); | ||||
| 
 | ||||
|     QStringList args = QApplication::arguments(); | ||||
| @ -1327,6 +1329,43 @@ void GMainWindow::OnDisplayTitleBars(bool show) { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::SetupPrepareForSleep() { | ||||
| #ifdef __linux__ | ||||
|     auto bus = QDBusConnection::systemBus(); | ||||
|     if (bus.isConnected()) { | ||||
|         const bool success = bus.connect( | ||||
|             QStringLiteral("org.freedesktop.login1"), QStringLiteral("/org/freedesktop/login1"), | ||||
|             QStringLiteral("org.freedesktop.login1.Manager"), QStringLiteral("PrepareForSleep"), | ||||
|             QStringLiteral("b"), this, SLOT(OnPrepareForSleep(bool))); | ||||
| 
 | ||||
|         if (!success) { | ||||
|             LOG_WARNING(Frontend, "Couldn't register PrepareForSleep signal"); | ||||
|         } | ||||
|     } else { | ||||
|         LOG_WARNING(Frontend, "QDBusConnection system bus is not connected"); | ||||
|     } | ||||
| #endif // __linux__
 | ||||
| } | ||||
| 
 | ||||
| void GMainWindow::OnPrepareForSleep(bool prepare_sleep) { | ||||
|     if (emu_thread == nullptr) { | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     if (prepare_sleep) { | ||||
|         if (emu_thread->IsRunning()) { | ||||
|             auto_paused = true; | ||||
|             OnPauseGame(); | ||||
|         } | ||||
|     } else { | ||||
|         if (!emu_thread->IsRunning() && auto_paused) { | ||||
|             auto_paused = false; | ||||
|             RequestGameResume(); | ||||
|             OnStartGame(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| #ifdef __linux__ | ||||
| static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) { | ||||
|     if (!QDBusConnection::sessionBus().isConnected()) { | ||||
|  | ||||
| @ -204,7 +204,7 @@ private: | ||||
|     void ConnectMenuEvents(); | ||||
|     void UpdateMenuState(); | ||||
| 
 | ||||
|     MultiplayerState* multiplayer_state = nullptr; | ||||
|     void SetupPrepareForSleep(); | ||||
| 
 | ||||
|     void PreventOSSleep(); | ||||
|     void AllowOSSleep(); | ||||
| @ -265,6 +265,7 @@ private slots: | ||||
|     void OnPauseGame(); | ||||
|     void OnPauseContinueGame(); | ||||
|     void OnStopGame(); | ||||
|     void OnPrepareForSleep(bool prepare_sleep); | ||||
|     void OnMenuReportCompatibility(); | ||||
|     void OnOpenModsPage(); | ||||
|     void OnOpenQuickstartGuide(); | ||||
| @ -355,6 +356,8 @@ private: | ||||
|     std::unique_ptr<DiscordRPC::DiscordInterface> discord_rpc; | ||||
|     std::shared_ptr<InputCommon::InputSubsystem> input_subsystem; | ||||
| 
 | ||||
|     MultiplayerState* multiplayer_state = nullptr; | ||||
| 
 | ||||
|     GRenderWindow* render_window; | ||||
|     GameList* game_list; | ||||
|     LoadingScreen* loading_screen; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user