summaryrefslogtreecommitdiffstats
path: root/kde
diff options
context:
space:
mode:
author Eric Hameleers <alien@slackware.com>2015-09-13 13:43:09 +0200
committer Eric Hameleers <alien@slackware.com>2015-09-13 13:43:09 +0200
commit1d193fbad100dd0dbd72c7bd336278544c260c9c (patch)
tree7720aea0bff5e853b83c37ff30e7dd54307739b8 /kde
parent0cb37439f64403daf814640249486a3ae5d3c08f (diff)
downloadktown-1d193fbad100dd0dbd72c7bd336278544c260c9c.tar.gz
ktown-1d193fbad100dd0dbd72c7bd336278544c260c9c.tar.xz
plasma-workspace: add ConsoleKit2 support for screenlocker.
ConsoleKit2 has implemented the systemd-logind API for Lock, Unlock, PrepareForSleep and Inhibit.
Diffstat (limited to 'kde')
-rw-r--r--kde/patch/plasma-workspace.patch4
-rw-r--r--kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch189
2 files changed, 193 insertions, 0 deletions
diff --git a/kde/patch/plasma-workspace.patch b/kde/patch/plasma-workspace.patch
new file mode 100644
index 0000000..2b1c630
--- /dev/null
+++ b/kde/patch/plasma-workspace.patch
@@ -0,0 +1,4 @@
+# Add ConsoleKit2 support for screenlocker (ConsoleKit2 has implemented the
+# systemd-logind API for Lock, Unlock, PrepareForSleep and Inhibit.
+cat $CWD/patch/plasma-workspace/plasma-workspace_consolekit2.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; }
+
diff --git a/kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch b/kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch
new file mode 100644
index 0000000..6131c90
--- /dev/null
+++ b/kde/patch/plasma-workspace/plasma-workspace_consolekit2.patch
@@ -0,0 +1,189 @@
+From: Eric Koegel <eric.koegel@gmail.com>
+Date: Wed, 12 Aug 2015 08:33:39 +0000
+Subject: ConsoleKit2 support for screenlocker
+X-Git-Url: http://quickgit.kde.org/?p=plasma-workspace.git&a=commitdiff&h=72578284a1fda5f012cafcaccad6069fadbf9a25
+---
+ConsoleKit2 support for screenlocker
+
+ConsoleKit2 has the same API as systemd-logind for Lock, Unlock,
+PrepareForSleep, and Inhibit. This patch adds the functionality
+for ConsoleKit2 while attempting to minimize code duplication.
+
+REVIEW: 124469
+---
+
+
+--- a/ksmserver/screenlocker/logind.cpp
++++ b/ksmserver/screenlocker/logind.cpp
+@@ -25,13 +25,17 @@
+ #include <QDebug>
+ #include <QDBusConnection>
+ #include <QDBusConnectionInterface>
+-#include <QDBusPendingCallWatcher>
+ #include <QDBusServiceWatcher>
+
+ const static QString s_login1Service = QStringLiteral("org.freedesktop.login1");
+ const static QString s_login1Path = QStringLiteral("/org/freedesktop/login1");
+ const static QString s_login1ManagerInterface = QStringLiteral("org.freedesktop.login1.Manager");
+ const static QString s_login1SessionInterface = QStringLiteral("org.freedesktop.login1.Session");
++
++const static QString s_consolekitService = QStringLiteral("org.freedesktop.ConsoleKit");
++const static QString s_consolekitPath = QStringLiteral("/org/freedesktop/ConsoleKit/Manager");
++const static QString s_consolekitManagerInterface = QStringLiteral("org.freedesktop.ConsoleKit.Manager");
++const static QString s_consolekitSessionInterface = QStringLiteral("org.freedesktop.ConsoleKit.Session");
+
+ LogindIntegration::LogindIntegration(const QDBusConnection &connection, QObject *parent)
+ : QObject(parent)
+@@ -42,6 +46,10 @@
+ this))
+ , m_connected(false)
+ , m_inhibitFileDescriptor()
++ , m_service(nullptr)
++ , m_path(nullptr)
++ , m_managerInterface(nullptr)
++ , m_sessionInterface(nullptr)
+ {
+ connect(m_logindServiceWatcher, &QDBusServiceWatcher::serviceRegistered, this, &LogindIntegration::logindServiceRegistered);
+ connect(m_logindServiceWatcher, &QDBusServiceWatcher::serviceUnregistered, this,
+@@ -67,6 +75,11 @@
+ }
+ if (reply.value().contains(s_login1Service)) {
+ logindServiceRegistered();
++ // Don't register ck if we have logind
++ return;
++ }
++ if (reply.value().contains(s_consolekitService)) {
++ consolekitServiceRegistered();
+ }
+ }
+ );
+@@ -89,6 +102,40 @@
+ message.setArguments(QVariantList() << (quint32) QCoreApplication::applicationPid());
+ QDBusPendingReply<QDBusObjectPath> session = m_bus.asyncCall(message);
+ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(session, this);
++
++ m_service = &s_login1Service;
++ m_path = &s_login1Path;
++ m_managerInterface = &s_login1ManagerInterface;
++ m_sessionInterface = &s_login1SessionInterface;
++
++ commonServiceRegistered(watcher);
++}
++
++void LogindIntegration::consolekitServiceRegistered()
++{
++ // Don't try to register with ck if we have logind
++ if (m_connected) {
++ return;
++ }
++
++ // get the current session
++ QDBusMessage message = QDBusMessage::createMethodCall(s_consolekitService,
++ s_consolekitPath,
++ s_consolekitManagerInterface,
++ QStringLiteral("GetCurrentSession"));
++ QDBusPendingReply<QDBusObjectPath> session = m_bus.asyncCall(message);
++ QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(session, this);
++
++ m_service = &s_consolekitService;
++ m_path = &s_consolekitPath;
++ m_managerInterface = &s_consolekitManagerInterface;
++ m_sessionInterface = &s_consolekitSessionInterface;
++
++ commonServiceRegistered(watcher);
++}
++
++void LogindIntegration::commonServiceRegistered(QDBusPendingCallWatcher *watcher)
++{
+ connect(watcher, &QDBusPendingCallWatcher::finished, this,
+ [this](QDBusPendingCallWatcher *self) {
+ QDBusPendingReply<QDBusObjectPath> reply = *self;
+@@ -97,7 +144,7 @@
+ return;
+ }
+ if (!reply.isValid()) {
+- qDebug() << "The session is not registered with logind" << reply.error().message();
++ qDebug() << "The session is not registered: " << reply.error().message();
+ return;
+ }
+ const QString sessionPath = reply.value().path();
+@@ -105,15 +152,15 @@
+
+ // connections need to be done this way as the object exposes both method and signal
+ // with name "Lock"/"Unlock". Qt is not able to automatically handle this.
+- m_bus.connect(s_login1Service,
++ m_bus.connect(*m_service,
+ sessionPath,
+- s_login1SessionInterface,
++ *m_sessionInterface,
+ QStringLiteral("Lock"),
+ this,
+ SIGNAL(requestLock()));
+- m_bus.connect(s_login1Service,
++ m_bus.connect(*m_service,
+ sessionPath,
+- s_login1SessionInterface,
++ *m_sessionInterface,
+ QStringLiteral("Unlock"),
+ this,
+ SIGNAL(requestUnlock()));
+@@ -123,9 +170,9 @@
+ );
+
+ // connect to manager object's signals we need
+- m_bus.connect(s_login1Service,
+- s_login1Path,
+- s_login1ManagerInterface,
++ m_bus.connect(*m_service,
++ *m_path,
++ *m_managerInterface,
+ QStringLiteral("PrepareForSleep"),
+ this,
+ SIGNAL(prepareForSleep(bool)));
+@@ -136,9 +183,14 @@
+ if (m_inhibitFileDescriptor.isValid()) {
+ return;
+ }
+- QDBusMessage message = QDBusMessage::createMethodCall(s_login1Service,
+- s_login1Path,
+- s_login1ManagerInterface,
++
++ if (!m_connected) {
++ return;
++ }
++
++ QDBusMessage message = QDBusMessage::createMethodCall(*m_service,
++ *m_path,
++ *m_managerInterface,
+ QStringLiteral("Inhibit"));
+ message.setArguments(QVariantList({QStringLiteral("sleep"),
+ i18n("Screen Locker"),
+
+--- a/ksmserver/screenlocker/logind.h
++++ b/ksmserver/screenlocker/logind.h
+@@ -23,6 +23,7 @@
+ #include <QDBusConnection>
+ #include <QDBusUnixFileDescriptor>
+ #include <QObject>
++#include <QDBusPendingCallWatcher>
+
+ class QDBusServiceWatcher;
+
+@@ -59,10 +60,16 @@
+ **/
+ explicit LogindIntegration(const QDBusConnection &connection, QObject *parent = nullptr);
+ void logindServiceRegistered();
++ void consolekitServiceRegistered();
++ void commonServiceRegistered(QDBusPendingCallWatcher *watcher);
+ QDBusConnection m_bus;
+ QDBusServiceWatcher *m_logindServiceWatcher;
+ bool m_connected;
+ QDBusUnixFileDescriptor m_inhibitFileDescriptor;
++ const QString *m_service;
++ const QString *m_path;
++ const QString *m_managerInterface;
++ const QString *m_sessionInterface;
+ };
+
+ #endif
+