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

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     SPDX-FileCopyrightText: 2023 Nicolas Fella <nicolas.fella@gmx.de>
0008 
0009     SPDX-License-Identifier: LGPL-2.0-only
0010 
0011 */
0012 
0013 #include "suspendcontroller.h"
0014 
0015 #include <QDBusConnection>
0016 #include <QDBusConnectionInterface>
0017 
0018 #define LOGIN1_SERVICE "org.freedesktop.login1"
0019 #define CONSOLEKIT2_SERVICE "org.freedesktop.ConsoleKit"
0020 
0021 SuspendController::SuspendController()
0022     : QObject()
0023 {
0024     // interfaces
0025     if (!QDBusConnection::systemBus().interface()->isServiceRegistered(LOGIN1_SERVICE)) {
0026         // Activate it.
0027         QDBusConnection::systemBus().interface()->startService(LOGIN1_SERVICE);
0028     }
0029 
0030     if (!QDBusConnection::systemBus().interface()->isServiceRegistered(CONSOLEKIT2_SERVICE)) {
0031         // Activate it.
0032         QDBusConnection::systemBus().interface()->startService(CONSOLEKIT2_SERVICE);
0033     }
0034 
0035     if (QDBusConnection::systemBus().interface()->isServiceRegistered(LOGIN1_SERVICE)) {
0036         m_login1Interface = new QDBusInterface(LOGIN1_SERVICE, "/org/freedesktop/login1", "org.freedesktop.login1.Manager", QDBusConnection::systemBus(), this);
0037     }
0038 
0039     // if login1 isn't available, try using the same interface with ConsoleKit2
0040     if (!m_login1Interface && QDBusConnection::systemBus().interface()->isServiceRegistered(CONSOLEKIT2_SERVICE)) {
0041         m_login1Interface = new QDBusInterface(CONSOLEKIT2_SERVICE,
0042                                                "/org/freedesktop/ConsoleKit/Manager",
0043                                                "org.freedesktop.ConsoleKit.Manager",
0044                                                QDBusConnection::systemBus(),
0045                                                this);
0046     }
0047 
0048     // "resuming" signal
0049     if (m_login1Interface) {
0050         connect(m_login1Interface.data(), SIGNAL(PrepareForSleep(bool)), this, SLOT(slotLogin1PrepareForSleep(bool)));
0051     }
0052 }
0053 
0054 bool SuspendController::canSuspend() const
0055 {
0056     return m_sessionManagement.canSuspend();
0057 }
0058 
0059 void SuspendController::suspend()
0060 {
0061     m_sessionManagement.suspend();
0062 }
0063 
0064 bool SuspendController::canHibernate() const
0065 {
0066     return m_sessionManagement.canHibernate();
0067 }
0068 
0069 void SuspendController::hibernate()
0070 {
0071     m_sessionManagement.hibernate();
0072 }
0073 
0074 bool SuspendController::canHybridSuspend() const
0075 {
0076     return m_sessionManagement.canHybridSuspend();
0077 }
0078 
0079 void SuspendController::hybridSuspend()
0080 {
0081     m_sessionManagement.hybridSuspend();
0082 }
0083 
0084 bool SuspendController::canSuspendThenHibernate() const
0085 {
0086     return m_sessionManagement.canSuspendThenHibernate();
0087 }
0088 
0089 void SuspendController::suspendThenHibernate()
0090 {
0091     m_sessionManagement.suspendThenHibernate();
0092 }
0093 
0094 void SuspendController::slotLogin1PrepareForSleep(bool active)
0095 {
0096     if (active) {
0097         Q_EMIT aboutToSuspend();
0098     } else {
0099         Q_EMIT resumeFromSuspend();
0100     }
0101 }