diff options
| author | Axel Spoerl <axel.spoerl@qt.io> | 2023-09-07 14:44:26 +0200 |
|---|---|---|
| committer | Axel Spoerl <axel.spoerl@qt.io> | 2023-09-13 16:06:33 +0200 |
| commit | 4bc8f548222a0dd2967063a23e76c37d302253cb (patch) | |
| tree | 2c5bb7f9bb8f2d1f70fd6364cc296a4b8d965076 /src/opengl/qopenglcompositorbackingstore.cpp | |
| parent | e26e6d6725cdaacc981fd2501f69eb4180529551 (diff) | |
QOpenGLCompositorBackingStore: ensure backing store on flushed windows
When the first QEglFSWindow got created for a QWindow, a backing store
was created with it and associated to the new QEglFSWindow. When the
window was hidden on the platform screen, the QEglFSWindow got deleted
and re-created when it was supposed to be shown.
The re-created QEglFSWindow was no longer associated to the backing
store. It was therefore not rendered on the screen.
=> ensure that the backing store is re-associated to the QEglFSWindow,
corrsponding to the QWindow argument passed to flush().
No autotest is added, because the fix is purely visual.
The widgets/menus example can be used to test the functionality
manually (see bug reports).
Fixes: QTBUG-115196
Fixes: QTBUG-116769
Pick-to: 6.6 6.5 6.2
Change-Id: I92ce2e8f7e76bd2d26e713a4d20612d079fb4717
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io>
Diffstat (limited to 'src/opengl/qopenglcompositorbackingstore.cpp')
| -rw-r--r-- | src/opengl/qopenglcompositorbackingstore.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/opengl/qopenglcompositorbackingstore.cpp b/src/opengl/qopenglcompositorbackingstore.cpp index 8bc1ec75ffe..8efccce5793 100644 --- a/src/opengl/qopenglcompositorbackingstore.cpp +++ b/src/opengl/qopenglcompositorbackingstore.cpp @@ -137,6 +137,9 @@ void QOpenGLCompositorBackingStore::updateTexture() void QOpenGLCompositorBackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) { // Called for ordinary raster windows. + auto *handle = dynamic_cast<QOpenGLCompositorWindow *>(window->handle()); + if (handle && !handle->backingStore()) + handle->setBackingStore(this); Q_UNUSED(region); Q_UNUSED(offset); |
