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 }