summaryrefslogtreecommitdiff
path: root/extra/kdebase-workspace/logind-support2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'extra/kdebase-workspace/logind-support2.patch')
-rw-r--r--extra/kdebase-workspace/logind-support2.patch124
1 files changed, 124 insertions, 0 deletions
diff --git a/extra/kdebase-workspace/logind-support2.patch b/extra/kdebase-workspace/logind-support2.patch
new file mode 100644
index 000000000..e36757f6a
--- /dev/null
+++ b/extra/kdebase-workspace/logind-support2.patch
@@ -0,0 +1,124 @@
+commit 80e9e6e48ff5b84962f3a8543ee06bcd4f122623
+Author: Lukáš Tinkl <lukas@kde.org>
+Date: Tue Oct 30 11:32:52 2012 +0100
+
+ 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
+
+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);