summaryrefslogtreecommitdiffstats
path: root/src/gui/platform/unix/dbusmenu/qdbusmenubar.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/platform/unix/dbusmenu/qdbusmenubar.cpp')
-rw-r--r--src/gui/platform/unix/dbusmenu/qdbusmenubar.cpp24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/gui/platform/unix/dbusmenu/qdbusmenubar.cpp b/src/gui/platform/unix/dbusmenu/qdbusmenubar.cpp
index 2c006366cb4..862b60f12d0 100644
--- a/src/gui/platform/unix/dbusmenu/qdbusmenubar.cpp
+++ b/src/gui/platform/unix/dbusmenu/qdbusmenubar.cpp
@@ -4,6 +4,10 @@
#include "qdbusmenubar_p.h"
#include "qdbusmenuregistrarproxy_p.h"
+#include <private/qguiapplication_p.h>
+#include <private/qgenericunixservices_p.h>
+#include <qpa/qplatformintegration.h>
+
QT_BEGIN_NAMESPACE
using namespace Qt::StringLiterals;
@@ -18,7 +22,6 @@ QDBusMenuBar::QDBusMenuBar()
: QPlatformMenuBar()
, m_menu(new QDBusPlatformMenu())
, m_menuAdaptor(new QDBusMenuAdaptor(m_menu))
- , m_windowId(0)
{
QDBusMenuItem::registerDBusTypes();
connect(m_menu, &QDBusPlatformMenu::propertiesUpdated,
@@ -88,7 +91,7 @@ void QDBusMenuBar::handleReparent(QWindow *newParentWindow)
{
if (newParentWindow) {
unregisterMenuBar();
- m_windowId = newParentWindow->winId();
+ m_window = newParentWindow;
registerMenuBar();
}
}
@@ -116,30 +119,39 @@ void QDBusMenuBar::registerMenuBar()
return;
QDBusMenuRegistrarInterface registrar(REGISTRAR_SERVICE, REGISTRAR_PATH, connection, this);
- QDBusPendingReply<> r = registrar.RegisterWindow(m_windowId, QDBusObjectPath(m_objectPath));
+ QDBusPendingReply<> r = registrar.RegisterWindow(m_window->winId(), QDBusObjectPath(m_objectPath));
r.waitForFinished();
if (r.isError()) {
qWarning("Failed to register window menu, reason: %s (\"%s\")",
qUtf8Printable(r.error().name()), qUtf8Printable(r.error().message()));
connection.unregisterObject(m_objectPath);
+ return;
}
+ const auto unixServices = dynamic_cast<QGenericUnixServices *>(
+ QGuiApplicationPrivate::platformIntegration()->services());
+ unixServices->registerDBusMenuForWindow(m_window, connection.baseService(), m_objectPath);
}
void QDBusMenuBar::unregisterMenuBar()
{
QDBusConnection connection = QDBusConnection::sessionBus();
- if (m_windowId) {
+ if (m_window) {
QDBusMenuRegistrarInterface registrar(REGISTRAR_SERVICE, REGISTRAR_PATH, connection, this);
- QDBusPendingReply<> r = registrar.UnregisterWindow(m_windowId);
+ QDBusPendingReply<> r = registrar.UnregisterWindow(m_window->winId());
r.waitForFinished();
if (r.isError())
qWarning("Failed to unregister window menu, reason: %s (\"%s\")",
qUtf8Printable(r.error().name()), qUtf8Printable(r.error().message()));
+
+ const auto unixServices = dynamic_cast<QGenericUnixServices *>(
+ QGuiApplicationPrivate::platformIntegration()->services());
+ unixServices->unregisterDBusMenuForWindow(m_window);
}
- if (!m_objectPath.isEmpty())
+ if (!m_objectPath.isEmpty()) {
connection.unregisterObject(m_objectPath);
+ }
}
QT_END_NAMESPACE