summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@theqtcompany.com>2015-07-29 13:50:15 +0200
committerJørgen Lind <jorgen.lind@theqtcompany.com>2015-08-28 13:09:41 +0200
commit7c65f7e9618a104b1304ec1a7a1cf7ee31527c87 (patch)
tree78dc02d7d815c7203d80ea74eae1ade6279638aa
parent0e1bd0256ed13c3385f36b06b3589524060b03c5 (diff)
Add createSurface factory function on QWaylandCompositor
This simplifies subclassing the compositor getting Change-Id: I392b84febae62df042b23fa806360bc068bf984f
-rw-r--r--src/compositor/compositor_api/qwaylandcompositor.cpp6
-rw-r--r--src/compositor/compositor_api/qwaylandcompositor.h2
-rw-r--r--src/compositor/compositor_api/qwaylandquickcompositor.cpp26
-rw-r--r--src/compositor/compositor_api/qwaylandquickcompositor.h6
-rw-r--r--src/compositor/wayland_wrapper/qwlcompositor.cpp6
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);
}