summaryrefslogtreecommitdiff
blob: 2d1ae95af5fbf8969e9b3440650720b044bdbfb3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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