File indexing completed on 2024-05-12 09:38:36

0001 // SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003 
0004 #include "lockscreendbusclient.h"
0005 
0006 #include <QDBusConnection>
0007 #include <QDBusMessage>
0008 #include <QDBusReply>
0009 #include <QTimer>
0010 
0011 LockscreenDBusClient::LockscreenDBusClient(QObject *parent)
0012     : QObject{parent}
0013 {
0014     QDBusMessage request = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.ScreenSaver"),
0015                                                           QStringLiteral("/ScreenSaver"),
0016                                                           QStringLiteral("org.freedesktop.ScreenSaver"),
0017                                                           QStringLiteral("GetActive"));
0018 
0019     const QDBusReply<bool> response = QDBusConnection::sessionBus().call(request);
0020 
0021     QDBusConnection::sessionBus().callWithCallback(request, this, SLOT(slotLockscreenActiveChanged(bool)), SLOT(dbusError(QDBusError)));
0022 
0023     QDBusConnection::sessionBus().connect(QStringLiteral("org.freedesktop.ScreenSaver"),
0024                                           QStringLiteral("/ScreenSaver"),
0025                                           QStringLiteral("org.freedesktop.ScreenSaver"),
0026                                           QStringLiteral("ActiveChanged"),
0027                                           this,
0028                                           SLOT(slotLockscreenActiveChanged(bool)));
0029 }
0030 
0031 bool LockscreenDBusClient::lockscreenActive() const
0032 {
0033     return m_lockscreenActive;
0034 }
0035 
0036 void LockscreenDBusClient::slotLockscreenActiveChanged(bool active)
0037 {
0038     if (active != m_lockscreenActive) {
0039         m_lockscreenActive = active;
0040 
0041         Q_EMIT lockscreenActiveChanged();
0042 
0043         // we don't want to trigger a lockscreen changing signal for the first property fetch (in constructor),
0044         // since it's just getting the current state
0045         if (m_firstPropertySet) {
0046             m_lockscreenActive ? Q_EMIT lockscreenLocked() : Q_EMIT lockscreenUnlocked();
0047         }
0048         m_firstPropertySet = true;
0049     }
0050 }
0051 
0052 void LockscreenDBusClient::dbusError(QDBusError error)
0053 {
0054     qDebug() << "Error fetching lockscreen state using DBus:" << error.message();
0055 }