diff options
author | David Edmundson <davidedmundson@kde.org> | 2023-12-08 14:46:44 +0000 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2023-12-11 09:53:30 +0100 |
commit | b109438973aaec7124390ca99ec54193feff5046 (patch) | |
tree | 2c743b878b11758d85bb58408e24c14d8b5871c1 /src | |
parent | 3a74b634e5ecd24f3e4d32f5187cbb22d51e9559 (diff) |
Handle subsurfaces with async configure
With XDG Shell we cannot map a buffer until we get a configure event.
To handle this the normal expose events is blocked then sent explicitly
when we get this request.
This works, but we also need to notify that subsurfaces are now exposed
with the parent.
Pick-to: 6.7 6.6 6.5
Fixes: QTBUG-119882
Fixes: QTBUG-119883
Change-Id: I0ae69c8da702037e7575cfc0939d3e783b50f323
Reviewed-by: Liang Qi <liang.qi@qt.io>
Diffstat (limited to 'src')
-rw-r--r-- | src/client/qwaylandwindow_p.h | 2 | ||||
-rw-r--r-- | src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h index aa125e6ea..1ed4ce79f 100644 --- a/src/client/qwaylandwindow_p.h +++ b/src/client/qwaylandwindow_p.h @@ -232,6 +232,7 @@ public: void endFrame(); void closeChildPopups(); + void sendRecursiveExposeEvent(); virtual void reinit(); void reset(); @@ -353,7 +354,6 @@ private: void handleScreensChanged(); void updateScale(); void setScale(qreal newScale); - void sendRecursiveExposeEvent(); QWaylandWindow *guessTransientParent() const; void addChildPopup(QWaylandWindow *child); diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp index a2728bd92..d1f0a9b08 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -606,7 +606,7 @@ void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial) // We have to do the initial applyConfigure() immediately, since that is the expose. applyConfigure(); if (isExposed()) - m_window->handleExpose(QRect(QPoint(), m_window->geometry().size())); + m_window->sendRecursiveExposeEvent(); } else { // Later configures are probably resizes, so we have to queue them up for a time when we // are not painting to the window. |