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 }