[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kde-workspace/KDE/4.9] powerdevil/daemon: move systemd inhibition initialization to a slot
From: Lukáš Tinkl <lukas () kde ! org>
Date: 2012-10-30 10:34:02
Message-ID: 20121030103402.8B2BFA6078 () git ! kde ! org
[Download RAW message or body]
Git commit 80e9e6e48ff5b84962f3a8543ee06bcd4f122623 by Lukáš Tinkl.
Committed on 30/10/2012 at 11:32.
Pushed by lukas into branch 'KDE/4.9'.
move systemd inhibition initialization to a slot
and call it on resume. It looks like the filedescriptor
goes away when you suspend so we need to recreate it.
BUG: 307412
M +4 -2 powerdevil/daemon/powerdevilcore.cpp
M +27 -17 powerdevil/daemon/powerdevilpolicyagent.cpp
M +2 -0 powerdevil/daemon/powerdevilpolicyagent.h
http://commits.kde.org/kde-workspace/80e9e6e48ff5b84962f3a8543ee06bcd4f122623
diff --git a/powerdevil/daemon/powerdevilcore.cpp \
b/powerdevil/daemon/powerdevilcore.cpp index df79667..7f24cbb 100644
--- a/powerdevil/daemon/powerdevilcore.cpp
+++ b/powerdevil/daemon/powerdevilcore.cpp
@@ -127,8 +127,6 @@ void Core::onBackendReady()
this, SLOT(onAcAdapterStateChanged(PowerDevil::BackendInterface::AcAdapterState)));
connect(m_backend, SIGNAL(batteryRemainingTimeChanged(qulonglong)),
this, SLOT(onBatteryRemainingTimeChanged(qulonglong)));
- connect(m_backend, SIGNAL(resumeFromSuspend()),
- this, SLOT(onResumeFromSuspend()));
connect(KIdleTime::instance(), SIGNAL(timeoutReached(int,int)),
this, SLOT(onKIdleTimeoutReached(int,int)));
connect(KIdleTime::instance(), SIGNAL(resumingFromIdle()),
@@ -139,6 +137,9 @@ void Core::onBackendReady()
// Set up the policy agent
PowerDevil::PolicyAgent::instance()->init();
+ connect(m_backend, SIGNAL(resumeFromSuspend()),
+ this, SLOT(onResumeFromSuspend()));
+
// Initialize the action pool, which will also load the needed startup actions.
PowerDevil::ActionPool::instance()->init(this);
@@ -601,6 +602,7 @@ void Core::onResumeFromSuspend()
"/ScreenSaver",
QDBusConnection::sessionBus());
iface.SimulateUserActivity();
+ PowerDevil::PolicyAgent::instance()->setupSystemdInhibition();
emit resumingFromSuspend();
}
diff --git a/powerdevil/daemon/powerdevilpolicyagent.cpp \
b/powerdevil/daemon/powerdevilpolicyagent.cpp index 70588db..0777846 100644
--- a/powerdevil/daemon/powerdevilpolicyagent.cpp
+++ b/powerdevil/daemon/powerdevilpolicyagent.cpp
@@ -88,6 +88,7 @@ PolicyAgent *PolicyAgent::instance()
PolicyAgent::PolicyAgent(QObject* parent)
: QObject(parent)
, m_sdAvailable(false)
+ , m_systemdInhibitFd(-1)
, m_ckAvailable(false)
, m_sessionIsBeingInterrupted(false)
, m_lastCookie(0)
@@ -223,23 +224,7 @@ void PolicyAgent::onSessionHandlerRegistered(const QString & \
serviceName)
onActiveSessionChanged(m_activeSessionPath);
- // inhibit systemd handling of power/sleep/lid buttons
- // http://www.freedesktop.org/wiki/Software/systemd/inhibit
- kDebug() << "fd passing available:" << \
bool(managerIface.connection().connectionCapabilities() & \
QDBusConnection::UnixFileDescriptorPassing);
-
- QVariantList args;
- args << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; \
// what
- args << "PowerDevil"; // who
- args << "KDE handles power events"; // why
- args << "block"; // mode
- QDBusPendingReply<QDBusUnixFileDescriptor> desc = \
managerIface.asyncCallWithArgumentList("Inhibit", args);
- desc.waitForFinished();
- if (desc.isValid()) {
- m_systemdInhibitFd = desc.value();
- kDebug() << "systemd powersave events handling inhibited, descriptor:" \
<< m_systemdInhibitFd.fileDescriptor();
- }
- else
- kWarning() << "failed to inhibit systemd powersave handling";
+ setupSystemdInhibition();
kDebug() << "systemd support initialized";
} else if (serviceName == CONSOLEKIT_SERVICE) {
@@ -552,6 +537,31 @@ void PolicyAgent::releaseAllInhibitions()
}
}
+void PolicyAgent::setupSystemdInhibition()
+{
+ if (m_systemdInhibitFd.fileDescriptor() != -1)
+ return;
+
+ // inhibit systemd handling of power/sleep/lid buttons
+ // http://www.freedesktop.org/wiki/Software/systemd/inhibit
+ QDBusInterface managerIface(SYSTEMD_LOGIN1_SERVICE, SYSTEMD_LOGIN1_PATH, \
SYSTEMD_LOGIN1_MANAGER_IFACE, QDBusConnection::systemBus()); + kDebug() << "fd \
passing available:" << bool(managerIface.connection().connectionCapabilities() & \
QDBusConnection::UnixFileDescriptorPassing); +
+ QVariantList args;
+ args << "handle-power-key:handle-suspend-key:handle-hibernate-key:handle-lid-switch"; \
// what + args << "PowerDevil"; // who
+ args << "KDE handles power events"; // why
+ args << "block"; // mode
+ QDBusPendingReply<QDBusUnixFileDescriptor> desc = \
managerIface.asyncCallWithArgumentList("Inhibit", args); + desc.waitForFinished();
+ if (desc.isValid()) {
+ m_systemdInhibitFd = desc.value();
+ kDebug() << "systemd powersave events handling inhibited, descriptor:" << \
m_systemdInhibitFd.fileDescriptor(); + }
+ else
+ kWarning() << "failed to inhibit systemd powersave handling";
+}
+
}
#include "powerdevilpolicyagent.moc"
diff --git a/powerdevil/daemon/powerdevilpolicyagent.h \
b/powerdevil/daemon/powerdevilpolicyagent.h index a046497..f1e8c03 100644
--- a/powerdevil/daemon/powerdevilpolicyagent.h
+++ b/powerdevil/daemon/powerdevilpolicyagent.h
@@ -74,6 +74,8 @@ public:
RequiredPolicies unavailablePolicies();
+ void setupSystemdInhibition();
+
public Q_SLOTS:
// Exported slots
uint AddInhibition(uint types, const QString &appName, const QString &reason);
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic