26 #include <QtCore/QCoreApplication>
31 : managerIface("org.freedesktop.PowerManagement",
32 "/org/freedesktop/PowerManagement",
33 QDBusConnection::sessionBus()),
34 policyAgentIface("org.kde.Solid.PowerManagement.PolicyAgent",
35 "/org/kde/Solid/PowerManagement/PolicyAgent",
36 QDBusConnection::sessionBus()),
37 inhibitIface("org.freedesktop.PowerManagement.Inhibit",
38 "/org/freedesktop/PowerManagement/Inhibit",
39 QDBusConnection::sessionBus()),
40 serviceWatcher("org.kde.Solid.PowerManagement",
41 QDBusConnection::sessionBus(),
42 QDBusServiceWatcher::WatchForRegistration)
44 powerSaveStatus = managerIface.GetPowerSaveStatus();
46 if (managerIface.CanSuspend())
48 if (managerIface.CanHibernate())
51 connect(&managerIface, SIGNAL(CanSuspendChanged(
bool)),
52 this, SLOT(slotCanSuspendChanged(
bool)));
53 connect(&managerIface, SIGNAL(CanHibernateChanged(
bool)),
54 this, SLOT(slotCanHibernateChanged(
bool)));
55 connect(&managerIface, SIGNAL(PowerSaveStatusChanged(
bool)),
56 this, SLOT(slotPowerSaveStatusChanged(
bool)));
57 connect(&serviceWatcher, SIGNAL(serviceRegistered(QString)),
58 this, SLOT(slotServiceRegistered(QString)));
61 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(
"org.kde.Solid.PowerManagement")) {
62 slotServiceRegistered(
"org.kde.Solid.PowerManagement");
76 return globalPowerManager->powerSaveStatus;
81 return globalPowerManager->supportedSleepStates;
89 if (!globalPowerManager->supportedSleepStates.contains(state)) {
98 globalPowerManager->managerIface.Suspend();
101 globalPowerManager->managerIface.Hibernate();
108 QDBusReply<uint> reply;
109 if (globalPowerManager->policyAgentIface.isValid()) {
110 reply = globalPowerManager->policyAgentIface.AddInhibition(
112 QCoreApplication::applicationName(), reason);
115 reply = globalPowerManager->inhibitIface.Inhibit(QCoreApplication::applicationName(), reason);
126 if (globalPowerManager->policyAgentIface.isValid()) {
127 return globalPowerManager->policyAgentIface.ReleaseInhibition(cookie).isValid();
130 return globalPowerManager->inhibitIface.UnInhibit(cookie).isValid();
136 if (globalPowerManager->policyAgentIface.isValid()) {
137 QDBusReply<uint> reply = globalPowerManager->policyAgentIface.AddInhibition(
139 QCoreApplication::applicationName(), reason);
141 if (reply.isValid()) {
142 QDBusMessage message = QDBusMessage::createMethodCall(
"org.freedesktop.ScreenSaver",
"/ScreenSaver",
143 "org.freedesktop.ScreenSaver",
"Inhibit");
144 message << QCoreApplication::applicationName();
147 QDBusPendingReply<uint> ssReply = QDBusConnection::sessionBus().asyncCall(message);
148 ssReply.waitForFinished();
149 if (ssReply.isValid()) {
150 globalPowerManager->screensaverCookiesForPowerDevilCookies.insert(reply, ssReply.value());
165 if (globalPowerManager->policyAgentIface.isValid()) {
166 bool result = globalPowerManager->policyAgentIface.ReleaseInhibition(cookie).isValid();
168 if (globalPowerManager->screensaverCookiesForPowerDevilCookies.contains(cookie)) {
169 QDBusMessage message = QDBusMessage::createMethodCall(
"org.freedesktop.ScreenSaver",
"/ScreenSaver",
170 "org.freedesktop.ScreenSaver",
"UnInhibit");
171 message << globalPowerManager->screensaverCookiesForPowerDevilCookies.take(cookie);
172 QDBusConnection::sessionBus().asyncCall(message);
184 return globalPowerManager;
207 powerSaveStatus = newState;
208 emit appShouldConserveResourcesChanged(powerSaveStatus);
213 Q_UNUSED(serviceName);
216 QDBusMessage call = QDBusMessage::createMethodCall(
"org.kde.Solid.PowerManagement",
217 "/org/kde/Solid/PowerManagement",
218 "org.kde.Solid.PowerManagement",
219 "backendCapabilities");
220 QDBusPendingReply< uint > reply = QDBusConnection::sessionBus().asyncCall(call);
221 reply.waitForFinished();
223 if (reply.isValid() && reply.value() > 0) {
225 QDBusConnection::sessionBus().connect(
"org.kde.Solid.PowerManagement",
226 "/org/kde/Solid/PowerManagement",
227 "org.kde.Solid.PowerManagement",
228 "resumingFromSuspend",
230 SIGNAL(resumingFromSuspend()));
234 #include "powermanagement_p.moc"
235 #include "powermanagement.moc"