summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar snek2022-07-27 16:46:03 -0700
committerGravatar GitHub2022-07-27 19:46:03 -0400
commitb7642cff361176161e848b004143da4777d0971d (patch)
tree04bfe8b7914f7f71cb67af0d7be078a3ca91db44 /src
parentMerge pull request #8542 from Morph1984/gpu-use-old-q (diff)
downloadyuzu-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.cpp39
-rw-r--r--src/yuzu/main.h5
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
1332void 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
1350void 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__
1331static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) { 1370static 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;