diff --git a/solid/solid/backends/upower/upowerdevice.cpp b/solid/solid/backends/upower/upowerdevice.cpp index 94f59bf..7c70a31 100644 --- a/solid/solid/backends/upower/upowerdevice.cpp +++ b/solid/solid/backends/upower/upowerdevice.cpp @@ -1,6 +1,6 @@ /* Copyright 2010 Michael Zanetti - Copyright 2010 Lukas Tinkl + Copyright 2010-2015 Lukas Tinkl This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -32,6 +32,7 @@ #include #include #include +#include using namespace Solid::Backends::UPower; @@ -44,11 +45,16 @@ UPowerDevice::UPowerDevice(const QString &udi) , m_udi(udi) { if (m_device.isValid()) { - connect(&m_device, SIGNAL(Changed()), this, SLOT(slotChanged())); + if (m_device.metaObject()->indexOfSignal("Changed()") != -1) { + connect(&m_device, SIGNAL(Changed()), this, SLOT(slotChanged())); + } else { + // for UPower >= 0.99.0, missing Changed() signal + QDBusConnection::systemBus().connect(UP_DBUS_SERVICE, m_udi, "org.freedesktop.DBus.Properties", "PropertiesChanged", this, + SLOT(onPropertiesChanged(QString,QVariantMap,QStringList))); + } - // for UPower >= 0.99.0, missing Changed() signal - QDBusConnection::systemBus().connect(UP_DBUS_SERVICE, m_udi, "org.freedesktop.DBus.Properties", "PropertiesChanged", this, - SLOT(onPropertiesChanged(QString,QVariantMap,QStringList))); + QDBusConnection::systemBus().connect("org.freedesktop.login1", "/org/freedesktop/login1", "org.freedesktop.login1.Manager", "PrepareForSleep", + this, SLOT(login1Resuming(bool))); } } @@ -238,3 +244,13 @@ void UPowerDevice::slotChanged() m_cache.clear(); emit changed(); } + +void UPowerDevice::login1Resuming(bool active) +{ + if (!active) { + QDBusReply refreshCall = m_device.asyncCall("Refresh"); + if (refreshCall.isValid()) { + slotChanged(); + } + } +} diff --git a/solid/solid/backends/upower/upowerdevice.h b/solid/solid/backends/upower/upowerdevice.h index 805b9b2..7694d05 100644 --- a/solid/solid/backends/upower/upowerdevice.h +++ b/solid/solid/backends/upower/upowerdevice.h @@ -64,6 +64,7 @@ Q_SIGNALS: private Q_SLOTS: void onPropertiesChanged(const QString &ifaceName, const QVariantMap &changedProps, const QStringList &invalidatedProps); void slotChanged(); + void login1Resuming(bool active); private: QString batteryTechnology() const;