summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Redondo <qt@david-redondo.de>2023-02-23 10:53:45 +0100
committerDavid Redondo <qt@david-redondo.de>2023-03-01 11:06:26 +0100
commit801b217e06628b3bc8fc543798652c6267be549d (patch)
tree875c3e09ab59d4835abffde58554aead22ce7942 /src
parent42091fa8d180068f73b068b25724d1a251b7bb27 (diff)
downloadqtwayland-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.cpp31
-rw-r--r--src/plugins/shellintegration/ivi-shell/qwaylandivishellintegration.h8
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;