Skip to content

Commit

Permalink
Port ivishell integration to QWaylandShellIntegrationTemplate
Browse files Browse the repository at this point in the history
Use ivi_application as the principal global and use QWaylandClientExtensionTemplate
to manage ivi_controller.

Change-Id: I172c14d3b79e875842459c36e4e191ed5287eadc
Reviewed-by: David Edmundson <[email protected]>
  • Loading branch information
Sodivad committed Mar 1, 2023
1 parent 42091fa commit 801b217
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -29,8 +32,7 @@ class Q_WAYLANDCLIENT_EXPORT QWaylandIviShellIntegration : public QWaylandShellI
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;
Expand Down

0 comments on commit 801b217

Please sign in to comment.