From b2aa638b1f1862f53c4fc924a00d32de4605c12f Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Mon, 18 Aug 2025 10:23:57 -0400 Subject: [PATCH] feat: Support Remote Desktop token persistance --- src/lib/common/Settings.h | 1 + src/lib/platform/PortalRemoteDesktop.cpp | 11 ++++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/lib/common/Settings.h b/src/lib/common/Settings.h index c3bc87a48..27c93e154 100644 --- a/src/lib/common/Settings.h +++ b/src/lib/common/Settings.h @@ -37,6 +37,7 @@ public: inline static const auto InvertScrollDirection = QStringLiteral("client/invertScrollDirection"); inline static const auto LanguageSync = QStringLiteral("client/languageSync"); inline static const auto RemoteHost = QStringLiteral("client/remoteHost"); + inline static const auto XdpRestoreToken = QStringLiteral("client/xdpRestoreToken"); }; struct Core { diff --git a/src/lib/platform/PortalRemoteDesktop.cpp b/src/lib/platform/PortalRemoteDesktop.cpp index 8ca533b9d..8f12699c9 100644 --- a/src/lib/platform/PortalRemoteDesktop.cpp +++ b/src/lib/platform/PortalRemoteDesktop.cpp @@ -1,5 +1,6 @@ /* * Deskflow -- mouse and keyboard sharing utility + * SPDX-FileCopyrightText: (C) 2025 Deskflow Developers * SPDX-FileCopyrightText: (C) 2024 Symless Ltd. * SPDX-FileCopyrightText: (C) 2022 Red Hat, Inc. * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception @@ -8,6 +9,7 @@ #include "platform/PortalRemoteDesktop.h" #include "base/Log.h" #include "base/TMethodJob.h" +#include "common/Settings.h" namespace deskflow { @@ -88,6 +90,9 @@ void PortalRemoteDesktop::handleSessionStarted(GObject *object, GAsyncResult *re } m_sessionRestoreToken = xdp_session_get_restore_token(session); + if (m_sessionRestoreToken) { + Settings::setValue(Settings::Client::XdpRestoreToken, QString(m_sessionRestoreToken)); + } // ConnectToEIS requires version 2 of the xdg-desktop-portal (and the same // version in the impl.portal), i.e. you'll need an updated compositor on @@ -144,10 +149,14 @@ void PortalRemoteDesktop::handleInitSession(GObject *object, GAsyncResult *res) gboolean PortalRemoteDesktop::initSession() { + if (auto sessionToken = Settings::value(Settings::Client::XdpRestoreToken).toByteArray(); !sessionToken.isEmpty()) { + m_sessionRestoreToken = sessionToken.data(); + } + LOG_DEBUG("setting up remote desktop session with restore token %s", m_sessionRestoreToken); xdp_portal_create_remote_desktop_session_full( m_portal, static_cast(XDP_DEVICE_POINTER | XDP_DEVICE_KEYBOARD), XDP_OUTPUT_NONE, - XDP_REMOTE_DESKTOP_FLAG_NONE, XDP_CURSOR_MODE_HIDDEN, XDP_PERSIST_MODE_TRANSIENT, m_sessionRestoreToken, + XDP_REMOTE_DESKTOP_FLAG_NONE, XDP_CURSOR_MODE_HIDDEN, XDP_PERSIST_MODE_PERSISTENT, m_sessionRestoreToken, nullptr, // cancellable [](GObject *obj, GAsyncResult *res, gpointer data) { static_cast(data)->handleInitSession(obj, res);