[neon/qt6/qt6-wayland/Neon/release] debian/patches: add backport patch as recommended on kde-distro's
Carlos De Maine
null at kde.org
Fri May 2 10:55:38 BST 2025
Git commit 3beb44ec6b0ac297f4fb8d2c551d738fb082105f by Carlos De Maine.
Committed on 02/05/2025 at 09:55.
Pushed by carlosdem into branch 'Neon/release'.
add backport patch as recommended on kde-distro's
A +80 -0 debian/patches/popup_backport.patch
A +1 -0 debian/patches/series
https://invent.kde.org/neon/qt6/qt6-wayland/-/commit/3beb44ec6b0ac297f4fb8d2c551d738fb082105f
diff --git a/debian/patches/popup_backport.patch b/debian/patches/popup_backport.patch
new file mode 100644
index 0000000..93cdf79
--- /dev/null
+++ b/debian/patches/popup_backport.patch
@@ -0,0 +1,80 @@
+From e4556c59f0c8250da7c16759432b2ac0a5ac9d9f Mon Sep 17 00:00:00 2001
+From: Vlad Zahorodnii <vlad.zahorodnii at kde.org>
+Date: Mon, 31 Mar 2025 11:40:12 +0300
+Subject: [PATCH] Client: Reset mFrameCallbackTimedOut when showing a window
+
+When a window is hidden, the corresponding expose event is sent
+asynchronously. So, a buffer (and a frame callback) can be attached
+after the window is hidden.
+
+QWaylandWindow::initWindow() handles that case by attaching a nil buffer
+to the surface, but it skips resetting the frame callback things.
+
+If mFrameCallbackTimedOut is not reset, then the window can get stuck
+in the unexposed state and not show up after the second setVisible(true).
+
+This change makes the initWindow() function also reset frame callback
+data. It fixes some windows not showing up after remapping them.
+
+Change-Id: I8952ffed24844c73721c4f689786146c317e014d
+Reviewed-by: David Edmundson <davidedmundson at kde.org>
+(cherry picked from commit 3a48c2b92565cde21a9330f125e61487391921c4)
+Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot at qt-project.org>
+---
+ src/client/qwaylandwindow.cpp | 13 ++++++++++---
+ src/client/qwaylandwindow_p.h | 1 +
+ 2 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
+index 7a3bf6ddc..578a84e99 100644
+--- a/src/client/qwaylandwindow.cpp
++++ b/src/client/qwaylandwindow.cpp
+@@ -106,6 +106,7 @@ void QWaylandWindow::initWindow()
+ */
+ mSurface->attach(nullptr, 0, 0);
+ mSurface->commit();
++ resetFrameCallback();
+
+ if (window()->type() == Qt::Desktop)
+ return;
+@@ -325,6 +326,15 @@ void QWaylandWindow::resetSurfaceRole()
+ delete std::exchange(mShellSurface, nullptr);
+ delete std::exchange(mSubSurfaceWindow, nullptr);
+ emit surfaceRoleDestroyed();
++
++ resetFrameCallback();
++ mInFrameRender = false;
++ mWaitingToApplyConfigure = false;
++ mExposed = false;
++}
++
++void QWaylandWindow::resetFrameCallback()
++{
+ {
+ QMutexLocker lock(&mFrameSyncMutex);
+ if (mFrameCallback) {
+@@ -338,10 +348,7 @@ void QWaylandWindow::resetSurfaceRole()
+ killTimer(mFrameCallbackCheckIntervalTimerId);
+ mFrameCallbackCheckIntervalTimerId = -1;
+ }
+- mInFrameRender = false;
+ mFrameCallbackTimedOut = false;
+- mWaitingToApplyConfigure = false;
+- mExposed = false;
+ }
+
+ QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface)
+diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
+index 1a99efb8d..ac08f1f08 100644
+--- a/src/client/qwaylandwindow_p.h
++++ b/src/client/qwaylandwindow_p.h
+@@ -351,6 +351,7 @@ private:
+ bool shouldCreateShellSurface() const;
+ bool shouldCreateSubSurface() const;
+ void resetSurfaceRole();
++ void resetFrameCallback();
+ QPlatformScreen *calculateScreenFromSurfaceEvents() const;
+ void setOpaqueArea(const QRegion &opaqueArea);
+ bool isOpaque() const;
+--
+GitLab
diff --git a/debian/patches/series b/debian/patches/series
new file mode 100644
index 0000000..8e06290
--- /dev/null
+++ b/debian/patches/series
@@ -0,0 +1 @@
+popup_backport.patch
More information about the Neon-commits
mailing list