diff options
| author | David Redondo <qt@david-redondo.de> | 2023-06-13 14:02:59 +0200 |
|---|---|---|
| committer | David Redondo <qt@david-redondo.de> | 2024-01-17 09:06:19 +0100 |
| commit | c15b219108835b63aabee0f2868ca62dc5a1c063 (patch) | |
| tree | c59ca89b66b413864569492a509eaeb9e95e1743 /src/plugins/platforms/wayland/qwaylandnativeinterface.cpp | |
| parent | 2d4b07753407af18e05f53e7e39431a67dfc9fe9 (diff) | |
Make sure wayland object destructors are called
Always at least call the generated "interface"_destroy method which does
destroy the proxy. For not already wrapped classes a small template
is introduced to pass a function that is called in the destructor.
Fixes: QTBUG-111576
Change-Id: I373463710764958ddea42ef0f7dc010c427b2ce8
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Diffstat (limited to 'src/plugins/platforms/wayland/qwaylandnativeinterface.cpp')
| -rw-r--r-- | src/plugins/platforms/wayland/qwaylandnativeinterface.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp b/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp index 65272f3c228..601f833aacc 100644 --- a/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp +++ b/src/plugins/platforms/wayland/qwaylandnativeinterface.cpp @@ -35,8 +35,10 @@ void *QWaylandNativeInterface::nativeResourceForIntegration(const QByteArray &re if (lowerCaseResource == "display" || lowerCaseResource == "wl_display" || lowerCaseResource == "nativedisplay") return m_integration->display()->wl_display(); - if (lowerCaseResource == "compositor") - return const_cast<wl_compositor *>(m_integration->display()->wl_compositor()); + if (lowerCaseResource == "compositor") { + if (auto compositor = m_integration->display()->compositor()) + return compositor->object(); + } if (lowerCaseResource == "server_buffer_integration") return m_integration->serverBufferIntegration(); @@ -76,7 +78,9 @@ wl_display *QtWaylandClient::QWaylandNativeInterface::display() const wl_compositor *QtWaylandClient::QWaylandNativeInterface::compositor() const { - return const_cast<wl_compositor *>(m_integration->display()->wl_compositor()); + if (auto compositor = m_integration->display()->compositor()) + return compositor->object(); + return nullptr; } wl_seat *QtWaylandClient::QWaylandNativeInterface::seat() const @@ -129,8 +133,10 @@ void *QWaylandNativeInterface::nativeResourceForWindow(const QByteArray &resourc if (lowerCaseResource == "display") return m_integration->display()->wl_display(); - if (lowerCaseResource == "compositor") - return const_cast<wl_compositor *>(m_integration->display()->wl_compositor()); + if (lowerCaseResource == "compositor") { + if (auto compositor = m_integration->display()->compositor()) + return compositor->object(); + } if (lowerCaseResource == "surface") { QWaylandWindow *w = static_cast<QWaylandWindow*>(window->handle()); return w ? w->wlSurface() : nullptr; |
