27 #include <QtCore/QCoreApplication>
32 : managerIface(QLatin1String("org.freedesktop.PowerManagement"),
33 QLatin1String("/org/freedesktop/PowerManagement"),
34 QDBusConnection::sessionBus()),
35 policyAgentIface(QLatin1String("org.kde.Solid.PowerManagement.PolicyAgent"),
36 QLatin1String("/org/kde/Solid/PowerManagement/PolicyAgent"),
37 QDBusConnection::sessionBus()),
38 inhibitIface(QLatin1String("org.freedesktop.PowerManagement.Inhibit"),
39 QLatin1String("/org/freedesktop/PowerManagement/Inhibit"),
40 QDBusConnection::sessionBus()),
41 serviceWatcher(QLatin1String("org.kde.Solid.PowerManagement"),
42 QDBusConnection::sessionBus(),
43 QDBusServiceWatcher::WatchForRegistration | QDBusServiceWatcher::WatchForUnregistration),
44 powerSaveStatus(false)
46 serviceWatcher.addWatchedService(QLatin1String(
"org.freedesktop.PowerManagement"));
48 connect(&managerIface, SIGNAL(CanSuspendChanged(
bool)),
49 this, SLOT(slotCanSuspendChanged(
bool)));
50 connect(&managerIface, SIGNAL(CanHibernateChanged(
bool)),
51 this, SLOT(slotCanHibernateChanged(
bool)));
52 connect(&managerIface, SIGNAL(CanHybridSuspendChanged(
bool)),
53 this, SLOT(slotCanHybridSuspendChanged(
bool)));
54 connect(&managerIface, SIGNAL(PowerSaveStatusChanged(
bool)),
55 this, SLOT(slotPowerSaveStatusChanged(
bool)));
56 connect(&serviceWatcher, SIGNAL(serviceRegistered(QString)),
57 this, SLOT(slotServiceRegistered(QString)));
58 connect(&serviceWatcher, SIGNAL(serviceUnregistered(QString)),
59 this, SLOT(slotServiceUnregistered(QString)));
62 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QLatin1String(
"org.kde.Solid.PowerManagement"))) {
63 slotServiceRegistered(QLatin1String(
"org.kde.Solid.PowerManagement"));
65 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QLatin1String(
"org.freedesktop.PowerManagement"))) {
66 slotServiceRegistered(QLatin1String(
"org.freedesktop.PowerManagement"));
80 return globalPowerManager->powerSaveStatus;
85 return globalPowerManager->supportedSleepStates;
93 if (!globalPowerManager->supportedSleepStates.contains(state)) {
101 globalPowerManager->managerIface.Suspend();
104 globalPowerManager->managerIface.Hibernate();
107 globalPowerManager->managerIface.HybridSuspend();
114 QDBusReply<uint> reply;
115 if (globalPowerManager->policyAgentIface.isValid()) {
116 reply = globalPowerManager->policyAgentIface.AddInhibition(
118 QCoreApplication::applicationName(), reason);
121 reply = globalPowerManager->inhibitIface.Inhibit(QCoreApplication::applicationName(), reason);
132 if (globalPowerManager->policyAgentIface.isValid()) {
133 return globalPowerManager->policyAgentIface.ReleaseInhibition(cookie).isValid();
136 return globalPowerManager->inhibitIface.UnInhibit(cookie).isValid();
142 if (globalPowerManager->policyAgentIface.isValid()) {
143 QDBusReply<uint> reply = globalPowerManager->policyAgentIface.AddInhibition(
145 QCoreApplication::applicationName(), reason);
147 if (reply.isValid()) {
148 QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String(
"org.freedesktop.ScreenSaver"),
149 QLatin1String(
"/ScreenSaver"),
150 QLatin1String(
"org.freedesktop.ScreenSaver"),
151 QLatin1String(
"Inhibit"));
152 message << QCoreApplication::applicationName();
155 QDBusPendingReply<uint> ssReply = QDBusConnection::sessionBus().asyncCall(message);
156 ssReply.waitForFinished();
157 if (ssReply.isValid()) {
158 globalPowerManager->screensaverCookiesForPowerDevilCookies.insert(reply, ssReply.value());
173 if (globalPowerManager->policyAgentIface.isValid()) {
174 bool result = globalPowerManager->policyAgentIface.ReleaseInhibition(cookie).isValid();
176 if (globalPowerManager->screensaverCookiesForPowerDevilCookies.contains(cookie)) {
177 QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String(
"org.freedesktop.ScreenSaver"),
178 QLatin1String(
"/ScreenSaver"),
179 QLatin1String(
"org.freedesktop.ScreenSaver"),
180 QLatin1String(
"UnInhibit"));
181 message << globalPowerManager->screensaverCookiesForPowerDevilCookies.take(cookie);
182 QDBusConnection::sessionBus().asyncCall(message);
194 return globalPowerManager;
238 if (powerSaveStatus == newState) {
242 powerSaveStatus = newState;
243 emit appShouldConserveResourcesChanged(powerSaveStatus);
248 if (serviceName == QLatin1String(
"org.freedesktop.PowerManagement")) {
250 QDBusPendingReply<bool> suspendReply = managerIface.CanSuspend();
251 suspendReply.waitForFinished();
252 slotCanSuspendChanged(suspendReply.isValid() ? suspendReply.value() :
false);
254 QDBusPendingReply<bool> hibernateReply = managerIface.CanHibernate();
255 hibernateReply.waitForFinished();
256 slotCanHibernateChanged(hibernateReply.isValid() ? hibernateReply.value() :
false);
258 QDBusPendingReply<bool> hybridSuspendReply = managerIface.CanHybridSuspend();
259 hybridSuspendReply.waitForFinished();
260 slotCanHybridSuspendChanged(hybridSuspendReply.isValid() ? hybridSuspendReply.value() :
false);
262 QDBusPendingReply<bool> saveStatusReply = managerIface.GetPowerSaveStatus();
263 saveStatusReply.waitForFinished();
264 slotPowerSaveStatusChanged(saveStatusReply.isValid() ? saveStatusReply.value() :
false);
267 QDBusMessage call = QDBusMessage::createMethodCall(QLatin1String(
"org.kde.Solid.PowerManagement"),
268 QLatin1String(
"/org/kde/Solid/PowerManagement"),
269 QLatin1String(
"org.kde.Solid.PowerManagement"),
270 QLatin1String(
"backendCapabilities"));
271 QDBusPendingReply< uint > reply = QDBusConnection::sessionBus().asyncCall(call);
272 reply.waitForFinished();
274 if (reply.isValid() && reply.value() > 0) {
276 QDBusConnection::sessionBus().connect(QLatin1String(
"org.kde.Solid.PowerManagement"),
277 QLatin1String(
"/org/kde/Solid/PowerManagement"),
278 QLatin1String(
"org.kde.Solid.PowerManagement"),
279 QLatin1String(
"resumingFromSuspend"),
281 SIGNAL(resumingFromSuspend()));
288 if (serviceName == QLatin1String(
"org.freedesktop.PowerManagement")) {
290 slotCanSuspendChanged(
false);
291 slotCanHibernateChanged(
false);
292 slotCanHybridSuspendChanged(
false);
293 slotPowerSaveStatusChanged(
false);
296 QDBusConnection::sessionBus().disconnect(QLatin1String(
"org.kde.Solid.PowerManagement"),
297 QLatin1String(
"/org/kde/Solid/PowerManagement"),
298 QLatin1String(
"org.kde.Solid.PowerManagement"),
299 QLatin1String(
"resumingFromSuspend"),
301 SIGNAL(resumingFromSuspend()));
305 #include "powermanagement_p.moc"
306 #include "powermanagement.moc"