26 #include <QtCore/QCoreApplication>
31 : managerIface(QLatin1String("org.freedesktop.PowerManagement"),
32 QLatin1String("/org/freedesktop/PowerManagement"),
33 QDBusConnection::sessionBus()),
34 policyAgentIface(QLatin1String("org.kde.Solid.PowerManagement.PolicyAgent"),
35 QLatin1String("/org/kde/Solid/PowerManagement/PolicyAgent"),
36 QDBusConnection::sessionBus()),
37 inhibitIface(QLatin1String("org.freedesktop.PowerManagement.Inhibit"),
38 QLatin1String("/org/freedesktop/PowerManagement/Inhibit"),
39 QDBusConnection::sessionBus()),
40 serviceWatcher(QLatin1String("org.kde.Solid.PowerManagement"),
41 QDBusConnection::sessionBus(),
42 QDBusServiceWatcher::WatchForRegistration | QDBusServiceWatcher::WatchForUnregistration),
43 powerSaveStatus(false)
45 serviceWatcher.addWatchedService(QLatin1String(
"org.freedesktop.PowerManagement"));
47 connect(&managerIface, SIGNAL(CanSuspendChanged(
bool)),
48 this, SLOT(slotCanSuspendChanged(
bool)));
49 connect(&managerIface, SIGNAL(CanHibernateChanged(
bool)),
50 this, SLOT(slotCanHibernateChanged(
bool)));
51 connect(&managerIface, SIGNAL(PowerSaveStatusChanged(
bool)),
52 this, SLOT(slotPowerSaveStatusChanged(
bool)));
53 connect(&serviceWatcher, SIGNAL(serviceRegistered(QString)),
54 this, SLOT(slotServiceRegistered(QString)));
55 connect(&serviceWatcher, SIGNAL(serviceUnregistered(QString)),
56 this, SLOT(slotServiceUnregistered(QString)));
59 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QLatin1String(
"org.kde.Solid.PowerManagement"))) {
60 slotServiceRegistered(QLatin1String(
"org.kde.Solid.PowerManagement"));
62 if (QDBusConnection::sessionBus().interface()->isServiceRegistered(QLatin1String(
"org.freedesktop.PowerManagement"))) {
63 slotServiceRegistered(QLatin1String(
"org.freedesktop.PowerManagement"));
77 return globalPowerManager->powerSaveStatus;
82 return globalPowerManager->supportedSleepStates;
90 if (!globalPowerManager->supportedSleepStates.contains(state)) {
99 globalPowerManager->managerIface.Suspend();
102 globalPowerManager->managerIface.Hibernate();
109 QDBusReply<uint> reply;
110 if (globalPowerManager->policyAgentIface.isValid()) {
111 reply = globalPowerManager->policyAgentIface.AddInhibition(
113 QCoreApplication::applicationName(), reason);
116 reply = globalPowerManager->inhibitIface.Inhibit(QCoreApplication::applicationName(), reason);
127 if (globalPowerManager->policyAgentIface.isValid()) {
128 return globalPowerManager->policyAgentIface.ReleaseInhibition(cookie).isValid();
131 return globalPowerManager->inhibitIface.UnInhibit(cookie).isValid();
137 if (globalPowerManager->policyAgentIface.isValid()) {
138 QDBusReply<uint> reply = globalPowerManager->policyAgentIface.AddInhibition(
140 QCoreApplication::applicationName(), reason);
142 if (reply.isValid()) {
143 QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String(
"org.freedesktop.ScreenSaver"),
144 QLatin1String(
"/ScreenSaver"),
145 QLatin1String(
"org.freedesktop.ScreenSaver"),
146 QLatin1String(
"Inhibit"));
147 message << QCoreApplication::applicationName();
150 QDBusPendingReply<uint> ssReply = QDBusConnection::sessionBus().asyncCall(message);
151 ssReply.waitForFinished();
152 if (ssReply.isValid()) {
153 globalPowerManager->screensaverCookiesForPowerDevilCookies.insert(reply, ssReply.value());
168 if (globalPowerManager->policyAgentIface.isValid()) {
169 bool result = globalPowerManager->policyAgentIface.ReleaseInhibition(cookie).isValid();
171 if (globalPowerManager->screensaverCookiesForPowerDevilCookies.contains(cookie)) {
172 QDBusMessage message = QDBusMessage::createMethodCall(QLatin1String(
"org.freedesktop.ScreenSaver"),
173 QLatin1String(
"/ScreenSaver"),
174 QLatin1String(
"org.freedesktop.ScreenSaver"),
175 QLatin1String(
"UnInhibit"));
176 message << globalPowerManager->screensaverCookiesForPowerDevilCookies.take(cookie);
177 QDBusConnection::sessionBus().asyncCall(message);
189 return globalPowerManager;
220 if (powerSaveStatus == newState) {
224 powerSaveStatus = newState;
225 emit appShouldConserveResourcesChanged(powerSaveStatus);
230 if (serviceName == QLatin1String(
"org.freedesktop.PowerManagement")) {
232 QDBusPendingReply<bool> suspendReply = managerIface.CanSuspend();
233 suspendReply.waitForFinished();
234 slotCanSuspendChanged(suspendReply.isValid() ? suspendReply.value() :
false);
236 QDBusPendingReply<bool> hibernateReply = managerIface.CanHibernate();
237 hibernateReply.waitForFinished();
238 slotCanHibernateChanged(hibernateReply.isValid() ? hibernateReply.value() :
false);
240 QDBusPendingReply<bool> saveStatusReply = managerIface.GetPowerSaveStatus();
241 saveStatusReply.waitForFinished();
242 slotPowerSaveStatusChanged(saveStatusReply.isValid() ? saveStatusReply.value() :
false);
245 QDBusMessage call = QDBusMessage::createMethodCall(QLatin1String(
"org.kde.Solid.PowerManagement"),
246 QLatin1String(
"/org/kde/Solid/PowerManagement"),
247 QLatin1String(
"org.kde.Solid.PowerManagement"),
248 QLatin1String(
"backendCapabilities"));
249 QDBusPendingReply< uint > reply = QDBusConnection::sessionBus().asyncCall(call);
250 reply.waitForFinished();
252 if (reply.isValid() && reply.value() > 0) {
254 QDBusConnection::sessionBus().connect(QLatin1String(
"org.kde.Solid.PowerManagement"),
255 QLatin1String(
"/org/kde/Solid/PowerManagement"),
256 QLatin1String(
"org.kde.Solid.PowerManagement"),
257 QLatin1String(
"resumingFromSuspend"),
259 SIGNAL(resumingFromSuspend()));
266 if (serviceName == QLatin1String(
"org.freedesktop.PowerManagement")) {
268 slotCanSuspendChanged(
false);
269 slotCanHibernateChanged(
false);
270 slotPowerSaveStatusChanged(
false);
273 QDBusConnection::sessionBus().disconnect(QLatin1String(
"org.kde.Solid.PowerManagement"),
274 QLatin1String(
"/org/kde/Solid/PowerManagement"),
275 QLatin1String(
"org.kde.Solid.PowerManagement"),
276 QLatin1String(
"resumingFromSuspend"),
278 SIGNAL(resumingFromSuspend()));
282 #include "powermanagement_p.moc"
283 #include "powermanagement.moc"