qtui: Fix duplication of tray icon with StatusNotifier
authorManuel Nickschas <sputnick@quassel-irc.org>
Thu, 14 Jun 2018 22:55:07 +0000 (00:55 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Fri, 15 Jun 2018 23:30:32 +0000 (01:30 +0200)
Don't register a custom D-Bus service for the StatusNotifierItem.
Instead, just use the base service that is already registered.

Fixes the duplication of the tray icon that sporadically happened
with Plasma's SNI visualization, which sometimes forgot to properly
track the custom service name.

src/qtui/statusnotifieritem.cpp
src/qtui/statusnotifieritemdbus.cpp
src/qtui/statusnotifieritemdbus.h

index 9f34e7c..68d81ab 100644 (file)
@@ -240,11 +240,11 @@ bool StatusNotifierItem::isSystemTrayAvailable() const
 void StatusNotifierItem::onModeChanged(Mode mode)
 {
     if (mode == Mode::StatusNotifier) {
 void StatusNotifierItem::onModeChanged(Mode mode)
 {
     if (mode == Mode::StatusNotifier) {
-        _statusNotifierItemDBus->registerService();
+        _statusNotifierItemDBus->registerTrayIcon();
         registerToWatcher();
     }
     else {
         registerToWatcher();
     }
     else {
-        _statusNotifierItemDBus->unregisterService();
+        _statusNotifierItemDBus->unregisterTrayIcon();
     }
 }
 
     }
 }
 
@@ -262,11 +262,11 @@ void StatusNotifierItem::onVisibilityChanged(bool isVisible)
 {
     if (mode() == Mode::StatusNotifier) {
         if (isVisible) {
 {
     if (mode() == Mode::StatusNotifier) {
         if (isVisible) {
-            _statusNotifierItemDBus->registerService();
+            _statusNotifierItemDBus->registerTrayIcon();
             registerToWatcher();
         }
         else {
             registerToWatcher();
         }
         else {
-            _statusNotifierItemDBus->unregisterService();
+            _statusNotifierItemDBus->unregisterTrayIcon();
         }
     }
 }
         }
     }
 }
index 2be2328..ee21928 100644 (file)
@@ -160,20 +160,16 @@ int StatusNotifierItemDBus::s_serviceCount = 0;
 StatusNotifierItemDBus::StatusNotifierItemDBus(StatusNotifierItem *parent)
     : QObject(parent),
     m_statusNotifierItem(parent),
 StatusNotifierItemDBus::StatusNotifierItemDBus(StatusNotifierItem *parent)
     : QObject(parent),
     m_statusNotifierItem(parent),
-    m_service(QString("org.kde.StatusNotifierItem-%1-%2")
-        .arg(QCoreApplication::applicationPid())
-        .arg(++s_serviceCount)),
-    m_dbus(QDBusConnection::connectToBus(QDBusConnection::SessionBus, m_service))
+    m_dbus(QDBusConnection::connectToBus(QDBusConnection::SessionBus,
+                                         QString("org.kde.StatusNotifierItem-%1-%2").arg(QCoreApplication::applicationPid()).arg(++s_serviceCount)))
 {
     new StatusNotifierItemAdaptor(this);
 {
     new StatusNotifierItemAdaptor(this);
-    //qDebug() << "service is" << m_service;
-    registerService();
 }
 
 
 StatusNotifierItemDBus::~StatusNotifierItemDBus()
 {
 }
 
 
 StatusNotifierItemDBus::~StatusNotifierItemDBus()
 {
-    unregisterService();
+    unregisterTrayIcon();
 }
 
 
 }
 
 
@@ -185,28 +181,24 @@ QDBusConnection StatusNotifierItemDBus::dbusConnection() const
 
 // FIXME: prevent double registrations, also test this on platforms != KDE
 //
 
 // FIXME: prevent double registrations, also test this on platforms != KDE
 //
-void StatusNotifierItemDBus::registerService()
+void StatusNotifierItemDBus::registerTrayIcon()
 {
 {
-    //qDebug() << "registering to" << m_service;
-    m_dbus.registerService(m_service);
     m_dbus.registerObject("/StatusNotifierItem", this);
 }
 
 
 // FIXME: see above
     m_dbus.registerObject("/StatusNotifierItem", this);
 }
 
 
 // FIXME: see above
-void StatusNotifierItemDBus::unregisterService()
+void StatusNotifierItemDBus::unregisterTrayIcon()
 {
 {
-    //qDebug() << "unregistering from" << m_service;
     if (m_dbus.isConnected()) {
         m_dbus.unregisterObject("/StatusNotifierItem");
     if (m_dbus.isConnected()) {
         m_dbus.unregisterObject("/StatusNotifierItem");
-        m_dbus.unregisterService(m_service);
     }
 }
 
 
 QString StatusNotifierItemDBus::service() const
 {
     }
 }
 
 
 QString StatusNotifierItemDBus::service() const
 {
-    return m_service;
+    return m_dbus.baseService();
 }
 
 
 }
 
 
index cfccc33..6276ca2 100644 (file)
@@ -77,14 +77,14 @@ public:
     QDBusConnection dbusConnection() const;
 
     /**
     QDBusConnection dbusConnection() const;
 
     /**
-     * Register the service to DBus
+     * Register the StatusNotifierItem to DBus
      */
      */
-    void registerService();
+    void registerTrayIcon();
 
     /**
 
     /**
-     * Unregister the service from DBus
+     * Unregister the StatusNotifierItem from DBus
      */
      */
-    void unregisterService();
+    void unregisterTrayIcon();
 
     /**
      * @return the service this object is registered on the bus under
 
     /**
      * @return the service this object is registered on the bus under
@@ -227,7 +227,6 @@ Q_SIGNALS:
 
 private:
     StatusNotifierItem *m_statusNotifierItem;
 
 private:
     StatusNotifierItem *m_statusNotifierItem;
-    QString m_service;
     QDBusConnection m_dbus;
     static int s_serviceCount;
 };
     QDBusConnection m_dbus;
     static int s_serviceCount;
 };