/* * SPDX-FileCopyrightText: 2017 Red Hat Inc * * SPDX-License-Identifier: LGPL-2.0-or-later * * SPDX-FileCopyrightText: 2017 Jan Grulich */ #include "inhibit.h" #include "inhibit_debug.h" #include #include #include #include #include InhibitPortal::InhibitPortal(QObject *parent) : QDBusAbstractAdaptor(parent) { } void InhibitPortal::Inhibit(const QDBusObjectPath &handle, const QString &app_id, const QString &window, uint flags, const QVariantMap &options) { qCDebug(XdgDesktopPortalKdeInhibit) << "Inhibit called with parameters:"; qCDebug(XdgDesktopPortalKdeInhibit) << " handle: " << handle.path(); qCDebug(XdgDesktopPortalKdeInhibit) << " app_id: " << app_id; qCDebug(XdgDesktopPortalKdeInhibit) << " window: " << window; qCDebug(XdgDesktopPortalKdeInhibit) << " flags: " << flags; qCDebug(XdgDesktopPortalKdeInhibit) << " options: " << options; QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.kde.Solid.PowerManagement"), QStringLiteral("/org/kde/Solid/PowerManagement/PolicyAgent"), QStringLiteral("org.kde.Solid.PowerManagement.PolicyAgent"), QStringLiteral("AddInhibition")); uint policies = 0; if (flags & 4) { // Suspend policies |= 1; // InterruptSession a.k.a. logind "sleep" } if (flags & 8) { // Idle policies |= 4; // ChangeScreenSettings a.k.a. logind "idle" } if (policies == 0) { qCDebug(XdgDesktopPortalKdeInhibit) << "Inhibition error: flags not supported by KDE policy agent:" << flags; return; } message << policies << app_id << options.value(QStringLiteral("reason")).toString(); QDBusPendingCall pendingCall = QDBusConnection::sessionBus().asyncCall(message); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pendingCall); connect(watcher, &QDBusPendingCallWatcher::finished, [handle, this](QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (reply.isError()) { qCDebug(XdgDesktopPortalKdeInhibit) << "Inhibition error: " << reply.error().message(); } else { QDBusConnection sessionBus = QDBusConnection::sessionBus(); new Request(handle, this, QStringLiteral("org.freedesktop.impl.portal.Inhibit"), QVariant(reply.value())); } }); }