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 }