kde-frameworks/knotifications: Re-add missing patch
authorAndreas Sturmlechner <asturm@gentoo.org>
Tue, 12 Sep 2017 23:02:56 +0000 (01:02 +0200)
committerAndreas Sturmlechner <asturm@gentoo.org>
Tue, 12 Sep 2017 23:03:16 +0000 (01:03 +0200)
Reported-by: Latrina in #gentoo-kde
Package-Manager: Portage-2.3.8, Repoman-2.3.3

kde-frameworks/knotifications/files/knotifications-5.34.0-no-block-notification.patch [new file with mode: 0644]

diff --git a/kde-frameworks/knotifications/files/knotifications-5.34.0-no-block-notification.patch b/kde-frameworks/knotifications/files/knotifications-5.34.0-no-block-notification.patch
new file mode 100644 (file)
index 0000000..2d1ae95
--- /dev/null
@@ -0,0 +1,101 @@
+From 1c97e1d9741fd15962474f47932dd09728dae76b Mon Sep 17 00:00:00 2001
+From: David Edmundson <kde@davidedmundson.co.uk>
+Date: Fri, 28 Jul 2017 13:04:50 +0100
+Subject: [PATCH] Don't block starting notification service
+
+Summary:
+We don't need to manually start the DBus service.
+It blocks the calling app, and dbusServiceExists means that we will
+always end up going the DBus route over a popup anyway, so it won't
+do anything useful.
+
+The service (in the plasma case plasma-wait-for-name) will be started
+automatically when we actually send the notification.
+
+Also fix d-dbusServiceExists being cleared to false when the first
+service owner exits.
+
+BUG: 382444
+
+Subscribers: #frameworks
+
+Tags: #frameworks
+
+Differential Revision: https://phabricator.kde.org/D6963
+---
+ src/notifybypopup.cpp | 28 +++++++++++-----------------
+ 1 file changed, 11 insertions(+), 17 deletions(-)
+
+diff --git a/src/notifybypopup.cpp b/src/notifybypopup.cpp
+index 735d52b..4f244e1 100644
+--- a/src/notifybypopup.cpp
++++ b/src/notifybypopup.cpp
+@@ -109,6 +109,9 @@ public:
+      * Specifies if DBus Notifications interface exists on session bus
+      */
+     bool dbusServiceExists;
++
++    bool dbusServiceActivatable;
++
+     /**
+      * DBus notification daemon capabilities cache.
+      * Do not use this variable. Use #popupServerCapabilities() instead.
+@@ -161,6 +164,7 @@ NotifyByPopup::NotifyByPopup(QObject *parent)
+ {
+     d->animationTimer = 0;
+     d->dbusServiceExists = false;
++    d->dbusServiceActivatable = false;
+     d->dbusServiceCapCacheDirty = true;
+     d->nextPosition = -1;
+ 
+@@ -180,32 +184,20 @@ NotifyByPopup::NotifyByPopup(QObject *parent)
+     connect(watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)),
+             SLOT(onServiceOwnerChanged(QString,QString,QString)));
+ 
++#ifndef Q_WS_WIN
+     if (!d->dbusServiceExists) {
+-        bool startfdo = false;
+-#ifdef Q_WS_WIN
+-        startfdo = true;
+-#else
+         QDBusMessage message = QDBusMessage::createMethodCall(QStringLiteral("org.freedesktop.DBus"),
+                                                                 QStringLiteral("/org/freedesktop/DBus"),
+                                                                 QStringLiteral("org.freedesktop.DBus"),
+                                                                 QStringLiteral("ListActivatableNames"));
+-
+-        // FIXME - this should be async
+         QDBusReply<QStringList> reply = QDBusConnection::sessionBus().call(message);
+         if (reply.isValid() && reply.value().contains(dbusServiceName)) {
+-            startfdo = true;
+-            // We need to set d->dbusServiceExists to true because dbus might be too slow
+-            // starting the service and the first call to NotifyByPopup::notify
+-            // might not have had the service up, by setting this to true we
+-            // guarantee it will still go through dbus and dbus will do the correct
+-            // thing and wait for the service to go up
++            d->dbusServiceActivatable = true;
++            //if the service is activatable, we can assume it exists even if it is not currently running
+             d->dbusServiceExists = true;
+         }
+-#endif
+-        if (startfdo) {
+-            QDBusConnection::sessionBus().interface()->startService(dbusServiceName);
+-        }
+     }
++#endif
+ }
+ 
+ 
+@@ -439,7 +431,9 @@ void NotifyByPopup::onServiceOwnerChanged(const QString &serviceName, const QStr
+ 
+     if (newOwner.isEmpty()) {
+         d->notificationQueue.clear();
+-        d->dbusServiceExists = false;
++        if (!d->dbusServiceActivatable) {
++            d->dbusServiceExists = false;
++        }
+     } else if (oldOwner.isEmpty()) {
+         d->dbusServiceExists = true;
+ 
+-- 
+2.13.5
+