commit:     b868d154f825023aa7cab38852336e2c30d6d18e
Author:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
AuthorDate: Wed Aug 30 13:12:27 2017 +0000
Commit:     Michael Palimaka <kensington <AT> gentoo <DOT> org>
CommitDate: Wed Aug 30 13:12:54 2017 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b868d154

kde-frameworks/knotifications: backport patch from upstream to resolve 
notification blocking issue

Gentoo-bug: 622174
Package-Manager: Portage-2.3.6, Repoman-2.3.3

 ...otifications-5.34.0-no-block-notification.patch | 101 +++++++++++++++++++++
 .../knotifications/knotifications-5.34.0-r1.ebuild |  47 ++++++++++
 .../knotifications/knotifications-5.37.0-r1.ebuild |  46 ++++++++++
 3 files changed, 194 insertions(+)

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
index 00000000000..2d1ae95af5f
--- /dev/null
+++ 
b/kde-frameworks/knotifications/files/knotifications-5.34.0-no-block-notification.patch
@@ -0,0 +1,101 @@
+From 1c97e1d9741fd15962474f47932dd09728dae76b Mon Sep 17 00:00:00 2001
+From: David Edmundson <[email protected]>
+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
+

diff --git a/kde-frameworks/knotifications/knotifications-5.34.0-r1.ebuild 
b/kde-frameworks/knotifications/knotifications-5.34.0-r1.ebuild
new file mode 100644
index 00000000000..5947e9e2b6e
--- /dev/null
+++ b/kde-frameworks/knotifications/knotifications-5.34.0-r1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+KDE_TEST="false"
+inherit kde5
+
+DESCRIPTION="Framework for notifying the user of an event"
+LICENSE="LGPL-2.1+"
+KEYWORDS="~amd64 ~arm ~x86"
+IUSE="dbus nls speech X"
+
+# drop qtgui subslot operator when QT_MINIMAL >= 5.7.0
+RDEPEND="
+       $(add_frameworks_dep kcodecs)
+       $(add_frameworks_dep kconfig)
+       $(add_frameworks_dep kcoreaddons)
+       $(add_frameworks_dep kwindowsystem)
+       $(add_qt_dep qtdbus)
+       $(add_qt_dep qtgui '' '' '5=')
+       $(add_qt_dep qtwidgets)
+       media-libs/phonon[qt5]
+       dbus? ( dev-libs/libdbusmenu-qt[qt5] )
+       speech? ( $(add_qt_dep qtspeech) )
+       X? (
+               $(add_qt_dep qtx11extras)
+               x11-libs/libX11
+               x11-libs/libXtst
+       )
+"
+DEPEND="${RDEPEND}
+       nls? ( $(add_qt_dep linguist-tools) )
+       X? ( x11-proto/xproto )
+"
+
+PATCHES=( "${FILESDIR}/${P}-no-block-notification.patch" )
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake-utils_use_find_package dbus dbusmenu-qt5)
+               $(cmake-utils_use_find_package speech Qt5TextToSpeech)
+               $(cmake-utils_use_find_package X X11)
+       )
+
+       kde5_src_configure
+}

diff --git a/kde-frameworks/knotifications/knotifications-5.37.0-r1.ebuild 
b/kde-frameworks/knotifications/knotifications-5.37.0-r1.ebuild
new file mode 100644
index 00000000000..96d9f5e8f93
--- /dev/null
+++ b/kde-frameworks/knotifications/knotifications-5.37.0-r1.ebuild
@@ -0,0 +1,46 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=6
+
+KDE_TEST="false"
+inherit kde5
+
+DESCRIPTION="Framework for notifying the user of an event"
+LICENSE="LGPL-2.1+"
+KEYWORDS="~amd64 ~arm ~arm64 ~x86"
+IUSE="dbus nls speech X"
+
+RDEPEND="
+       $(add_frameworks_dep kcodecs)
+       $(add_frameworks_dep kconfig)
+       $(add_frameworks_dep kcoreaddons)
+       $(add_frameworks_dep kwindowsystem)
+       $(add_qt_dep qtdbus)
+       $(add_qt_dep qtgui)
+       $(add_qt_dep qtwidgets)
+       media-libs/phonon[qt5]
+       dbus? ( dev-libs/libdbusmenu-qt[qt5] )
+       speech? ( $(add_qt_dep qtspeech) )
+       X? (
+               $(add_qt_dep qtx11extras)
+               x11-libs/libX11
+               x11-libs/libXtst
+       )
+"
+DEPEND="${RDEPEND}
+       nls? ( $(add_qt_dep linguist-tools) )
+       X? ( x11-proto/xproto )
+"
+
+PATCHES=( "${FILESDIR}/${PN}-5.34.0-no-block-notification.patch" )
+
+src_configure() {
+       local mycmakeargs=(
+               $(cmake-utils_use_find_package dbus dbusmenu-qt5)
+               $(cmake-utils_use_find_package speech Qt5TextToSpeech)
+               $(cmake-utils_use_find_package X X11)
+       )
+
+       kde5_src_configure
+}

Reply via email to