diff options
author | Paul Olav Tvete <paul.tvete@qt.io> | 2018-07-26 15:54:19 +0200 |
---|---|---|
committer | Paul Olav Tvete <paul.tvete@qt.io> | 2018-08-07 14:49:37 +0000 |
commit | 19001dc7c28c750d3dbf0086f5bcac2d11ad592f (patch) | |
tree | 37323610b5b664d2777fe562fea6a516c2902242 | |
parent | a6cfa65eae4d15c7ad5e7411d998332179080fbd (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.cpp | 1 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandquickitem.cpp | 5 | ||||
-rw-r--r-- | src/compositor/compositor_api/qwaylandsurface_p.h | 2 |
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; |