[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