| /**************************************************************************** |
| ** |
| ** Copyright (C) 2017 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the QtWaylandCompositor module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:GPL$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 3 or (at your option) any later version |
| ** approved by the KDE Free Qt Foundation. The licenses are as published by |
| ** the Free Software Foundation and appearing in the file LICENSE.GPL3 |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| #include "qwaylandivisurface.h" |
| #include "qwaylandivisurface_p.h" |
| #include "qwaylandiviapplication_p.h" |
| #if QT_CONFIG(wayland_compositor_quick) |
| #include "qwaylandivisurfaceintegration_p.h" |
| #endif |
| |
| #include <QtWaylandCompositor/QWaylandResource> |
| #include <QDebug> |
| |
| #include <QtWaylandCompositor/private/qwaylandutils_p.h> |
| |
| QT_BEGIN_NAMESPACE |
| |
| QWaylandSurfaceRole QWaylandIviSurfacePrivate::s_role("ivi_surface"); |
| |
| /*! |
| * \qmltype IviSurface |
| * \inqmlmodule QtWayland.Compositor |
| * \since 5.8 |
| * \brief Provides a simple way to identify and resize a surface. |
| * |
| * This type is part of the \l{IviApplication} extension and provides a way to extend |
| * the functionality of an existing WaylandSurface with a way to resize and identify it. |
| * |
| * It corresponds to the Wayland \c ivi_surface interface. |
| */ |
| |
| /*! |
| * \class QWaylandIviSurface |
| * \inmodule QtWaylandCompositor |
| * \since 5.8 |
| * \brief The QWaylandIviSurface class provides a simple way to identify and resize a surface. |
| * |
| * This class is part of the QWaylandIviApplication extension and provides a way to |
| * extend the functionality of an existing QWaylandSurface with a way to resize and identify it. |
| * |
| * It corresponds to the Wayland \c ivi_surface interface. |
| */ |
| |
| /*! |
| * Constructs a QWaylandIviSurface. |
| */ |
| QWaylandIviSurface::QWaylandIviSurface() |
| : QWaylandShellSurfaceTemplate<QWaylandIviSurface>(*new QWaylandIviSurfacePrivate()) |
| { |
| } |
| |
| /*! |
| * Constructs a QWaylandIviSurface for \a surface and initializes it with the |
| * given \a application, \a surface, \a iviId, and \a resource. |
| */ |
| QWaylandIviSurface::QWaylandIviSurface(QWaylandIviApplication *application, QWaylandSurface *surface, uint iviId, const QWaylandResource &resource) |
| : QWaylandShellSurfaceTemplate<QWaylandIviSurface>(*new QWaylandIviSurfacePrivate()) |
| { |
| initialize(application, surface, iviId, resource); |
| } |
| |
| /*! |
| * \qmlmethod void QtWaylandCompositor::IviSurface::initialize(IviApplication iviApplication, WaylandSurface surface, int iviId, WaylandResource resource) |
| * |
| * Initializes the IviSurface, associating it with the given \a iviApplication, \a surface, |
| * \a iviId, and \a resource. |
| */ |
| |
| /*! |
| * Initializes the QWaylandIviSurface, associating it with the given \a iviApplication, \a surface, |
| * \a iviId, and \a resource. |
| */ |
| void QWaylandIviSurface::initialize(QWaylandIviApplication *iviApplication, QWaylandSurface *surface, uint iviId, const QWaylandResource &resource) |
| { |
| Q_D(QWaylandIviSurface); |
| |
| d->m_iviApplication = iviApplication; |
| d->m_surface = surface; |
| d->m_iviId = iviId; |
| |
| d->init(resource.resource()); |
| setExtensionContainer(surface); |
| |
| emit surfaceChanged(); |
| emit iviIdChanged(); |
| |
| QWaylandCompositorExtension::initialize(); |
| } |
| |
| /*! |
| * \qmlproperty WaylandSurface QtWaylandCompositor::IviSurface::surface |
| * |
| * This property holds the surface associated with this IviSurface. |
| */ |
| |
| /*! |
| * \property QWaylandIviSurface::surface |
| * |
| * This property holds the surface associated with this QWaylandIviSurface. |
| */ |
| QWaylandSurface *QWaylandIviSurface::surface() const |
| { |
| Q_D(const QWaylandIviSurface); |
| return d->m_surface; |
| } |
| |
| /*! |
| * \qmlproperty int QtWaylandCompositor::IviSurface::iviId |
| * \readonly |
| * |
| * This property holds the ivi id id of this IviSurface. |
| */ |
| |
| /*! |
| * \property QWaylandIviSurface::iviId |
| * |
| * This property holds the ivi id of this QWaylandIviSurface. |
| */ |
| uint QWaylandIviSurface::iviId() const |
| { |
| Q_D(const QWaylandIviSurface); |
| return d->m_iviId; |
| } |
| |
| /*! |
| * Returns the Wayland interface for the QWaylandIviSurface. |
| */ |
| const struct wl_interface *QWaylandIviSurface::interface() |
| { |
| return QWaylandIviSurfacePrivate::interface(); |
| } |
| |
| QByteArray QWaylandIviSurface::interfaceName() |
| { |
| return QWaylandIviSurfacePrivate::interfaceName(); |
| } |
| |
| /*! |
| * Returns the surface role for the QWaylandIviSurface. |
| */ |
| QWaylandSurfaceRole *QWaylandIviSurface::role() |
| { |
| return &QWaylandIviSurfacePrivate::s_role; |
| } |
| |
| /*! |
| * Returns the QWaylandIviSurface corresponding to the \a resource. |
| */ |
| QWaylandIviSurface *QWaylandIviSurface::fromResource(wl_resource *resource) |
| { |
| if (auto p = QtWayland::fromResource<QWaylandIviSurfacePrivate *>(resource)) |
| return p->q_func(); |
| return nullptr; |
| } |
| |
| /*! |
| * \qmlmethod int QtWaylandCompositor::IviSurface::sendConfigure(size size) |
| * |
| * Sends a configure event to the client, telling it to resize the surface to the given \a size. |
| */ |
| |
| /*! |
| * Sends a configure event to the client, telling it to resize the surface to the given \a size. |
| */ |
| void QWaylandIviSurface::sendConfigure(const QSize &size) |
| { |
| if (!size.isValid()) { |
| qWarning() << "Can't configure ivi_surface with an invalid size" << size; |
| return; |
| } |
| Q_D(QWaylandIviSurface); |
| d->send_configure(size.width(), size.height()); |
| } |
| |
| #if QT_CONFIG(wayland_compositor_quick) |
| QWaylandQuickShellIntegration *QWaylandIviSurface::createIntegration(QWaylandQuickShellSurfaceItem *item) |
| { |
| return new QtWayland::IviSurfaceIntegration(item); |
| } |
| #endif |
| |
| /*! |
| * \internal |
| */ |
| void QWaylandIviSurface::initialize() |
| { |
| QWaylandShellSurfaceTemplate::initialize(); |
| } |
| |
| QWaylandIviSurfacePrivate::QWaylandIviSurfacePrivate() |
| { |
| } |
| |
| void QWaylandIviSurfacePrivate::ivi_surface_destroy_resource(QtWaylandServer::ivi_surface::Resource *resource) |
| { |
| Q_UNUSED(resource); |
| Q_Q(QWaylandIviSurface); |
| QWaylandIviApplicationPrivate::get(m_iviApplication)->unregisterIviSurface(q); |
| delete q; |
| } |
| |
| void QWaylandIviSurfacePrivate::ivi_surface_destroy(QtWaylandServer::ivi_surface::Resource *resource) |
| { |
| wl_resource_destroy(resource->handle); |
| } |
| |
| QT_END_NAMESPACE |