diff --git a/plugins/application-tray/api/dbus/org.kde.StatusNotifierItem.xml b/plugins/application-tray/api/dbus/org.kde.StatusNotifierItem.xml
index 64e9b4dc1..b4275399b 100644
--- a/plugins/application-tray/api/dbus/org.kde.StatusNotifierItem.xml
+++ b/plugins/application-tray/api/dbus/org.kde.StatusNotifierItem.xml
@@ -58,6 +58,7 @@
+
diff --git a/plugins/application-tray/sniprotocolhandler.cpp b/plugins/application-tray/sniprotocolhandler.cpp
index 8fad3fa2a..6c2fb7acf 100644
--- a/plugins/application-tray/sniprotocolhandler.cpp
+++ b/plugins/application-tray/sniprotocolhandler.cpp
@@ -179,6 +179,13 @@ SniTrayProtocolHandler::SniTrayProtocolHandler(const QString &sniServicePath, QO
connect(m_sniInter, &StatusNotifierItem::NewTitle, this, &SniTrayProtocolHandler::titleChanged);
connect(m_sniInter, &StatusNotifierItem::NewStatus, this, &SniTrayProtocolHandler::statusChanged);
connect(m_sniInter, &StatusNotifierItem::NewToolTip, this, &SniTrayProtocolHandler::tooltiChanged);
+ connect(m_sniInter, &StatusNotifierItem::NewMenu, this, [this] {
+ m_menuPath = m_sniInter->menu().path();
+ if (m_dbusMenuImporter) {
+ delete m_dbusMenuImporter;
+ m_dbusMenuImporter = nullptr;
+ }
+ });
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [this](DGuiApplicationHelper::ColorType themeType) {
Q_UNUSED(themeType)
if (auto menu = menuImporter()) {
@@ -200,7 +207,6 @@ SniTrayProtocolHandler::~SniTrayProtocolHandler()
void SniTrayProtocolHandler::init()
{
generateId();
- m_menuPath = m_sniInter->menu().path();
m_cachedIcon = dbusImageList2QIcon(m_sniInter->iconPixmap());
m_cachedAttentionIcon = dbusImageList2QIcon(m_sniInter->attentionIconPixmap());
m_cachedOverlayIcon = dbusImageList2QIcon(m_sniInter->overlayIconPixmap());
@@ -216,7 +222,10 @@ DBusMenuImporter *SniTrayProtocolHandler::menuImporter() const
{
if (!m_dbusMenuImporter) {
auto that = const_cast(this);
- if (that->m_menuPath == QLatin1String("/NO_DBUSMENU")) {
+ if (that->m_menuPath.isEmpty()) {
+ that->m_menuPath = m_sniInter->menu().path();
+ }
+ if (that->m_menuPath.isEmpty() || that->m_menuPath == QLatin1String("/NO_DBUSMENU")) {
return nullptr;
}
that->m_dbusMenuImporter = new DBusMenu(m_service, m_menuPath, that);