summaryrefslogtreecommitdiffstats
path: root/src/imports
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@theqtcompany.com>2015-08-24 16:51:01 +0200
committerJørgen Lind <jorgen.lind@theqtcompany.com>2015-08-28 13:10:33 +0200
commitd2d70779224b067f6035f431319036054272ce65 (patch)
tree0ea297990553ff75cf82fb840d59dde903903dcd /src/imports
parent88f821e189bd1d4d4550c1864f622ca7df2a7c34 (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.qml2
-rw-r--r--src/imports/compositor/qwaylandquickcompositorplugin.cpp44
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]