Blob Blame History Raw
From 7fe8b63d2c576f57589cd9bfbaf6831baeb28286 Mon Sep 17 00:00:00 2001
From: Robin Lee <cheeselee@fedoraproject.org>
Date: Mon, 20 May 2019 14:57:26 +0800
Subject: [PATCH] Explicitly start osd if org.freedesktop.Notifications is not
 owned

---
 session.go | 18 +++++++++++++++---
 utils.go   | 15 +++++++++++++++
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/session.go b/session.go
index 2b610df..ca85df6 100644
--- a/session.go
+++ b/session.go
@@ -355,9 +355,21 @@ func (m *SessionManager) launchDDE() {
 	osdRunning, err := isOSDRunning()
 	if err != nil {
 		logger.Warning(err)
-	} else if osdRunning && globalXSManager.NeedRestartOSD() {
-		// restart osd
-		m.launch("/usr/lib/deepin-daemon/dde-osd", false)
+	} else {
+		if osdRunning {
+			if globalXSManager.NeedRestartOSD() {
+				logger.Info("Restart dde-osd")
+				m.launch("/usr/lib/deepin-daemon/dde-osd", false)
+			}
+		} else {
+			notificationsOwned, err := isNotificationsOwned()
+			if err != nil {
+				logger.Warning("failed to get org.freedesktop.Notifications status:", err)
+			} else if !notificationsOwned {
+				logger.Info("Explicitly start dde-osd")
+				m.launch("/usr/lib/deepin-daemon/dde-osd", false)
+			}
+		}
 	}
 
 	groups, err := loadGroupFile()
diff --git a/utils.go b/utils.go
index cc10c25..25c5f35 100644
--- a/utils.go
+++ b/utils.go
@@ -256,3 +256,18 @@ func isOSDRunning() (bool, error) {
 	}
 	return has, nil
 }
+
+func isNotificationsOwned() (bool, error) {
+	sessionBus, err := dbus.SessionBus()
+	if err != nil {
+		return false, err
+	}
+
+	var has bool
+	err = sessionBus.BusObject().Call("org.freedesktop.DBus.NameHasOwner", 0,
+		"org.freedesktop.Notifications").Store(&has)
+	if err != nil {
+		return false, err
+	}
+	return has, nil
+}
-- 
2.21.0