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.
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();
{
if (mode() == Mode::StatusNotifier) {
if (isVisible) {
{
if (mode() == Mode::StatusNotifier) {
if (isVisible) {
- _statusNotifierItemDBus->registerService();
+ _statusNotifierItemDBus->registerTrayIcon();
registerToWatcher();
}
else {
registerToWatcher();
}
else {
- _statusNotifierItemDBus->unregisterService();
+ _statusNotifierItemDBus->unregisterTrayIcon();
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()
{
// 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_dbus.baseService();
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
private:
StatusNotifierItem *m_statusNotifierItem;
private:
StatusNotifierItem *m_statusNotifierItem;
QDBusConnection m_dbus;
static int s_serviceCount;
};
QDBusConnection m_dbus;
static int s_serviceCount;
};