From afa02bdf0056f9e876b906b3597bd9c83e1368bb Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Fri, 15 Jun 2018 00:55:07 +0200 Subject: [PATCH] qtui: Fix duplication of tray icon with StatusNotifier 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 | 8 ++++---- src/qtui/statusnotifieritemdbus.cpp | 20 ++++++-------------- src/qtui/statusnotifieritemdbus.h | 9 ++++----- 3 files changed, 14 insertions(+), 23 deletions(-) diff --git a/src/qtui/statusnotifieritem.cpp b/src/qtui/statusnotifieritem.cpp index 9f34e7c9..68d81abb 100644 --- a/src/qtui/statusnotifieritem.cpp +++ b/src/qtui/statusnotifieritem.cpp @@ -240,11 +240,11 @@ bool StatusNotifierItem::isSystemTrayAvailable() const void StatusNotifierItem::onModeChanged(Mode mode) { if (mode == Mode::StatusNotifier) { - _statusNotifierItemDBus->registerService(); + _statusNotifierItemDBus->registerTrayIcon(); registerToWatcher(); } else { - _statusNotifierItemDBus->unregisterService(); + _statusNotifierItemDBus->unregisterTrayIcon(); } } @@ -262,11 +262,11 @@ void StatusNotifierItem::onVisibilityChanged(bool isVisible) { if (mode() == Mode::StatusNotifier) { if (isVisible) { - _statusNotifierItemDBus->registerService(); + _statusNotifierItemDBus->registerTrayIcon(); registerToWatcher(); } else { - _statusNotifierItemDBus->unregisterService(); + _statusNotifierItemDBus->unregisterTrayIcon(); } } } diff --git a/src/qtui/statusnotifieritemdbus.cpp b/src/qtui/statusnotifieritemdbus.cpp index 2be23283..ee21928f 100644 --- a/src/qtui/statusnotifieritemdbus.cpp +++ b/src/qtui/statusnotifieritemdbus.cpp @@ -160,20 +160,16 @@ int StatusNotifierItemDBus::s_serviceCount = 0; 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); - //qDebug() << "service is" << m_service; - registerService(); } StatusNotifierItemDBus::~StatusNotifierItemDBus() { - unregisterService(); + unregisterTrayIcon(); } @@ -185,28 +181,24 @@ QDBusConnection StatusNotifierItemDBus::dbusConnection() const // 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 -void StatusNotifierItemDBus::unregisterService() +void StatusNotifierItemDBus::unregisterTrayIcon() { - //qDebug() << "unregistering from" << m_service; if (m_dbus.isConnected()) { m_dbus.unregisterObject("/StatusNotifierItem"); - m_dbus.unregisterService(m_service); } } QString StatusNotifierItemDBus::service() const { - return m_service; + return m_dbus.baseService(); } diff --git a/src/qtui/statusnotifieritemdbus.h b/src/qtui/statusnotifieritemdbus.h index cfccc330..6276ca28 100644 --- a/src/qtui/statusnotifieritemdbus.h +++ b/src/qtui/statusnotifieritemdbus.h @@ -77,14 +77,14 @@ public: 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 @@ -227,7 +227,6 @@ Q_SIGNALS: private: StatusNotifierItem *m_statusNotifierItem; - QString m_service; QDBusConnection m_dbus; static int s_serviceCount; }; -- 2.20.1