+ connect(this, &SystemTray::iconsChanged, this, &StatusNotifierItem::refreshIcons);
+ refreshIcons();
+
+ // Our own SNI service
+ _statusNotifierItemDBus = new StatusNotifierItemDBus(this);
+ connect(this, &StatusNotifierItem::currentIconNameChanged, _statusNotifierItemDBus, &StatusNotifierItemDBus::NewIcon);
+ connect(this, &StatusNotifierItem::currentIconNameChanged, _statusNotifierItemDBus, &StatusNotifierItemDBus::NewAttentionIcon);
+ connect(this, &StatusNotifierItem::toolTipChanged, _statusNotifierItemDBus, &StatusNotifierItemDBus::NewToolTip);
+
+ // Service watcher to keep track of the StatusNotifierWatcher service
+ _serviceWatcher = new QDBusServiceWatcher(kSniWatcherService, QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForOwnerChange, this);
+ connect(_serviceWatcher, &QDBusServiceWatcher::serviceOwnerChanged, this, &StatusNotifierItem::serviceChange);
+
+ // Client instance for StatusNotifierWatcher
+ _statusNotifierWatcher = new org::kde::StatusNotifierWatcher(kSniWatcherService, kSniWatcherPath, QDBusConnection::sessionBus(), this);
+ connect(_statusNotifierWatcher,
+ &OrgKdeStatusNotifierWatcherInterface::StatusNotifierHostRegistered,
+ this,
+ &StatusNotifierItem::checkForRegisteredHosts);
+ connect(_statusNotifierWatcher,
+ &OrgKdeStatusNotifierWatcherInterface::StatusNotifierHostUnregistered,
+ this,
+ &StatusNotifierItem::checkForRegisteredHosts);
+
+ // Client instance for notifications
+ _notificationsClient = new org::freedesktop::Notifications(kXdgNotificationsService,
+ kXdgNotificationsPath,
+ QDBusConnection::sessionBus(),
+ this);
+ connect(_notificationsClient, &OrgFreedesktopNotificationsInterface::NotificationClosed, this, &StatusNotifierItem::notificationClosed);
+ connect(_notificationsClient, &OrgFreedesktopNotificationsInterface::ActionInvoked, this, &StatusNotifierItem::notificationInvoked);
+
+ if (_notificationsClient->isValid()) {
+ QStringList desktopCapabilities = _notificationsClient->GetCapabilities();
+ _notificationsClientSupportsMarkup = desktopCapabilities.contains("body-markup");
+ _notificationsClientSupportsActions = desktopCapabilities.contains("actions");
+ }