[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