diff options
Diffstat (limited to 'src/compositor/compositor_api/qwaylandquickcompositor.cpp')
-rw-r--r-- | src/compositor/compositor_api/qwaylandquickcompositor.cpp | 95 |
1 files changed, 55 insertions, 40 deletions
diff --git a/src/compositor/compositor_api/qwaylandquickcompositor.cpp b/src/compositor/compositor_api/qwaylandquickcompositor.cpp index db84ea5f8..8a7ef7451 100644 --- a/src/compositor/compositor_api/qwaylandquickcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandquickcompositor.cpp @@ -4,9 +4,9 @@ ** Copyright (C) 2014 Jolla Ltd, author: <giulio.camuffo@jollamobile.com> ** Contact: http://www.qt.io/licensing/ ** -** This file is part of the plugins of the Qt Toolkit. +** This file is part of the QtWaylandCompositor module of the Qt Toolkit. ** -** $QT_BEGIN_LICENSE:LGPL21$ +** $QT_BEGIN_LICENSE:LGPL3$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the @@ -17,74 +17,89 @@ ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 or version 3 as published by the Free -** Software Foundation and appearing in the file LICENSE.LGPLv21 and -** LICENSE.LGPLv3 included in the packaging of this file. Please review the -** following information to ensure the GNU Lesser General Public License -** requirements will be met: https://www.gnu.org/licenses/lgpl.html and -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPLv3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl.html. ** -** As a special exception, The Qt Company gives you certain additional -** rights. These rights are described in The Qt Company LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or later as published by the Free +** Software Foundation and appearing in the file LICENSE.GPL included in +** the packaging of this file. Please review the following information to +** ensure the GNU General Public License version 2.0 requirements will be +** met: http://www.gnu.org/licenses/gpl-2.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ -#include <QtCompositor/private/qwlcompositor_p.h> -#include <QtCompositor/private/qwlsurface_p.h> +#include <QtQml/QQmlEngine> #include "qwaylandclient.h" #include "qwaylandquickcompositor.h" #include "qwaylandquicksurface.h" -#include "qwaylandsurfaceitem.h" #include "qwaylandquickoutput.h" +#include "qwaylandquickitem.h" +#include "qwaylandoutput.h" +#include <QtWaylandCompositor/private/qwaylandcompositor_p.h> QT_BEGIN_NAMESPACE -class QWaylandQuickCompositorPrivate : public QtWayland::Compositor +class QWaylandQuickCompositorPrivate : public QWaylandCompositorPrivate { public: - QWaylandQuickCompositorPrivate(QWaylandQuickCompositor *compositor, QWaylandCompositor::ExtensionFlags extensions) - : QtWayland::Compositor(compositor, extensions) + QWaylandQuickCompositorPrivate(QWaylandCompositor *compositor) + : QWaylandCompositorPrivate(compositor) { } - - void compositor_create_surface(wl_compositor::Resource *resource, uint32_t id) Q_DECL_OVERRIDE +protected: + QWaylandSurface *createDefaultSurface() Q_DECL_OVERRIDE { - QWaylandQuickSurface *surface = new QWaylandQuickSurface(resource->client(), id, wl_resource_get_version(resource->handle), static_cast<QWaylandQuickCompositor *>(m_qt_compositor)); - surface->handle()->addToOutput(primaryOutput()->handle()); - m_surfaces << surface->handle(); - //BUG: This may not be an on-screen window surface though - m_qt_compositor->surfaceCreated(surface); + return new QWaylandQuickSurface(); } }; +QWaylandQuickCompositor::QWaylandQuickCompositor(QObject *parent) + : QWaylandCompositor(*new QWaylandQuickCompositorPrivate(this), parent) +{ +} -QWaylandQuickCompositor::QWaylandQuickCompositor(const char *socketName, ExtensionFlags extensions) - : QWaylandCompositor(socketName, new QWaylandQuickCompositorPrivate(this, extensions)) +/*! + * \qmlproperty list QtWaylandCompositor::WaylandCompositor::extensions + * + * A list of extensions that the compositor advertises to its clients. For + * any Wayland extension the compositor should support, instantiate its component, + * and add it to the list of extensions. + * + * For instance, the following code would allow the clients to request shell surfaces + * in the compositor using the wl_shell interface. + * + * \code + * import QtWayland.Compositor 1.0 + * + * WaylandCompositor { + * extensions: [ Shell { + * // ... + * } ] + * } + * \endcode + */ + +void QWaylandQuickCompositor::create() { - qmlRegisterUncreatableType<QWaylandSurfaceItem>("QtCompositor", 1, 0, "WaylandSurfaceItem", QObject::tr("Cannot create instance of WaylandSurfaceItem")); - qmlRegisterUncreatableType<QWaylandQuickSurface>("QtCompositor", 1, 0, "WaylandQuickSurface", QObject::tr("Cannot create instance of WaylandQuickSurface")); - qmlRegisterUncreatableType<QWaylandClient>("QtCompositor", 1, 0, "WaylandClient", QObject::tr("Cannot create instance of WaylandClient")); - qmlRegisterUncreatableType<QWaylandOutput>("QtCompositor", 1, 0, "WaylandOutput", QObject::tr("Cannot create instance of WaylandOutput")); + QWaylandCompositor::create(); } -QWaylandSurfaceView *QWaylandQuickCompositor::createView(QWaylandSurface *surf) + +void QWaylandQuickCompositor::classBegin() { - return new QWaylandSurfaceItem(static_cast<QWaylandQuickSurface *>(surf)); } -QWaylandOutput *QWaylandQuickCompositor::createOutput(QWindow *window, - const QString &manufacturer, - const QString &model) +void QWaylandQuickCompositor::componentComplete() { - QQuickWindow *quickWindow = qobject_cast<QQuickWindow *>(window); - if (!quickWindow) - qFatal("%s: couldn't cast QWindow to QQuickWindow. All output windows must " - "be QQuickWindow derivates when using QWaylandQuickCompositor", Q_FUNC_INFO); - return new QWaylandQuickOutput(this, quickWindow, manufacturer, model); + create(); } QT_END_NAMESPACE |