File indexing completed on 2024-04-28 04:00:49
0001 /* 0002 SPDX-FileCopyrightText: 2014 Alejandro Fiestas Olivares <afiestas@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "fdinhibition.h" 0008 #include "logindinhibitionargument.h" 0009 0010 #include <unistd.h> 0011 0012 #include <QCoreApplication> 0013 #include <QDBusConnection> 0014 #include <QDBusUnixFileDescriptor> 0015 #include <QDebug> 0016 #include <QVariant> 0017 0018 using namespace Solid; 0019 0020 FdInhibition::FdInhibition(Power::InhibitionTypes inhibitions, const QString &description, QObject *parent) 0021 : AbstractInhibition(parent) 0022 , m_state(Inhibition::Stopped) 0023 , m_description(description) 0024 , m_inhibitions(inhibitions) 0025 { 0026 } 0027 0028 FdInhibition::~FdInhibition() 0029 { 0030 close(m_fd); 0031 } 0032 0033 void FdInhibition::start() 0034 { 0035 QDBusMessage msg = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.login1"), 0036 QStringLiteral("/org/freedesktop/login1"), 0037 QStringLiteral("org.freedesktop.login1.Manager"), 0038 QStringLiteral("Inhibit")); 0039 0040 QList<QVariant> args; 0041 args << LogindInhibitionArgument::fromPowerState(m_inhibitions) << QCoreApplication::instance()->applicationName() << m_description 0042 << QStringLiteral("block"); 0043 msg.setArguments(args); 0044 0045 QDBusConnection::systemBus().callWithCallback(msg, this, SLOT(slotDBusReply(QDBusMessage)), SLOT(slotDBusError(QDBusError))); 0046 } 0047 0048 void FdInhibition::stop() 0049 { 0050 close(m_fd); 0051 setState(Inhibition::Stopped); 0052 } 0053 0054 void FdInhibition::setDescription(const QString &description) 0055 { 0056 m_description = description; 0057 } 0058 0059 void FdInhibition::slotDBusReply(const QDBusMessage &msg) 0060 { 0061 m_fd = msg.arguments().first().value<QDBusUnixFileDescriptor>().fileDescriptor(); 0062 setState(Inhibition::Started); 0063 } 0064 0065 void FdInhibition::slotDBusError(const QDBusError &error) 0066 { 0067 qDebug() << error.message(); 0068 } 0069 0070 void FdInhibition::setState(const Inhibition::State &state) 0071 { 0072 if (m_state == state) { 0073 return; 0074 } 0075 0076 m_state = state; 0077 Q_EMIT stateChanged(m_state); 0078 } 0079 0080 Inhibition::State FdInhibition::state() const 0081 { 0082 return m_state; 0083 } 0084 0085 #include "moc_fdinhibition.cpp"