summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@qt.io>2018-07-26 15:54:19 +0200
committerPaul Olav Tvete <paul.tvete@qt.io>2018-08-07 14:49:37 +0000
commit19001dc7c28c750d3dbf0086f5bcac2d11ad592f (patch)
tree37323610b5b664d2777fe562fea6a516c2902242
parenta6cfa65eae4d15c7ad5e7411d998332179080fbd (diff)
Handle subsurfaces added before QWaylandQuickItem created
This makes gstreamer and Firefox work with QML-based compositors. Task-number: QTBUG-69643 Change-Id: Iaddaeb7dc3493a262993eecc5ea0b6ce076b4044 Reviewed-by: Johan Helsing <johan.helsing@qt.io>
-rw-r--r--src/compositor/compositor_api/qwaylandcompositor.cpp1
-rw-r--r--src/compositor/compositor_api/qwaylandquickitem.cpp5
-rw-r--r--src/compositor/compositor_api/qwaylandsurface_p.h2
3 files changed, 8 insertions, 0 deletions
diff --git a/src/compositor/compositor_api/qwaylandcompositor.cpp b/src/compositor/compositor_api/qwaylandcompositor.cpp
index 8c476cf1c..548298c41 100644
--- a/src/compositor/compositor_api/qwaylandcompositor.cpp
+++ b/src/compositor/compositor_api/qwaylandcompositor.cpp
@@ -307,6 +307,7 @@ void QWaylandCompositorPrivate::subcompositor_get_subsurface(wl_subcompositor::R
QWaylandSurface *childSurface = QWaylandSurface::fromResource(surface);
QWaylandSurface *parentSurface = QWaylandSurface::fromResource(parent);
QWaylandSurfacePrivate::get(childSurface)->initSubsurface(parentSurface, resource->client(), id, 1);
+ QWaylandSurfacePrivate::get(parentSurface)->subsurfaceChildren.append(childSurface);
emit q->subsurfaceChanged(childSurface, parentSurface);
}
diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp
index 09e8f7621..c61d84d6c 100644
--- a/src/compositor/compositor_api/qwaylandquickitem.cpp
+++ b/src/compositor/compositor_api/qwaylandquickitem.cpp
@@ -50,6 +50,7 @@
#include <QtWaylandCompositor/QWaylandDrag>
#endif
#include <QtWaylandCompositor/private/qwlclientbufferintegration_p.h>
+#include <QtWaylandCompositor/private/qwaylandsurface_p.h>
#include <QtGui/QKeyEvent>
#include <QtGui/QGuiApplication>
@@ -888,6 +889,10 @@ void QWaylandQuickItem::handleSurfaceChanged()
QWaylandOutput *output = newSurface->compositor()->outputFor(window());
d->view->setOutput(output);
}
+ for (auto subsurface : QWaylandSurfacePrivate::get(newSurface)->subsurfaceChildren) {
+ if (!subsurface.isNull())
+ handleSubsurfaceAdded(subsurface.data());
+ }
updateSize();
}
diff --git a/src/compositor/compositor_api/qwaylandsurface_p.h b/src/compositor/compositor_api/qwaylandsurface_p.h
index 0cb12d15b..e0b624fce 100644
--- a/src/compositor/compositor_api/qwaylandsurface_p.h
+++ b/src/compositor/compositor_api/qwaylandsurface_p.h
@@ -163,6 +163,8 @@ public: //member variables
QList<QtWayland::FrameCallback *> pendingFrameCallbacks;
QList<QtWayland::FrameCallback *> frameCallbacks;
+ QList<QPointer<QWaylandSurface>> subsurfaceChildren;
+
QRegion inputRegion;
QRegion opaqueRegion;