File indexing completed on 2024-05-12 09:41:26

0001 /*  This file is part of the KDE project
0002     SPDX-FileCopyrightText: 2006 Kevin Ottens <ervin@kde.org>
0003     SPDX-FileCopyrightText: 2008-2010 Dario Freddi <drf@kde.org>
0004     SPDX-FileCopyrightText: 2010 Alejandro Fiestas <alex@eyeos.org>
0005     SPDX-FileCopyrightText: 2010-2013 Lukáš Tinkl <ltinkl@redhat.com>
0006     SPDX-FileCopyrightText: 2015 Kai Uwe Broulik <kde@privat.broulik.de>
0007 
0008     SPDX-License-Identifier: LGPL-2.0-only
0009 
0010 */
0011 
0012 #include "lidcontroller.h"
0013 
0014 #define UPOWER_SERVICE "org.freedesktop.UPower"
0015 #define UPOWER_PATH "/org/freedesktop/UPower"
0016 #define UPOWER_IFACE "org.freedesktop.UPower"
0017 
0018 LidController::LidController()
0019     : QObject()
0020 {
0021     if (!QDBusConnection::systemBus().interface()->isServiceRegistered(UPOWER_SERVICE)) {
0022         // Activate it.
0023         QDBusConnection::systemBus().interface()->startService(UPOWER_SERVICE);
0024     }
0025 
0026     m_upowerInterface = new OrgFreedesktopUPowerInterface(UPOWER_SERVICE, "/org/freedesktop/UPower", QDBusConnection::systemBus(), this);
0027 
0028     QDBusConnection::systemBus().connect(UPOWER_SERVICE,
0029                                          UPOWER_PATH,
0030                                          "org.freedesktop.DBus.Properties",
0031                                          "PropertiesChanged",
0032                                          this,
0033                                          SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0034 
0035     m_isLidPresent = m_upowerInterface->lidIsPresent();
0036     m_isLidClosed = m_upowerInterface->lidIsClosed();
0037     Q_EMIT lidClosedChanged(m_isLidClosed);
0038 }
0039 
0040 void LidController::onPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps)
0041 {
0042     if (ifaceName != UPOWER_IFACE) {
0043         return;
0044     }
0045 
0046     if (m_isLidPresent) {
0047         bool lidIsClosed = m_isLidClosed;
0048         if (changedProps.contains(QStringLiteral("LidIsClosed"))) {
0049             lidIsClosed = changedProps[QStringLiteral("LidIsClosed")].toBool();
0050         } else if (invalidatedProps.contains(QStringLiteral("LidIsClosed"))) {
0051             lidIsClosed = m_upowerInterface->lidIsClosed();
0052         }
0053         if (lidIsClosed != m_isLidClosed) {
0054             m_isLidClosed = lidIsClosed;
0055             Q_EMIT lidClosedChanged(m_isLidClosed);
0056         }
0057     }
0058 }
0059 
0060 bool LidController::isLidClosed() const
0061 {
0062     return m_isLidClosed;
0063 }
0064 
0065 bool LidController::isLidPresent() const
0066 {
0067     return m_isLidPresent;
0068 }