aboutsummaryrefslogtreecommitdiff
path: root/src/yuzu/main.cpp
diff options
context:
space:
mode:
authorzeltermann <136022354+zeltermann@users.noreply.github.com>2023-06-09 11:42:23 +0700
committerzeltermann <136022354+zeltermann@users.noreply.github.com>2023-06-24 14:51:41 +0700
commit482fbded9b2dd2d5dd0ac55d66d456d7ffefaaa2 (patch)
tree1486f0f89d1734bfd915d9279cfdbcb1c15d585b /src/yuzu/main.cpp
parent3a991f3aefc57d1424e558517d6a1b745a910609 (diff)
Only use SDL wakelock on Linux
SDL has internally fixed shenanigans related to wakelocking through DBus from inside sandboxes from around August 2022, so we can now remove the workaround we used since 2021.
Diffstat (limited to 'src/yuzu/main.cpp')
-rw-r--r--src/yuzu/main.cpp58
1 files changed, 8 insertions, 50 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 45a39451dc..2133f7343c 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -447,6 +447,14 @@ GMainWindow::GMainWindow(std::unique_ptr<Config> config_, bool has_broken_vulkan
#if defined(HAVE_SDL2) && !defined(_WIN32)
SDL_InitSubSystem(SDL_INIT_VIDEO);
+
+ // Set a screensaver inhibition reason string. Currently passed to DBus by SDL and visible to
+ // the user through their desktop environment.
+ //: TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the
+ //: computer from sleeping
+ QByteArray wakelock_reason = tr("Running a game").toLatin1();
+ SDL_SetHint(SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME, wakelock_reason.data());
+
// SDL disables the screen saver by default, and setting the hint
// SDL_HINT_VIDEO_ALLOW_SCREENSAVER doesn't seem to work, so we just enable the screen saver
// for now.
@@ -1623,45 +1631,6 @@ void GMainWindow::OnPrepareForSleep(bool prepare_sleep) {
}
#ifdef __unix__
-static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) {
- if (!QDBusConnection::sessionBus().isConnected()) {
- return {};
- }
- // reference: https://flatpak.github.io/xdg-desktop-portal/#gdbus-org.freedesktop.portal.Inhibit
- QDBusInterface xdp(QString::fromLatin1("org.freedesktop.portal.Desktop"),
- QString::fromLatin1("/org/freedesktop/portal/desktop"),
- QString::fromLatin1("org.freedesktop.portal.Inhibit"));
- if (!xdp.isValid()) {
- LOG_WARNING(Frontend, "Couldn't connect to XDP D-Bus endpoint");
- return {};
- }
- QVariantMap options = {};
- //: TRANSLATORS: This string is shown to the user to explain why yuzu needs to prevent the
- //: computer from sleeping
- options.insert(QString::fromLatin1("reason"),
- QCoreApplication::translate("GMainWindow", "yuzu is running a game"));
- // 0x4: Suspend lock; 0x8: Idle lock
- QDBusReply<QDBusObjectPath> reply =
- xdp.call(QString::fromLatin1("Inhibit"),
- QString::fromLatin1("x11:") + QString::number(window_id, 16), 12U, options);
-
- if (reply.isValid()) {
- return reply.value();
- }
- LOG_WARNING(Frontend, "Couldn't read Inhibit reply from XDP: {}",
- reply.error().message().toStdString());
- return {};
-}
-
-static void ReleaseWakeLockLinux(QDBusObjectPath lock) {
- if (!QDBusConnection::sessionBus().isConnected()) {
- return;
- }
- QDBusInterface unlocker(QString::fromLatin1("org.freedesktop.portal.Desktop"), lock.path(),
- QString::fromLatin1("org.freedesktop.portal.Request"));
- unlocker.call(QString::fromLatin1("Close"));
-}
-
std::array<int, 3> GMainWindow::sig_interrupt_fds{0, 0, 0};
void GMainWindow::SetupSigInterrupts() {
@@ -1714,12 +1683,6 @@ void GMainWindow::PreventOSSleep() {
SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED | ES_DISPLAY_REQUIRED);
#elif defined(HAVE_SDL2)
SDL_DisableScreenSaver();
-#ifdef __unix__
- auto reply = HoldWakeLockLinux(winId());
- if (reply) {
- wake_lock = std::move(reply.value());
- }
-#endif
#endif
}
@@ -1728,11 +1691,6 @@ void GMainWindow::AllowOSSleep() {
SetThreadExecutionState(ES_CONTINUOUS);
#elif defined(HAVE_SDL2)
SDL_EnableScreenSaver();
-#ifdef __unix__
- if (!wake_lock.path().isEmpty()) {
- ReleaseWakeLockLinux(wake_lock);
- }
-#endif
#endif
}