diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-24 16:51:01 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-28 13:10:33 +0200 |
commit | d2d70779224b067f6035f431319036054272ce65 (patch) | |
tree | 0ea297990553ff75cf82fb840d59dde903903dcd /src/imports | |
parent | 88f821e189bd1d4d4550c1864f622ca7df2a7c34 (diff) |
Make the default wl_shell available from QML
This finaly ties together how to use QWaylandQuickItems with different
shells
It was required to decouple QWaylandView from the QWaylandQuickItem
since QML doesn't play to well with muliple inheritance. The
QWaylandQuickItem can be retrieved from the QWaylandView which is now
conveniently a QObject. Also the QWaylandQuickItem owns the
QWaylandView. This architecture also leaves room for creating a
QWaylandWidget :)
Change-Id: Ib8a00e6f17f0f1bfc3ff244753f021c76db22cb1
Diffstat (limited to 'src/imports')
-rw-r--r-- | src/imports/compositor/WaylandCursorItem.qml | 2 | ||||
-rw-r--r-- | src/imports/compositor/qwaylandquickcompositorplugin.cpp | 44 |
2 files changed, 40 insertions, 6 deletions
diff --git a/src/imports/compositor/WaylandCursorItem.qml b/src/imports/compositor/WaylandCursorItem.qml index 4938ff94b..2b480c066 100644 --- a/src/imports/compositor/WaylandCursorItem.qml +++ b/src/imports/compositor/WaylandCursorItem.qml @@ -34,7 +34,7 @@ import QtQuick 2.0 import QtWayland.Compositor 1.0 -WaylandView { +WaylandQuickItem { id: cursorItem property QtObject compositor property int hotspotX: 0 diff --git a/src/imports/compositor/qwaylandquickcompositorplugin.cpp b/src/imports/compositor/qwaylandquickcompositorplugin.cpp index d04e4940e..597aa0734 100644 --- a/src/imports/compositor/qwaylandquickcompositorplugin.cpp +++ b/src/imports/compositor/qwaylandquickcompositorplugin.cpp @@ -45,8 +45,9 @@ #include <QtCompositor/QWaylandClient> #include <QtCompositor/QWaylandOutput> #include <QtCompositor/QWaylandOutputSpace> +#include <QtCompositor/QWaylandExtension> -#include <QtCompositor/QWaylandCompositor> +#include <QtCompositor/QWaylandShell> #include <QtCompositor/qwaylandexport.h> #include "qwaylandmousetracker_p.h" @@ -57,6 +58,7 @@ class Q_COMPOSITOR_EXPORT QWaylandQuickCompositorImpl : public QWaylandQuickComp { Q_OBJECT Q_PROPERTY(QQmlListProperty<QObject> data READ data DESIGNABLE false) + Q_PROPERTY(QQmlListProperty<QWaylandExtension> extensions READ extensions) Q_CLASSINFO("DefaultProperty", "data") public: QWaylandQuickCompositorImpl(QObject *parent = 0) @@ -70,17 +72,42 @@ public: return QQmlListProperty<QObject>(this, m_objects); } -protected: - void classBegin() Q_DECL_OVERRIDE + QQmlListProperty<QWaylandExtension> extensions() + { + return QQmlListProperty<QWaylandExtension>(this, this, + &QWaylandQuickCompositorImpl::append_extension, + &QWaylandQuickCompositorImpl::countFunction, + &QWaylandQuickCompositorImpl::atFunction, + &QWaylandQuickCompositorImpl::clearFunction); + } + + static int countFunction(QQmlListProperty<QWaylandExtension> *list) + { + return static_cast<QWaylandQuickCompositorImpl *>(list->data)->extension_vector.size(); + } + + static QWaylandExtension *atFunction(QQmlListProperty<QWaylandExtension> *list, int index) + { + return static_cast<QWaylandQuickCompositorImpl *>(list->data)->extension_vector.at(index); + } + + static void append_extension(QQmlListProperty<QWaylandExtension> *list, QWaylandExtension *extension) { - QWaylandQuickCompositor::classBegin(); + QWaylandQuickCompositorImpl *compositor = static_cast<QWaylandQuickCompositorImpl *>(list->data); + extension->setExtensionContainer(compositor); } + static void clearFunction(QQmlListProperty<QWaylandExtension> *list) + { + static_cast<QWaylandQuickCompositorImpl *>(list->data)->extension_vector.clear(); + } +protected: void componentComplete() Q_DECL_OVERRIDE { create(); QWaylandQuickCompositor::componentComplete(); } + private: QList<QObject *> m_objects; }; @@ -148,12 +175,19 @@ public: static void defineModule(const char *uri) { qmlRegisterType<QWaylandQuickCompositorImpl>(uri, 1, 0, "WaylandCompositor"); - qmlRegisterType<QWaylandQuickItem>(uri, 1, 0, "WaylandView"); + qmlRegisterType<QWaylandQuickItem>(uri, 1, 0, "WaylandQuickItem"); qmlRegisterType<QWaylandMouseTracker>(uri, 1, 0, "WaylandMouseTracker"); + + qmlRegisterUncreatableType<QWaylandExtension>(uri, 1, 0, "WaylandExtension", QObject::tr("Cannot create instance of WaylandExtension")); qmlRegisterUncreatableType<QWaylandQuickSurface>(uri, 1, 0, "WaylandSurface", QObject::tr("Cannot create instance of WaylandQuickSurface")); qmlRegisterUncreatableType<QWaylandClient>(uri, 1, 0, "WaylandClient", QObject::tr("Cannot create instance of WaylandClient")); qmlRegisterUncreatableType<QWaylandOutput>(uri, 1, 0, "WaylandOutput", QObject::tr("Cannot create instance of WaylandOutput")); qmlRegisterUncreatableType<QWaylandOutputSpace>(uri, 1, 0, "WaylandOutputSpace", QObject::tr("Cannot create instance of WaylandOutputSpace")); + qmlRegisterUncreatableType<QWaylandView>(uri, 1, 0, "WaylandView", QObject::tr("Cannot create instance of WaylandView, it can be retrieved by accessor on WaylandQuickItem")); + + //This should probably be somewhere else + qmlRegisterType<QWaylandShell>(uri, 1, 0, "DefaultShell"); + qmlRegisterUncreatableType<QWaylandShellSurface>(uri, 1, 0, "DefaultShellSurface", QObject::tr("Cannot create instance of DefaultShellSurface")); } }; //![class decl] |