summaryrefslogtreecommitdiffstats
path: root/src/compositor/compositor_api/qwaylandsurface.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@theqtcompany.com>2015-09-04 14:35:19 +0200
committerJørgen Lind <jorgen.lind@theqtcompany.com>2015-09-04 16:12:47 +0200
commit6358b0ede93c6633802126bf8bf0a44860e66917 (patch)
tree17c8a90565b3aa4f0d3c0cb36a642c0da53bf229 /src/compositor/compositor_api/qwaylandsurface.cpp
parentb666aa58d7a168fe4ddb694caba099343421aa65 (diff)
Make it possible to connect to a createSurface signal
Remove the QWaylandSurface factory function from QWaylandCompositor. Add a default constructor to QWaylandSurface and a initialize function. Add som housekeeping code in debug builds that ensures the user calls initialize. Add a fallback factory function on the compositor if the user is fine with getting the default implementation of QWaylandSurface or QWaylandQuickSurface Change-Id: Ib9289c323b6723f0d1119a484cf9e0c26c95b549
Diffstat (limited to 'src/compositor/compositor_api/qwaylandsurface.cpp')
-rw-r--r--src/compositor/compositor_api/qwaylandsurface.cpp67
1 files changed, 59 insertions, 8 deletions
diff --git a/src/compositor/compositor_api/qwaylandsurface.cpp b/src/compositor/compositor_api/qwaylandsurface.cpp
index 37d07515c..58312de56 100644
--- a/src/compositor/compositor_api/qwaylandsurface.cpp
+++ b/src/compositor/compositor_api/qwaylandsurface.cpp
@@ -113,22 +113,28 @@ static QRegion infiniteRegion() {
QPoint(std::numeric_limits<int>::max(), std::numeric_limits<int>::max())));
}
-QWaylandSurfacePrivate::QWaylandSurfacePrivate(QWaylandClient *client, quint32 id, int version, QWaylandCompositor *compositor)
- : QtWaylandServer::wl_surface(client->client(), id, version)
- , compositor(compositor)
+QList<QWaylandSurfacePrivate *> QWaylandSurfacePrivate::uninitializedSurfaces;
+
+QWaylandSurfacePrivate::QWaylandSurfacePrivate()
+ : QtWaylandServer::wl_surface()
+ , compositor(Q_NULLPTR)
, refCount(1)
- , client(client)
+ , client(Q_NULLPTR)
, buffer(0)
, inputPanelSurface(0)
, inputRegion(infiniteRegion())
, isCursorSurface(false)
, destroyed(false)
, mapped(false)
+ , isInitialized(false)
, contentOrientation(Qt::PrimaryOrientation)
{
pending.buffer = 0;
pending.newlyAttached = false;
pending.inputRegion = infiniteRegion();
+#ifndef QT_NO_DEBUG
+ addUninitializedSurface(this);
+#endif
}
QWaylandSurfacePrivate::~QWaylandSurfacePrivate()
@@ -173,6 +179,27 @@ void QWaylandSurfacePrivate::notifyViewsAboutDestruction()
}
}
+#ifndef QT_NO_DEBUG
+void QWaylandSurfacePrivate::addUninitializedSurface(QWaylandSurfacePrivate *surface)
+{
+ Q_ASSERT(!surface->isInitialized);
+ Q_ASSERT(!uninitializedSurfaces.contains(surface));
+ uninitializedSurfaces.append(surface);
+}
+
+void QWaylandSurfacePrivate::removeUninitializedSurface(QWaylandSurfacePrivate *surface)
+{
+ Q_ASSERT(surface->isInitialized);
+ bool removed = uninitializedSurfaces.removeOne(surface);
+ Q_ASSERT(removed);
+}
+
+bool QWaylandSurfacePrivate::hasUninitializedSurface()
+{
+ return uninitializedSurfaces.size();
+}
+#endif
+
void QWaylandSurfacePrivate::surface_destroy_resource(Resource *)
{
Q_Q(QWaylandSurface);
@@ -319,13 +346,19 @@ QtWayland::SurfaceBuffer *QWaylandSurfacePrivate::createSurfaceBuffer(struct ::w
return newBuffer;
}
-QWaylandSurface::QWaylandSurface(QWaylandClient *client, quint32 id, int version, QWaylandCompositor *compositor)
- : QObject(*new QWaylandSurfacePrivate(client, id, version, compositor))
+QWaylandSurface::QWaylandSurface()
+ : QObject(*new QWaylandSurfacePrivate())
{
}
-QWaylandSurface::QWaylandSurface(QWaylandSurfacePrivate *dptr)
- : QObject(*dptr)
+QWaylandSurface::QWaylandSurface(QWaylandCompositor *compositor, QWaylandClient *client, uint id, int version)
+ : QObject(*new QWaylandSurfacePrivate())
+{
+ initialize(compositor, client, id, version);
+}
+
+QWaylandSurface::QWaylandSurface(QWaylandSurfacePrivate &dptr)
+ : QObject(dptr)
{
}
@@ -340,6 +373,24 @@ QWaylandSurface::~QWaylandSurface()
}
}
+void QWaylandSurface::initialize(QWaylandCompositor *compositor, QWaylandClient *client, uint id, int version)
+{
+ Q_D(QWaylandSurface);
+ d->compositor = compositor;
+ d->client = client;
+ d->init(client->client(), id, version);
+ d->isInitialized = true;
+#ifndef QT_NO_DEBUG
+ QWaylandSurfacePrivate::removeUninitializedSurface(d);
+#endif
+}
+
+bool QWaylandSurface::isInitialized() const
+{
+ Q_D(const QWaylandSurface);
+ return d->isInitialized;
+}
+
QWaylandClient *QWaylandSurface::client() const
{
Q_D(const QWaylandSurface);