CLogindUPowerSyscall::~CLogindUPowerSyscall() { if (m_connection) { dbus_connection_close(m_connection); dbus_connection_unref(m_connection); } ReleaseDelayLock(); }
bool CLogindUPowerSyscall::PumpPowerEvents(IPowerEventsCallback *callback) { bool result = false; bool releaseLock = false; if (m_connection) { dbus_connection_read_write(m_connection, 0); DBusMessage *msg = dbus_connection_pop_message(m_connection); if (msg) { if (dbus_message_is_signal(msg, "org.freedesktop.login1.Manager", "PrepareForSleep")) { dbus_bool_t arg; // the boolean argument defines whether we are going to sleep (true) or just woke up (false) dbus_message_get_args(msg, NULL, DBUS_TYPE_BOOLEAN, &arg, DBUS_TYPE_INVALID); CLog::Log(LOGDEBUG, "LogindUPowerSyscall: Received PrepareForSleep with arg %i", (int)arg); if (arg) { callback->OnSleep(); releaseLock = true; } else { callback->OnWake(); InhibitDelayLock(); } result = true; } else if (dbus_message_is_signal(msg, "org.freedesktop.UPower", "DeviceChanged")) { bool lowBattery = m_lowBattery; UpdateBatteryLevel(); if (m_lowBattery && !lowBattery) callback->OnLowBattery(); result = true; } else CLog::Log(LOGDEBUG, "LogindUPowerSyscall - Received unknown signal %s", dbus_message_get_member(msg)); dbus_message_unref(msg); } } if (releaseLock) ReleaseDelayLock(); return result; }
CLogindUPowerSyscall::~CLogindUPowerSyscall() { ReleaseDelayLock(); }