|
@@ -386,6 +386,8 @@ GMainWindow::GMainWindow(bool has_broken_vulkan)
|
|
|
SDL_EnableScreenSaver();
|
|
SDL_EnableScreenSaver();
|
|
|
#endif
|
|
#endif
|
|
|
|
|
|
|
|
|
|
+ SetupPrepareForSleep();
|
|
|
|
|
+
|
|
|
Common::Log::Start();
|
|
Common::Log::Start();
|
|
|
|
|
|
|
|
QStringList args = QApplication::arguments();
|
|
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__
|
|
#ifdef __linux__
|
|
|
static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) {
|
|
static std::optional<QDBusObjectPath> HoldWakeLockLinux(u32 window_id = 0) {
|
|
|
if (!QDBusConnection::sessionBus().isConnected()) {
|
|
if (!QDBusConnection::sessionBus().isConnected()) {
|