summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Edmundson <davidedmundson@kde.org>2023-12-08 14:46:44 +0000
committerLiang Qi <liang.qi@qt.io>2023-12-11 09:53:30 +0100
commitb109438973aaec7124390ca99ec54193feff5046 (patch)
tree2c743b878b11758d85bb58408e24c14d8b5871c1 /src
parent3a74b634e5ecd24f3e4d32f5187cbb22d51e9559 (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.h2
-rw-r--r--src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp2
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.