diff options
author | David Redondo <qt@david-redondo.de> | 2023-02-23 10:53:45 +0100 |
---|---|---|
committer | David Redondo <qt@david-redondo.de> | 2023-03-01 11:06:26 +0100 |
commit | 801b217e06628b3bc8fc543798652c6267be549d (patch) | |
tree | 875c3e09ab59d4835abffde58554aead22ce7942 /src | |
parent | 42091fa8d180068f73b068b25724d1a251b7bb27 (diff) | |
download | qtwayland-801b217e06628b3bc8fc543798652c6267be549d.tar.gz |
Port ivishell integration to QWaylandShellIntegrationTemplate
Use ivi_application as the principal global and use QWaylandClientExtensionTemplate
to manage ivi_controller.
Change-Id: I172c14d3b79e875842459c36e4e191ed5287eadc
Reviewed-by: David Edmundson <davidedmundson@kde.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp | 31 | ||||
-rw-r--r-- | src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h | 8 |
2 files changed, 20 insertions, 19 deletions
diff --git a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp index 1638b150..8bf9a030 100644 --- a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp +++ b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.cpp @@ -20,25 +20,24 @@ QT_BEGIN_NAMESPACE namespace QtWaylandClient { +class QWaylandIviController : public QWaylandClientExtensionTemplate<QWaylandIviController>, + public QtWayland::ivi_controller +{ +public: + QWaylandIviController() : QWaylandClientExtensionTemplate(1) { } + void initialize() { QWaylandClientExtensionTemplate::initialize(); } +}; + QWaylandIviShellIntegration::QWaylandIviShellIntegration() + : QWaylandShellIntegrationTemplate(1), m_iviController(new QWaylandIviController) { } bool QWaylandIviShellIntegration::initialize(QWaylandDisplay *display) { - for (QWaylandDisplay::RegistryGlobal global : display->globals()) { - if (global.interface == QLatin1String("ivi_application") && !m_iviApplication) - m_iviApplication.reset(new QtWayland::ivi_application(display->wl_registry(), global.id, global.version)); - if (global.interface == QLatin1String("ivi_controller") && !m_iviController) - m_iviController.reset(new QtWayland::ivi_controller(display->wl_registry(), global.id, global.version)); - } - - if (!m_iviApplication) { - qCDebug(lcQpaWayland) << "Couldn't find global ivi_application for ivi-shell"; - return false; - } - - return true; + QWaylandShellIntegrationTemplate::initialize(display); + m_iviController->initialize(); + return isActive(); } /* get unique id @@ -91,15 +90,15 @@ uint32_t QWaylandIviShellIntegration::getNextUniqueSurfaceId() QWaylandShellSurface *QWaylandIviShellIntegration::createShellSurface(QWaylandWindow *window) { - if (!m_iviApplication) + if (!isActive()) return nullptr; uint32_t surfaceId = getNextUniqueSurfaceId(); if (surfaceId == 0) return nullptr; - struct ivi_surface *surface = m_iviApplication->surface_create(surfaceId, window->wlSurface()); - if (!m_iviController) + struct ivi_surface *surface = surface_create(surfaceId, window->wlSurface()); + if (!m_iviController->isActive()) return new QWaylandIviSurface(surface, window); struct ::ivi_controller_surface *controller = m_iviController->ivi_controller::surface_create(surfaceId); diff --git a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h index 82fa9b56..14d9770a 100644 --- a/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h +++ b/src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h @@ -16,8 +16,11 @@ namespace QtWaylandClient { class QWaylandWindow; class QWaylandDisplay; +class QWaylandIviController; -class Q_WAYLANDCLIENT_EXPORT QWaylandIviShellIntegration : public QWaylandShellIntegration +class Q_WAYLANDCLIENT_EXPORT QWaylandIviShellIntegration + : public QWaylandShellIntegrationTemplate<QWaylandIviShellIntegration>, + public QtWayland::ivi_application { public: QWaylandIviShellIntegration(); @@ -29,8 +32,7 @@ private: uint32_t getNextUniqueSurfaceId(); private: - QScopedPointer<QtWayland::ivi_application> m_iviApplication; - QScopedPointer<QtWayland::ivi_controller> m_iviController; + QScopedPointer<QWaylandIviController> m_iviController; uint32_t m_lastSurfaceId = 0; uint32_t m_surfaceNumber = 0; bool m_useEnvSurfaceId = false; |