diff options
| author | 2022-07-27 16:46:03 -0700 | |
|---|---|---|
| committer | 2022-07-27 19:46:03 -0400 | |
| commit | b7642cff361176161e848b004143da4777d0971d (patch) | |
| tree | 04bfe8b7914f7f71cb67af0d7be078a3ca91db44 /src | |
| parent | Merge pull request #8542 from Morph1984/gpu-use-old-q (diff) | |
| download | yuzu-b7642cff361176161e848b004143da4777d0971d.tar.gz yuzu-b7642cff361176161e848b004143da4777d0971d.tar.xz yuzu-b7642cff361176161e848b004143da4777d0971d.zip | |
implement pause on system suspend (#8585)
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/main.cpp | 39 | ||||
| -rw-r--r-- | src/yuzu/main.h | 5 |
2 files changed, 43 insertions, 1 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index ef91ef19c..e8a57f4b4 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp | |||
| @@ -386,6 +386,8 @@ GMainWindow::GMainWindow(bool has_broken_vulkan) | |||
| 386 | SDL_EnableScreenSaver(); | 386 | SDL_EnableScreenSaver(); |
| 387 | #endif | 387 | #endif |
| 388 | 388 | ||
| 389 | SetupPrepareForSleep(); | ||
| 390 | |||
| 389 | Common::Log::Start(); | 391 | Common::Log::Start(); |
| 390 | 392 | ||
| 391 | QStringList args = QApplication::arguments(); | 393 | QStringList args = QApplication::arguments(); |
| @@ -1327,6 +1329,43 @@ void GMainWindow::OnDisplayTitleBars(bool show) { | |||
| 1327 | } | 1329 | } |
| 1328 | } | 1330 | } |
| 1329 | 1331 | ||
| 1332 | void GMainWindow::SetupPrepareForSleep() { | ||
| 1333 | #ifdef __linux__ | ||
| 1334 | auto bus = QDBusConnection::systemBus(); | ||
| 1335 | if (bus.isConnected()) { | ||
| 1336 | const bool success = bus.connect( | ||
| 1337 | QStringLiteral("org.freedesktop.login1"), QStringLiteral("/org/freedesktop/login1"), | ||
| 1338 | QStringLiteral("org.freedesktop.login1.Manager"), QStringLiteral("PrepareForSleep"), | ||
| 1339 | QStringLiteral("b"), this, SLOT(OnPrepareForSleep(bool))); | ||
| 1340 | |||
| 1341 | if (!success) { | ||
| 1342 | LOG_WARNING(Frontend, "Couldn't register PrepareForSleep signal"); | ||
| 1343 | } | ||
| 1344 | } else { | ||
| 1345 | LOG_WARNING(Frontend, "QDBusConnection system bus is not connected"); | ||
| 1346 | } | ||
| 1347 | #endif // __linux__ | ||
| 1348 | } | ||
| 1349 | |||
| 1350 | void GMainWindow::OnPrepareForSleep(bool prepare_sleep) { | ||
| 1351 | if (emu_thread == nullptr) { | ||
| 1352 | return; | ||
| 1353 | } | ||
| 1354 | |||
| 1355 | if (prepare_sleep) { | ||
| 1356 | if (emu_thread->IsRunning()) { | ||
| 1357 | auto_paused = true; | ||
| 1358 | OnPauseGame(); | ||
| 1359 | } | ||
| 1360 | } else { | ||
| 1361 | if (!emu_thread->IsRunning() && auto_paused) { | ||
| 1362 | auto_paused = false; | ||
| 1363 | RequestGameResume(); | ||
| 1364 | OnStartGame(); | ||
| 1365 | } | ||
| 1366 | } | ||
| 1367 | } | ||
| 1368 | |||
| 1330 | #ifdef __linux__ | 1369 | #ifdef __linux__ |
| 1331 | static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) { | 1370 | static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) { |
| 1332 | if (!QDBusConnection::sessionBus().isConnected()) { | 1371 | if (!QDBusConnection::sessionBus().isConnected()) { |
diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 509bb91df..23b67a14e 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h | |||
| @@ -204,7 +204,7 @@ private: | |||
| 204 | void ConnectMenuEvents(); | 204 | void ConnectMenuEvents(); |
| 205 | void UpdateMenuState(); | 205 | void UpdateMenuState(); |
| 206 | 206 | ||
| 207 | MultiplayerState* multiplayer_state = nullptr; | 207 | void SetupPrepareForSleep(); |
| 208 | 208 | ||
| 209 | void PreventOSSleep(); | 209 | void PreventOSSleep(); |
| 210 | void AllowOSSleep(); | 210 | void AllowOSSleep(); |
| @@ -265,6 +265,7 @@ private slots: | |||
| 265 | void OnPauseGame(); | 265 | void OnPauseGame(); |
| 266 | void OnPauseContinueGame(); | 266 | void OnPauseContinueGame(); |
| 267 | void OnStopGame(); | 267 | void OnStopGame(); |
| 268 | void OnPrepareForSleep(bool prepare_sleep); | ||
| 268 | void OnMenuReportCompatibility(); | 269 | void OnMenuReportCompatibility(); |
| 269 | void OnOpenModsPage(); | 270 | void OnOpenModsPage(); |
| 270 | void OnOpenQuickstartGuide(); | 271 | void OnOpenQuickstartGuide(); |
| @@ -355,6 +356,8 @@ private: | |||
| 355 | std::unique_ptr<DiscordRPC::DiscordInterface> discord_rpc; | 356 | std::unique_ptr<DiscordRPC::DiscordInterface> discord_rpc; |
| 356 | std::shared_ptr<InputCommon::InputSubsystem> input_subsystem; | 357 | std::shared_ptr<InputCommon::InputSubsystem> input_subsystem; |
| 357 | 358 | ||
| 359 | MultiplayerState* multiplayer_state = nullptr; | ||
| 360 | |||
| 358 | GRenderWindow* render_window; | 361 | GRenderWindow* render_window; |
| 359 | GameList* game_list; | 362 | GameList* game_list; |
| 360 | LoadingScreen* loading_screen; | 363 | LoadingScreen* loading_screen; |