diff --git a/src/kstatusnotifieritemdbus_p.cpp b/src/kstatusnotifieritemdbus_p.cpp --- a/src/kstatusnotifieritemdbus_p.cpp +++ b/src/kstatusnotifieritemdbus_p.cpp @@ -146,10 +146,30 @@ int KStatusNotifierItemDBus::s_serviceCount = 0; +QString generateServiceName() +{ + const QCoreApplication *app = QCoreApplication::instance(); + const QString domain = app->organizationDomain(); + const QStringList parts = domain.split(QLatin1Char('.'), QString::SkipEmptyParts); + + QString reversedDomain; + if (parts.isEmpty()) { + reversedDomain = QStringLiteral("local."); + } else { + Q_FOREACH (const QString &part, parts) { + reversedDomain.prepend(QLatin1Char('.')); + reversedDomain.prepend(part); + } + } + + return reversedDomain + app->applicationName(); +} + KStatusNotifierItemDBus::KStatusNotifierItemDBus(KStatusNotifierItem *parent) : QObject(parent), m_statusNotifierItem(parent), - m_service(QStringLiteral("org.kde.StatusNotifierItem-%1-%2") + m_service(QStringLiteral("%1.StatusNotifierItem-%2-%3") + .arg(generateServiceName()) .arg(QCoreApplication::applicationPid()) .arg(++s_serviceCount)), m_dbus(QDBusConnection(m_service)) @@ -163,7 +183,8 @@ } if (inSandbox) { - m_service = QStringLiteral("org.kde.StatusNotifierItem-%1-%2").arg(QCoreApplication::applicationName()).arg(s_serviceCount); + const QString uniqueId = QDBusConnection::sessionBus().baseService().replace(QRegularExpression(QStringLiteral("[\\.:]")), QStringLiteral("_")); + m_service = QStringLiteral("%1.StatusNotifierItem-%2-%3").arg(generateServiceName()).arg(uniqueId).arg(s_serviceCount); } m_dbus = QDBusConnection::connectToBus(QDBusConnection::SessionBus, m_service);