diff options
author | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-07-29 13:50:15 +0200 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@theqtcompany.com> | 2015-08-28 13:09:41 +0200 |
commit | 7c65f7e9618a104b1304ec1a7a1cf7ee31527c87 (patch) | |
tree | 78dc02d7d815c7203d80ea74eae1ade6279638aa /src | |
parent | 0e1bd0256ed13c3385f36b06b3589524060b03c5 (diff) |
Add createSurface factory function on QWaylandCompositor
This simplifies subclassing the compositor getting
Change-Id: I392b84febae62df042b23fa806360bc068bf984f
Diffstat (limited to 'src')
5 files changed, 16 insertions, 30 deletions
diff --git a/src/compositor/compositor_api/qwaylandcompositor.cpp b/src/compositor/compositor_api/qwaylandcompositor.cpp index 95680b59b..3a269ce30 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandcompositor.cpp @@ -42,6 +42,7 @@ #include "qwaylandoutput.h" #include "qwaylandglobalinterface.h" #include "qwaylandsurfaceview.h" +#include "qwaylandclient.h" #include "wayland_wrapper/qwlcompositor_p.h" #include "wayland_wrapper/qwldatadevice_p.h" @@ -161,6 +162,11 @@ void QWaylandCompositor::setPrimaryOutput(QWaylandOutput *output) m_compositor->setPrimaryOutput(output); } +QWaylandSurface *QWaylandCompositor::createSurface(QWaylandClient *client, quint32 id, int version) +{ + return new QWaylandSurface(client->client(), id, version, this); +} + void QWaylandCompositor::cleanupGraphicsResources() { m_compositor->cleanupGraphicsResources(); diff --git a/src/compositor/compositor_api/qwaylandcompositor.h b/src/compositor/compositor_api/qwaylandcompositor.h index a52e95ca5..f8e918a53 100644 --- a/src/compositor/compositor_api/qwaylandcompositor.h +++ b/src/compositor/compositor_api/qwaylandcompositor.h @@ -160,10 +160,10 @@ public: protected: QWaylandCompositor(const char *socketName, QtWayland::Compositor *dptr); virtual void retainedSelectionReceived(QMimeData *mimeData); - virtual QWaylandOutput *createOutput(QWindow *window, const QString &manufacturer, const QString &model); + virtual QWaylandSurface *createSurface(QWaylandClient *client, quint32 id, int version); friend class QtWayland::Compositor; QtWayland::Compositor *m_compositor; diff --git a/src/compositor/compositor_api/qwaylandquickcompositor.cpp b/src/compositor/compositor_api/qwaylandquickcompositor.cpp index 2a85156c1..6dd7ddd07 100644 --- a/src/compositor/compositor_api/qwaylandquickcompositor.cpp +++ b/src/compositor/compositor_api/qwaylandquickcompositor.cpp @@ -46,27 +46,8 @@ QT_BEGIN_NAMESPACE -class QWaylandQuickCompositorPrivate : public QtWayland::Compositor -{ -public: - QWaylandQuickCompositorPrivate(QWaylandQuickCompositor *compositor, QWaylandCompositor::ExtensionFlags extensions) - : QtWayland::Compositor(compositor, extensions) - { - } - - void compositor_create_surface(Resource *resource, uint32_t id) Q_DECL_OVERRIDE - { - QWaylandQuickSurface *surface = new QWaylandQuickSurface(resource->client(), id, wl_resource_get_version(resource->handle), static_cast<QWaylandQuickCompositor *>(m_qt_compositor)); - primaryOutput()->addSurface(surface); - - //BUG: This may not be an on-screen window surface though - m_qt_compositor->surfaceCreated(surface); - } -}; - - QWaylandQuickCompositor::QWaylandQuickCompositor(const char *socketName, ExtensionFlags extensions) - : QWaylandCompositor(socketName, new QWaylandQuickCompositorPrivate(this, extensions)) + : QWaylandCompositor(socketName, extensions) { 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")); @@ -90,4 +71,9 @@ QWaylandOutput *QWaylandQuickCompositor::createOutput(QWindow *window, return new QWaylandQuickOutput(this, quickWindow, manufacturer, model); } +QWaylandSurface *QWaylandQuickCompositor::createSurface(QWaylandClient *client, quint32 id, int version) +{ + return new QWaylandQuickSurface(client->client(), id, version, this); +} + QT_END_NAMESPACE diff --git a/src/compositor/compositor_api/qwaylandquickcompositor.h b/src/compositor/compositor_api/qwaylandquickcompositor.h index 8d32f1e1b..4df05a10d 100644 --- a/src/compositor/compositor_api/qwaylandquickcompositor.h +++ b/src/compositor/compositor_api/qwaylandquickcompositor.h @@ -41,11 +41,6 @@ QT_BEGIN_NAMESPACE -class QQuickWindow; -class QWaylandQuickCompositorPrivate; -class QWaylandSurfaceView; -class QWaylandOutput; - class Q_COMPOSITOR_EXPORT QWaylandQuickCompositor : public QWaylandCompositor { public: @@ -55,6 +50,7 @@ public: QWaylandOutput *createOutput(QWindow *window, const QString &manufacturer, const QString &model) Q_DECL_OVERRIDE; + QWaylandSurface *createSurface(QWaylandClient *client, quint32 id, int version) Q_DECL_OVERRIDE; }; QT_END_NAMESPACE diff --git a/src/compositor/wayland_wrapper/qwlcompositor.cpp b/src/compositor/wayland_wrapper/qwlcompositor.cpp index 3d0ebdbb7..879d02e07 100644 --- a/src/compositor/wayland_wrapper/qwlcompositor.cpp +++ b/src/compositor/wayland_wrapper/qwlcompositor.cpp @@ -338,11 +338,9 @@ void Compositor::cleanupGraphicsResources() void Compositor::compositor_create_surface(Resource *resource, uint32_t id) { - QWaylandSurface *surface = new QWaylandSurface(resource->client(), id, resource->version(), m_qt_compositor); - + QWaylandClient *client = QWaylandClient::fromWlClient(resource->client()); + QWaylandSurface *surface = m_qt_compositor->createSurface(client, id, resource->version()); primaryOutput()->addSurface(surface); - - //BUG: This may not be an on-screen window surface though m_qt_compositor->surfaceCreated(surface); } |