diff --git a/.gitignore b/.gitignore index 11cc3a4..0d5d117 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ /qtwayland-everywhere-opensource-src-5.15.8.tar.xz /qtwayland-everywhere-opensource-src-5.15.9.tar.xz /qtwayland-everywhere-opensource-src-5.15.10.tar.xz +/qtwayland-everywhere-opensource-src-5.15.11.tar.xz diff --git a/0001-Client-Announce-an-output-after-receiving-more-compl.patch b/0001-Client-Announce-an-output-after-receiving-more-compl.patch index 5eca4da..7a461dd 100644 --- a/0001-Client-Announce-an-output-after-receiving-more-compl.patch +++ b/0001-Client-Announce-an-output-after-receiving-more-compl.patch @@ -1,7 +1,7 @@ -From d7ea7592e47828d2f806bb372db705a1f3b9f948 Mon Sep 17 00:00:00 2001 +From ec085b69839e85b4543afb2009d519da21ffd782 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Wed, 5 May 2021 20:49:26 +0300 -Subject: [PATCH 01/51] Client: Announce an output after receiving more +Subject: [PATCH 01/59] Client: Announce an output after receiving more complete state Output initialization is not atomic, meaning that the compositor may @@ -142,5 +142,5 @@ index df1c94f2..050cfdc0 100644 #if QT_CONFIG(cursor) -- -2.40.1 +2.41.0 diff --git a/0002-Fix-issue-with-repeated-window-size-changes.patch b/0002-Fix-issue-with-repeated-window-size-changes.patch index a5fe730..39528b7 100644 --- a/0002-Fix-issue-with-repeated-window-size-changes.patch +++ b/0002-Fix-issue-with-repeated-window-size-changes.patch @@ -1,7 +1,7 @@ -From e08bb6ed336b4bd2f3e85b0d2f43f1b49cdaf7b0 Mon Sep 17 00:00:00 2001 +From 09b0405d8dd413c34ab03b3c9a288f3e11765ec1 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Mon, 15 Feb 2021 08:31:06 +0900 -Subject: [PATCH 02/51] Fix issue with repeated window size changes +Subject: [PATCH 02/59] Fix issue with repeated window size changes Check if the new window size is different from the size requested previously before calling wl_egl_window_resize. It addresses the issue @@ -20,7 +20,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp -index 57d4eb6b..13dd747a 100644 +index e00c28c3..64f7caeb 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp @@ -122,14 +122,16 @@ void QWaylandEglWindow::updateSurface(bool create) @@ -42,10 +42,10 @@ index 57d4eb6b..13dd747a 100644 if (!m_eglSurface && m_waylandEglWindow && create) { diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h -index 6c8f04ec..94c56325 100644 +index 2fccbcea..ad1e5ee9 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h -@@ -87,6 +87,7 @@ private: +@@ -85,6 +85,7 @@ private: mutable QOpenGLFramebufferObject *m_contentFBO = nullptr; QSurfaceFormat m_format; @@ -54,5 +54,5 @@ index 6c8f04ec..94c56325 100644 } -- -2.40.1 +2.41.0 diff --git a/0003-Client-Connect-drags-being-accepted-to-updating-the-.patch b/0003-Client-Connect-drags-being-accepted-to-updating-the-.patch index 9a00b2a..41072e7 100644 --- a/0003-Client-Connect-drags-being-accepted-to-updating-the-.patch +++ b/0003-Client-Connect-drags-being-accepted-to-updating-the-.patch @@ -1,7 +1,7 @@ -From 40965d23e170cb02b184cda5962352acd415542e Mon Sep 17 00:00:00 2001 +From 1cdb21c2e739aabb6793cf90029e76921b67d975 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Tue, 9 Feb 2021 16:09:21 +0000 -Subject: [PATCH 03/51] Client: Connect drags being accepted to updating the +Subject: [PATCH 03/59] Client: Connect drags being accepted to updating the source drag icon Currently in a multi-process drag and drop when the other client accepts @@ -23,7 +23,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 1 file changed, 1 insertion(+) diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp -index 7e2e3308..bbd2d568 100644 +index 1e2db786..0124b890 100644 --- a/src/client/qwaylanddatadevice.cpp +++ b/src/client/qwaylanddatadevice.cpp @@ -124,6 +124,7 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon) @@ -35,5 +35,5 @@ index 7e2e3308..bbd2d568 100644 start_drag(m_dragSource->object(), origin->wlSurface(), icon->wlSurface(), m_display->currentInputDevice()->serial()); return true; -- -2.40.1 +2.41.0 diff --git a/0004-Client-Disconnect-registry-listener-on-destruction.patch b/0004-Client-Disconnect-registry-listener-on-destruction.patch index 10c6c79..3bbe895 100644 --- a/0004-Client-Disconnect-registry-listener-on-destruction.patch +++ b/0004-Client-Disconnect-registry-listener-on-destruction.patch @@ -1,7 +1,7 @@ -From 1474fd12afbc6c9850872801c70252c425d4280b Mon Sep 17 00:00:00 2001 +From 4bce11a39578ed43d7efd61e2140704e84386cb9 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Fri, 14 May 2021 13:23:24 +0100 -Subject: [PATCH 04/51] Client: Disconnect registry listener on destruction +Subject: [PATCH 04/59] Client: Disconnect registry listener on destruction If a display outlives a QWaylandClientExtension and a new global is announced we end up delivering an event to a now deleted extension which @@ -15,7 +15,7 @@ Change-Id: Idc0de40be61a2f7627ab4963e1fe29b22fbf3f04 2 files changed, 8 insertions(+) diff --git a/src/client/global/qwaylandclientextension.cpp b/src/client/global/qwaylandclientextension.cpp -index 125b1e19..797b06fe 100644 +index 966096a8..2dc61b77 100644 --- a/src/client/global/qwaylandclientextension.cpp +++ b/src/client/global/qwaylandclientextension.cpp @@ -88,6 +88,13 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver) @@ -45,5 +45,5 @@ index 98272e57..5bd28398 100644 QtWaylandClient::QWaylandIntegration *integration() const; int version() const; -- -2.40.1 +2.41.0 diff --git a/0005-Client-Set-XdgShell-size-hints-before-the-first-comm.patch b/0005-Client-Set-XdgShell-size-hints-before-the-first-comm.patch index ced642c..7a64401 100644 --- a/0005-Client-Set-XdgShell-size-hints-before-the-first-comm.patch +++ b/0005-Client-Set-XdgShell-size-hints-before-the-first-comm.patch @@ -1,7 +1,7 @@ -From f5e0a5773064636b6802a4f8f7fb0cb3cec46a68 Mon Sep 17 00:00:00 2001 +From 668ebf5792f1eb0910245465e5407fcab86ce98b Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 3 May 2021 23:01:53 +0100 -Subject: [PATCH 05/51] Client: Set XdgShell size hints before the first commit +Subject: [PATCH 05/59] Client: Set XdgShell size hints before the first commit propagateSizeHints is only called in QWindow we have platform window and minimumSizeHint is then sent. We also need to send existing hints when @@ -20,7 +20,7 @@ Reviewed-by: Aleix Pol Gonzalez 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp -index fa9c01aa..c3d2d3ea 100644 +index 94ea573e..699a75eb 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -105,8 +105,6 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() @@ -54,5 +54,5 @@ index 2277bbb8..2fdd0a7c 100644 QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100)); QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000)); -- -2.40.1 +2.41.0 diff --git a/0006-Fix-build.patch b/0006-Fix-build.patch index 36b73bf..bf0c867 100644 --- a/0006-Fix-build.patch +++ b/0006-Fix-build.patch @@ -1,7 +1,7 @@ -From 27108c290bf0f12bb032827e5c01cc94e330d547 Mon Sep 17 00:00:00 2001 +From bc07f9d8083f9f731fefb0f1180a18d2172eb57d Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 14 Jun 2021 12:45:37 +0100 -Subject: [PATCH 06/51] Fix build +Subject: [PATCH 06/59] Fix build 1b5e43a593e917610e6245f7a272ac081c508ba4 relied on a patch that we can't backport. @@ -14,7 +14,7 @@ d6ac8cf6. 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/client/global/qwaylandclientextension.cpp b/src/client/global/qwaylandclientextension.cpp -index 797b06fe..edccfe63 100644 +index 2dc61b77..36609c08 100644 --- a/src/client/global/qwaylandclientextension.cpp +++ b/src/client/global/qwaylandclientextension.cpp @@ -74,7 +74,10 @@ void QWaylandClientExtensionPrivate::handleRegistryGlobal(void *data, ::wl_regis @@ -42,5 +42,5 @@ index 69cc46a0..9091efbe 100644 class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate -- -2.40.1 +2.41.0 diff --git a/0007-Fix-remove-listener.patch b/0007-Fix-remove-listener.patch index 256747d..63d073a 100644 --- a/0007-Fix-remove-listener.patch +++ b/0007-Fix-remove-listener.patch @@ -1,7 +1,7 @@ -From 07a83b80d7c1b90146d9c6b6339bf4e730ca50b9 Mon Sep 17 00:00:00 2001 +From cfbb11da7f7ecbf6372967f01015d269d832dccf Mon Sep 17 00:00:00 2001 From: Zhang Liang Date: Mon, 1 Feb 2021 19:29:43 +0800 -Subject: [PATCH 07/51] Fix: remove listener +Subject: [PATCH 07/59] Fix: remove listener Add the operation for removing the listener form listener list @@ -13,7 +13,7 @@ Reviewed-by: David Edmundson 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 78e387bc..280e63bd 100644 +index 8a6d5db1..16f8ca1a 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -456,9 +456,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data) @@ -29,5 +29,5 @@ index 78e387bc..280e63bd 100644 uint32_t QWaylandDisplay::currentTimeMillisec() -- -2.40.1 +2.41.0 diff --git a/0008-Hook-up-queryKeyboardModifers.patch b/0008-Hook-up-queryKeyboardModifers.patch index f1b5de3..dc007ca 100644 --- a/0008-Hook-up-queryKeyboardModifers.patch +++ b/0008-Hook-up-queryKeyboardModifers.patch @@ -1,7 +1,7 @@ -From 218aa4f1fb91a1dfe892111a45376091dd34ec06 Mon Sep 17 00:00:00 2001 +From 25218285ed45d32a93d10e354975ccbbd98cdb77 Mon Sep 17 00:00:00 2001 From: David Redondo Date: Wed, 26 May 2021 14:49:40 +0200 -Subject: [PATCH 08/51] Hook up queryKeyboardModifers +Subject: [PATCH 08/59] Hook up queryKeyboardModifers Can be useful when upon enter a modifiers event is received but no key event so no QKeyEvent is generated. @@ -51,5 +51,5 @@ index ff70ae25..73b80658 100644 QStringList themeNames() const override; -- -2.40.1 +2.41.0 diff --git a/0009-Correctly-detect-if-image-format-is-supported-by-QIm.patch b/0009-Correctly-detect-if-image-format-is-supported-by-QIm.patch index db26011..80bafba 100644 --- a/0009-Correctly-detect-if-image-format-is-supported-by-QIm.patch +++ b/0009-Correctly-detect-if-image-format-is-supported-by-QIm.patch @@ -1,7 +1,7 @@ -From cedb1d0987486f0162d8a10defb3705f5e3b3a45 Mon Sep 17 00:00:00 2001 +From d9d5f69f5619dbaa40ca9b97981721467424947b Mon Sep 17 00:00:00 2001 From: Jan Blackquill Date: Tue, 24 Aug 2021 14:36:34 -0400 -Subject: [PATCH 09/51] Correctly detect if image format is supported by +Subject: [PATCH 09/59] Correctly detect if image format is supported by QImageWriter The code queries potential image formats by stripping a mimetype of its @@ -51,7 +51,7 @@ Reviewed-by: Qt CI Bot 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/qwaylandmimehelper.cpp b/src/shared/qwaylandmimehelper.cpp -index a5fdd34d..051a91dc 100644 +index c5266ab3..e2fe1928 100644 --- a/src/shared/qwaylandmimehelper.cpp +++ b/src/shared/qwaylandmimehelper.cpp @@ -60,7 +60,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString & @@ -64,5 +64,5 @@ index a5fdd34d..051a91dc 100644 fmt = imgFmt; } -- -2.40.1 +2.41.0 diff --git a/0010-Client-Don-t-always-recreate-frame-callbacks.patch b/0010-Client-Don-t-always-recreate-frame-callbacks.patch index fd8ce9c..57f80a3 100644 --- a/0010-Client-Don-t-always-recreate-frame-callbacks.patch +++ b/0010-Client-Don-t-always-recreate-frame-callbacks.patch @@ -1,7 +1,7 @@ -From 39f76fba46ff2a6bd4aca6c2abea501d56bed62e Mon Sep 17 00:00:00 2001 +From d2992d985306a8bec6298c5238a85ade1ae0c611 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 27 May 2021 19:55:04 -0300 -Subject: [PATCH 10/51] Client: Don't always recreate frame callbacks +Subject: [PATCH 10/59] Client: Don't always recreate frame callbacks The main QWaylandWindow method that is executed when handling updates is QWaylandWindow::handleUpdate(). This method always, unconditionally queues @@ -38,10 +38,10 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 2 files changed, 6 insertions(+) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index df2dcdaa..23816895 100644 +index 5a390434..2dce02f0 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp -@@ -1192,6 +1192,10 @@ void QWaylandWindow::requestUpdate() +@@ -1196,6 +1196,10 @@ void QWaylandWindow::requestUpdate() void QWaylandWindow::handleUpdate() { qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread(); @@ -73,5 +73,5 @@ index 2fdd0a7c..e2593314 100644 void tst_xdgshell::popup() -- -2.40.1 +2.41.0 diff --git a/0011-Client-Always-destroy-frame-callback-in-the-actual-c.patch b/0011-Client-Always-destroy-frame-callback-in-the-actual-c.patch index e2e28fd..96a2a6e 100644 --- a/0011-Client-Always-destroy-frame-callback-in-the-actual-c.patch +++ b/0011-Client-Always-destroy-frame-callback-in-the-actual-c.patch @@ -1,7 +1,7 @@ -From c9cd53f50c71af26278589b1477c8d800c776ac1 Mon Sep 17 00:00:00 2001 +From cc3fbf3c1d36d5d997082927f895a88ea6d17474 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 27 May 2021 20:02:53 -0300 -Subject: [PATCH 11/51] Client: Always destroy frame callback in the actual +Subject: [PATCH 11/59] Client: Always destroy frame callback in the actual callback It's good hygiene to destroy all frame callbacks. Destroy the @@ -23,7 +23,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 23816895..d3f28d68 100644 +index 2dce02f0..c532b44a 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -635,9 +635,13 @@ void QWaylandWindow::commit() @@ -41,7 +41,7 @@ index 23816895..d3f28d68 100644 window->handleFrameCallback(); } }; -@@ -1201,11 +1205,6 @@ void QWaylandWindow::handleUpdate() +@@ -1205,11 +1209,6 @@ void QWaylandWindow::handleUpdate() if (!mSurface) return; @@ -54,5 +54,5 @@ index 23816895..d3f28d68 100644 struct ::wl_surface *wrappedSurface = reinterpret_cast(wl_proxy_create_wrapper(mSurface->object())); wl_proxy_set_queue(reinterpret_cast(wrappedSurface), mFrameQueue.queue); -- -2.40.1 +2.41.0 diff --git a/0012-Wayland-client-use-wl_keyboard-to-determine-active-s.patch b/0012-Wayland-client-use-wl_keyboard-to-determine-active-s.patch index 9c3eff5..c04222a 100644 --- a/0012-Wayland-client-use-wl_keyboard-to-determine-active-s.patch +++ b/0012-Wayland-client-use-wl_keyboard-to-determine-active-s.patch @@ -1,7 +1,7 @@ -From 398c131a02d48fc9f538951f08caa93dccd03a1a Mon Sep 17 00:00:00 2001 +From 2a68cb54a8a07a59e140fe8acd966ca6bb485afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A9ven=20Car?= Date: Wed, 18 Aug 2021 18:28:20 +0200 -Subject: [PATCH 12/51] Wayland client: use wl_keyboard to determine active +Subject: [PATCH 12/59] Wayland client: use wl_keyboard to determine active state Commit f497a5bb87270174b8e0106b7eca1992d44ff15d made QWaylandDisplay @@ -46,7 +46,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 13 files changed, 39 insertions(+), 66 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 280e63bd..1568052e 100644 +index 16f8ca1a..d1ca0274 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -579,14 +579,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic @@ -95,7 +95,7 @@ index 1bad8b67..15104d65 100644 void blockingReadEvents(); void flushRequests(); diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index d3f28d68..b363c352 100644 +index c532b44a..fdffe584 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -96,7 +96,6 @@ QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display) @@ -115,7 +115,7 @@ index d3f28d68..b363c352 100644 } QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface) -@@ -1105,10 +1106,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab) +@@ -1109,10 +1110,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab) return true; } @@ -234,7 +234,7 @@ index 261f8cbb..c1bcd5c6 100644 private: QScopedPointer m_xdgShell; diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp -index c3d2d3ea..9a362b74 100644 +index 699a75eb..888bab77 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -67,11 +67,6 @@ QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface) @@ -337,5 +337,5 @@ index e2593314..73d1eb9c 100644 const QSize screenSize(640, 480); const uint maximizedSerial = exec([=] { -- -2.40.1 +2.41.0 diff --git a/0013-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch b/0013-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch index 2299a66..cc0393c 100644 --- a/0013-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch +++ b/0013-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch @@ -1,7 +1,7 @@ -From 4cbf15b311fd9b00b28205e474c4b31a92ab819d Mon Sep 17 00:00:00 2001 +From 888f3c6eca8e807a3ca870067e080349a76a5703 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Fri, 16 Jul 2021 13:00:03 +0200 -Subject: [PATCH 13/51] Client: do not empty clipboard when a new popup/window +Subject: [PATCH 13/59] Client: do not empty clipboard when a new popup/window is opened If we open a new popup or a window within the same app we have to avoid @@ -21,7 +21,7 @@ Cherry-pick: 1e57ebd501cfc2255300392cd4565cd034efeed8 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 1568052e..aa8808e9 100644 +index d1ca0274..7560bf41 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -601,6 +601,19 @@ void QWaylandDisplay::handleWaylandSync() @@ -45,7 +45,7 @@ index 1568052e..aa8808e9 100644 const wl_callback_listener QWaylandDisplay::syncCallbackListener = { diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp -index e931d1f5..5d704795 100644 +index 08e8adb8..e1111124 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp @@ -1304,14 +1304,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed() @@ -64,5 +64,5 @@ index e931d1f5..5d704795 100644 mRepeatTimer.stop(); } -- -2.40.1 +2.41.0 diff --git a/0014-Client-Implement-DataDeviceV3.patch b/0014-Client-Implement-DataDeviceV3.patch index 174ffe6..a761050 100644 --- a/0014-Client-Implement-DataDeviceV3.patch +++ b/0014-Client-Implement-DataDeviceV3.patch @@ -1,7 +1,7 @@ -From 52f362f8dfd27a65cdee945ba923ae30521ab922 Mon Sep 17 00:00:00 2001 +From 23c698917e0fdac0d9519334b7c375cf226e36c7 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Tue, 16 Feb 2021 09:51:47 +0000 -Subject: [PATCH 14/51] Client: Implement DataDeviceV3 +Subject: [PATCH 14/59] Client: Implement DataDeviceV3 DataDeviceV2 fixes a leak of DataDevice resources. @@ -36,7 +36,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 12 files changed, 153 insertions(+), 46 deletions(-) diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp -index bbd2d568..fbb5aa91 100644 +index 0124b890..d154c695 100644 --- a/src/client/qwaylanddatadevice.cpp +++ b/src/client/qwaylanddatadevice.cpp @@ -72,6 +72,8 @@ QWaylandDataDevice::QWaylandDataDevice(QWaylandDataDeviceManager *manager, QWayl @@ -340,7 +340,7 @@ index 9cf1483c..6f667398 100644 diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp -index f45122fb..5599cbd4 100644 +index 9b17cdfa..9610366d 100644 --- a/src/client/qwaylanddatasource.cpp +++ b/src/client/qwaylanddatasource.cpp @@ -101,7 +101,32 @@ void QWaylandDataSource::data_source_send(const QString &mime_type, int32_t fd) @@ -378,10 +378,10 @@ index f45122fb..5599cbd4 100644 } diff --git a/src/client/qwaylanddatasource_p.h b/src/client/qwaylanddatasource_p.h -index 25afff79..96f07bc3 100644 +index 3003da1b..b6a9e06b 100644 --- a/src/client/qwaylanddatasource_p.h +++ b/src/client/qwaylanddatasource_p.h -@@ -77,17 +77,25 @@ public: +@@ -77,16 +77,24 @@ public: QMimeData *mimeData() const; Q_SIGNALS: @@ -401,7 +401,6 @@ index 25afff79..96f07bc3 100644 + void data_source_action(uint32_t action) override; private: - QWaylandDisplay *m_display = nullptr; QMimeData *m_mime_data = nullptr; + bool m_accepted = false; + Qt::DropAction m_dropAction = Qt::IgnoreAction; @@ -409,7 +408,7 @@ index 25afff79..96f07bc3 100644 } diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index aa8808e9..2d298532 100644 +index 7560bf41..7f28d01c 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -356,7 +356,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin @@ -509,5 +508,5 @@ index 1568b3b9..067410d0 100644 class DataDeviceCompositor : public DefaultCompositor { public: -- -2.40.1 +2.41.0 diff --git a/0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch b/0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch index a37d54b..50fa3a9 100644 --- a/0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch +++ b/0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch @@ -1,7 +1,7 @@ -From b29079669153d7b1894fc13b2cd8c6de1ad5471a Mon Sep 17 00:00:00 2001 +From bfc5a684b3f8aa38f28267513872376e04bda8b6 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 18 Nov 2021 13:05:30 +0100 -Subject: [PATCH 15/51] Client: Delay deletion of QDrag object until after +Subject: [PATCH 15/59] Client: Delay deletion of QDrag object until after we're done with it In certain cases, most notably when performing drag and drop operations @@ -63,5 +63,5 @@ index 747f0190..46f629ac 100644 private: QWaylandDisplay *m_display = nullptr; -- -2.40.1 +2.41.0 diff --git a/0016-Client-Avoid-processing-of-events-when-showing-windo.patch b/0016-Client-Avoid-processing-of-events-when-showing-windo.patch index 5ecac9f..2a0b592 100644 --- a/0016-Client-Avoid-processing-of-events-when-showing-windo.patch +++ b/0016-Client-Avoid-processing-of-events-when-showing-windo.patch @@ -1,7 +1,7 @@ -From fde475c6e235429e7af64a54b9d81e893c618af7 Mon Sep 17 00:00:00 2001 +From 4d4eb8e543f688c9d5c9e1083f5e46ddf42b9786 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Sun, 14 Nov 2021 13:54:19 +0000 -Subject: [PATCH 16/51] Client: Avoid processing of events when showing windows +Subject: [PATCH 16/59] Client: Avoid processing of events when showing windows The only time we want to dispatch events from the wayland socket is when the application is waiting for external events. Doing so at any other @@ -22,7 +22,7 @@ Reviewed-by: Aleix Pol Gonzalez 1 file changed, 1 deletion(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index b363c352..b98435ed 100644 +index fdffe584..83a394c4 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -437,7 +437,6 @@ void QWaylandWindow::setVisible(bool visible) @@ -34,5 +34,5 @@ index b363c352..b98435ed 100644 setGeometry(windowGeometry()); // Don't flush the events here, or else the newly visible window may start drawing, but since -- -2.40.1 +2.41.0 diff --git a/0017-Handle-registry_global-out-of-constructor.patch b/0017-Handle-registry_global-out-of-constructor.patch index 4009c3d..4edbf60 100644 --- a/0017-Handle-registry_global-out-of-constructor.patch +++ b/0017-Handle-registry_global-out-of-constructor.patch @@ -1,7 +1,7 @@ -From f22c2639663d9b9010fd79a5873e11a716106b65 Mon Sep 17 00:00:00 2001 +From 359bc440082f7876a51c12a0db4e9399006726f2 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Thu, 18 Feb 2021 15:45:49 +0900 -Subject: [PATCH 17/51] Handle registry_global out of constructor +Subject: [PATCH 17/59] Handle registry_global out of constructor Factory functions in QWaylandDisplay::registry_global() can be overridden. Later, other classes instantiated in the registry_global can support @@ -17,7 +17,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 2d298532..97fb8cbe 100644 +index 7f28d01c..c2482030 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -160,13 +160,6 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) @@ -81,5 +81,5 @@ index cd8569b1..8afecb31 100644 mDisplay->ensureScreen(); } -- -2.40.1 +2.41.0 diff --git a/0018-Connect-flushRequest-after-forceRoundTrip.patch b/0018-Connect-flushRequest-after-forceRoundTrip.patch index 46898ea..25dde0b 100644 --- a/0018-Connect-flushRequest-after-forceRoundTrip.patch +++ b/0018-Connect-flushRequest-after-forceRoundTrip.patch @@ -1,7 +1,7 @@ -From 192b3af086ecca973109be4e169a601af434239a Mon Sep 17 00:00:00 2001 +From 3430f8812afa51b5b6fb139361b45fbfe6cff5d0 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 17 Mar 2021 16:31:10 +0900 -Subject: [PATCH 18/51] Connect flushRequest after forceRoundTrip +Subject: [PATCH 18/59] Connect flushRequest after forceRoundTrip If flushRequest is connected with aboutToBlock, the flushRequest may consumes all events so that processEvents might be blocked in forceRoundTrip. @@ -43,5 +43,5 @@ index 8afecb31..661cea53 100644 mDisplay->ensureScreen(); } -- -2.40.1 +2.41.0 diff --git a/0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch b/0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch index 726d19a..ed7c344 100644 --- a/0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch +++ b/0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch @@ -1,7 +1,7 @@ -From 965fc31b57176d7d913d90465a857c285abd0a59 Mon Sep 17 00:00:00 2001 +From 1fe2895d2e3ccae0ae0abb2760e1714ac296c3ea Mon Sep 17 00:00:00 2001 From: Adrien Faveraux Date: Fri, 26 Nov 2021 09:18:58 +0100 -Subject: [PATCH 19/51] Move the wayland socket polling to a separate event +Subject: [PATCH 19/59] Move the wayland socket polling to a separate event thread New event threads is introduced which calls poll() on the wayland fd, @@ -32,7 +32,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 5 files changed, 255 insertions(+), 108 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 97fb8cbe..ebcdbd22 100644 +index c2482030..c38f6f82 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -87,10 +87,203 @@ @@ -371,13 +371,15 @@ index 97fb8cbe..ebcdbd22 100644 } QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const -@@ -678,4 +816,6 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p +@@ -678,6 +816,8 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p } // namespace QtWaylandClient +#include "qwaylanddisplay.moc" + QT_END_NAMESPACE + + #include "moc_qwaylanddisplay_p.cpp" diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h index 49820255..cf91b924 100644 --- a/src/client/qwaylanddisplay_p.h @@ -458,7 +460,7 @@ index 661cea53..fbf00c6b 100644 // Call after eventDispatcher is fully connected, for QWaylandDisplay::forceRoundTrip() mDisplay->initialize(); diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index b98435ed..292dd023 100644 +index 83a394c4..3d9741d2 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr; @@ -506,7 +508,7 @@ index b98435ed..292dd023 100644 if (mWaitingForFrameCallback) { qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed"; -@@ -1179,8 +1182,11 @@ void QWaylandWindow::requestUpdate() +@@ -1183,8 +1186,11 @@ void QWaylandWindow::requestUpdate() Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA // If we have a frame callback all is good and will be taken care of there @@ -520,7 +522,7 @@ index b98435ed..292dd023 100644 // If we've already called deliverUpdateRequest(), but haven't seen any attach+commit/swap yet // This is a somewhat redundant behavior and might indicate a bug in the calling code, so log -@@ -1193,7 +1199,12 @@ void QWaylandWindow::requestUpdate() +@@ -1197,7 +1203,12 @@ void QWaylandWindow::requestUpdate() // so use invokeMethod to delay the delivery a bit. QMetaObject::invokeMethod(this, [this] { // Things might have changed in the meantime @@ -534,7 +536,7 @@ index b98435ed..292dd023 100644 deliverUpdateRequest(); }, Qt::QueuedConnection); } -@@ -1213,9 +1224,10 @@ void QWaylandWindow::handleUpdate() +@@ -1217,9 +1228,10 @@ void QWaylandWindow::handleUpdate() if (!mSurface) return; @@ -547,7 +549,7 @@ index b98435ed..292dd023 100644 mFrameCallback = wl_surface_frame(wrappedSurface); wl_proxy_wrapper_destroy(wrappedSurface); wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this); -@@ -1225,6 +1237,8 @@ void QWaylandWindow::handleUpdate() +@@ -1229,6 +1241,8 @@ void QWaylandWindow::handleUpdate() // Start a timer for handling the case when the compositor stops sending frame callbacks. if (mFrameCallbackTimeout > 0) { QMetaObject::invokeMethod(this, [this] { @@ -570,5 +572,5 @@ index fb3ed606..54ac67a9 100644 // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer -- -2.40.1 +2.41.0 diff --git a/0020-Client-Remove-mWaitingForUpdateDelivery.patch b/0020-Client-Remove-mWaitingForUpdateDelivery.patch index 8e9f558..3305580 100644 --- a/0020-Client-Remove-mWaitingForUpdateDelivery.patch +++ b/0020-Client-Remove-mWaitingForUpdateDelivery.patch @@ -1,7 +1,7 @@ -From 39f6f824e660c36b2865bf55f9ea609aaa02697e Mon Sep 17 00:00:00 2001 +From fa1d00f0c46d09187c43e9a133a55e8d3f8b3652 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 1 Feb 2022 13:05:36 +0200 -Subject: [PATCH 20/51] Client: Remove mWaitingForUpdateDelivery +Subject: [PATCH 20/59] Client: Remove mWaitingForUpdateDelivery Currently, mWaitingForUpdateDelivery is shared between the main thread (doHandleFrameCallback()) and the frame callback event thread @@ -23,7 +23,7 @@ Reviewed-by: David Edmundson 2 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 292dd023..de5af1bd 100644 +index 3d9741d2..afc9c137 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -651,23 +651,18 @@ void QWaylandWindow::handleFrameCallback() @@ -75,5 +75,5 @@ index 54ac67a9..cf7ce879 100644 QElapsedTimer mFrameCallbackElapsedTimer; struct ::wl_callback *mFrameCallback = nullptr; -- -2.40.1 +2.41.0 diff --git a/0021-client-Simplify-round-trip-behavior.patch b/0021-client-Simplify-round-trip-behavior.patch index 69476e6..8ffdf01 100644 --- a/0021-client-Simplify-round-trip-behavior.patch +++ b/0021-client-Simplify-round-trip-behavior.patch @@ -1,7 +1,7 @@ -From 89b396cbef7c8fb7041d3a13d952d468c5c57e56 Mon Sep 17 00:00:00 2001 +From 24228d70a20ddd13f82a798522c397fb2ec65038 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Wed, 9 Feb 2022 17:20:48 +0000 -Subject: [PATCH 21/51] client: Simplify round trip behavior +Subject: [PATCH 21/59] client: Simplify round trip behavior The custom event queue was removed in 302d4ffb8549214eb4028dc3e47ec4ee4e12ffbd (2015) so the comment about not @@ -22,7 +22,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index ebcdbd22..d371ffec 100644 +index c38f6f82..b8da02b3 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -615,50 +615,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec() @@ -78,5 +78,5 @@ index ebcdbd22..d371ffec 100644 bool QWaylandDisplay::supportsWindowDecoration() const -- -2.40.1 +2.41.0 diff --git a/0022-Client-Fix-opaque-region-setter.patch b/0022-Client-Fix-opaque-region-setter.patch index 3df87c8..ac24556 100644 --- a/0022-Client-Fix-opaque-region-setter.patch +++ b/0022-Client-Fix-opaque-region-setter.patch @@ -1,7 +1,7 @@ -From 0cf12729a90380d3ef11efebfbfa9458c397d592 Mon Sep 17 00:00:00 2001 +From a65677be1d27d82cb4dbc2539731c59e87750d34 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Sat, 19 Feb 2022 17:01:04 +0200 -Subject: [PATCH 22/51] Client: Fix opaque region setter +Subject: [PATCH 22/59] Client: Fix opaque region setter The rect is in the global coordinate system, while the opaque region must be in the surface local coordinate system. @@ -14,7 +14,7 @@ Reviewed-by: Aleix Pol Gonzalez 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index de5af1bd..69319228 100644 +index afc9c137..2704e938 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -372,7 +372,7 @@ void QWaylandWindow::setGeometry(const QRect &rect) @@ -27,5 +27,5 @@ index de5af1bd..69319228 100644 void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset) -- -2.40.1 +2.41.0 diff --git a/0023-Use-proper-dependencies-in-compile-tests.patch b/0023-Use-proper-dependencies-in-compile-tests.patch index 9731af4..cb8261e 100644 --- a/0023-Use-proper-dependencies-in-compile-tests.patch +++ b/0023-Use-proper-dependencies-in-compile-tests.patch @@ -1,7 +1,7 @@ -From 1ab149c13af4806ef950487e2d9db8a937645791 Mon Sep 17 00:00:00 2001 +From 74b040b6ab20bdad4e251db621e397e0dbbc8efc Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Fri, 4 Feb 2022 11:07:36 +0100 -Subject: [PATCH 23/51] Use proper dependencies in compile tests +Subject: [PATCH 23/59] Use proper dependencies in compile tests Use the dependencies as found by the "libraries" section instead of relying on them being available in the default location (e.g. "-ldrm"). @@ -122,5 +122,5 @@ index bcfd5215..da95d07b 100644 }, -- -2.40.1 +2.41.0 diff --git a/0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch b/0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch index 138d55a..bfba914 100644 --- a/0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch +++ b/0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch @@ -1,7 +1,7 @@ -From 16d52e9ad900a25a02ff4eae43cc7d7e43dbad8a Mon Sep 17 00:00:00 2001 +From 1e7ae6005c5bacc1b25648c1a920354547b77e23 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 15 Mar 2022 15:59:15 +0100 -Subject: [PATCH 24/51] Revert "Client: Remove mWaitingForUpdateDelivery" +Subject: [PATCH 24/59] Revert "Client: Remove mWaitingForUpdateDelivery" The reverted commit introduces a severe performance regression when a client window is resized while a QtQuick renderthread @@ -18,7 +18,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 69319228..a87e11aa 100644 +index 2704e938..ff3690be 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -658,11 +658,17 @@ void QWaylandWindow::handleFrameCallback() @@ -55,5 +55,5 @@ index cf7ce879..54ac67a9 100644 QElapsedTimer mFrameCallbackElapsedTimer; struct ::wl_callback *mFrameCallback = nullptr; -- -2.40.1 +2.41.0 diff --git a/0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch b/0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch index 1bbf66c..9545bf7 100644 --- a/0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch +++ b/0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch @@ -1,7 +1,7 @@ -From 2a7884f0d51d4da20e675640b8d987004c9d77c5 Mon Sep 17 00:00:00 2001 +From 6c1ce5358f5c2bc06d796300c221f5b78628269b Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 15 Mar 2022 16:53:04 +0100 -Subject: [PATCH 25/51] Fix race condition on mWaitingForUpdateDelivery +Subject: [PATCH 25/59] Fix race condition on mWaitingForUpdateDelivery Change-Id: I0e91bda73722468b9339fc434fe04420b5e7d3da Reviewed-by: David Edmundson @@ -11,7 +11,7 @@ Reviewed-by: David Edmundson 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index a87e11aa..264ca59b 100644 +index ff3690be..77f82b37 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -652,24 +652,21 @@ void QWaylandWindow::handleFrameCallback() @@ -55,5 +55,5 @@ index 54ac67a9..c0a76345 100644 QElapsedTimer mFrameCallbackElapsedTimer; struct ::wl_callback *mFrameCallback = nullptr; -- -2.40.1 +2.41.0 diff --git a/0026-use-poll-2-when-reading-from-clipboard.patch b/0026-use-poll-2-when-reading-from-clipboard.patch index 18c17d8..9715e44 100644 --- a/0026-use-poll-2-when-reading-from-clipboard.patch +++ b/0026-use-poll-2-when-reading-from-clipboard.patch @@ -1,7 +1,7 @@ -From ddfa956f6c39c53249116b979f679b255ed4a596 Mon Sep 17 00:00:00 2001 +From 1b236eb0325235597e8dda0af22c775b207b3fe9 Mon Sep 17 00:00:00 2001 From: Kenneth Topp Date: Mon, 4 Apr 2022 09:36:21 -0400 -Subject: [PATCH 26/51] use poll(2) when reading from clipboard +Subject: [PATCH 26/59] use poll(2) when reading from clipboard change clipboard read away from select(2) call which can fail when an application has large number of open files @@ -44,5 +44,5 @@ index c9e158cc..fe0ea8c9 100644 } else if (ready == 0) { qWarning("QWaylandDataOffer: timeout reading from pipe"); -- -2.40.1 +2.41.0 diff --git a/0027-Reduce-memory-leakage.patch b/0027-Reduce-memory-leakage.patch index a475bec..8dd5089 100644 --- a/0027-Reduce-memory-leakage.patch +++ b/0027-Reduce-memory-leakage.patch @@ -1,7 +1,7 @@ -From b981fc82eb37700353949c72d3fd6d0887c8c107 Mon Sep 17 00:00:00 2001 +From a6fefb960c7f78db7985c4ac159aabe194ac57cd Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 22 Feb 2022 12:31:08 +0100 -Subject: [PATCH 27/51] Reduce memory leakage +Subject: [PATCH 27/59] Reduce memory leakage We need to clean up the event queue when we're done. @@ -13,7 +13,7 @@ Reviewed-by: David Edmundson 1 file changed, 3 insertions(+) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index d371ffec..1b9ec699 100644 +index b8da02b3..4a331a4c 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -381,6 +381,9 @@ QWaylandDisplay::~QWaylandDisplay(void) @@ -27,5 +27,5 @@ index d371ffec..1b9ec699 100644 // Steps which is called just after constructor. This separates registry_global() out of the constructor -- -2.40.1 +2.41.0 diff --git a/0028-Fix-build-with-libcxx-missing-array-include.patch b/0028-Fix-build-with-libcxx-missing-array-include.patch deleted file mode 100644 index caa8aee..0000000 --- a/0028-Fix-build-with-libcxx-missing-array-include.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 91afb601e33f492393f7b27a84aa281b55d26de2 Mon Sep 17 00:00:00 2001 -From: Sam James -Date: Sat, 18 Jun 2022 17:11:11 +0100 -Subject: [PATCH 28/51] Fix build with libcxx (missing array include) - -Bug: https://bugs.gentoo.org/833488 - -Task-number: QTBUG-104435 -Change-Id: I06384761a5560b81b675e6c4ae498bb93dcb4f4f -Pick-to: 5.15 6.2 6.3 6.4 -Reviewed-by: Marc Mutz -(cherry picked from commit 5065013b0c2346b5918a2681ae2e58046140e8a7) ---- - .../compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h b/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h -index 56a710c3..c6a8b6c6 100644 ---- a/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h -+++ b/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h -@@ -41,6 +41,8 @@ - #include - #include - -+#include -+ - #include - #include - --- -2.40.1 - diff --git a/0029-Only-close-popup-in-the-the-hierchary.patch b/0028-Only-close-popup-in-the-the-hierchary.patch similarity index 98% rename from 0029-Only-close-popup-in-the-the-hierchary.patch rename to 0028-Only-close-popup-in-the-the-hierchary.patch index 9bfd3fd..f257806 100644 --- a/0029-Only-close-popup-in-the-the-hierchary.patch +++ b/0028-Only-close-popup-in-the-the-hierchary.patch @@ -1,7 +1,7 @@ -From 76a2b1919f04152e77740b2d1601df893b8d79ba Mon Sep 17 00:00:00 2001 +From b308ffb47e635b407a1387ec369e5b3af8554122 Mon Sep 17 00:00:00 2001 From: Weng Xuetian Date: Wed, 20 Jul 2022 15:57:40 -0700 -Subject: [PATCH 29/51] Only close popup in the the hierchary +Subject: [PATCH 28/59] Only close popup in the the hierchary Imagine following event sequences: 1. a tooltip is shown. activePopups = {tooltip} @@ -31,7 +31,7 @@ Reviewed-by: David Edmundson 9 files changed, 136 insertions(+), 30 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 264ca59b..9e82c174 100644 +index 77f82b37..096859e8 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -239,6 +239,7 @@ bool QWaylandWindow::shouldCreateSubSurface() const @@ -81,7 +81,7 @@ index 264ca59b..9e82c174 100644 reset(); } } -@@ -1297,6 +1280,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea) +@@ -1301,6 +1284,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea) wl_region_destroy(region); } @@ -209,7 +209,7 @@ index 8c371661..151c78e3 100644 auto *shell = m_xdgSurface->m_shell; Q_ASSERT(shell->m_topmostGrabbingPopup == this); diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp -index 9a362b74..ead99989 100644 +index 888bab77..774c86f8 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -195,12 +195,17 @@ QtWayland::xdg_toplevel::resize_edge QWaylandXdgSurface::Toplevel::convertToResi @@ -397,5 +397,5 @@ index 73d1eb9c..747875b4 100644 void tst_xdgshell::switchPopups() { -- -2.40.1 +2.41.0 diff --git a/0030-Check-pointer-for-null-before-use-in-ASSERT.patch b/0029-Check-pointer-for-null-before-use-in-ASSERT.patch similarity index 84% rename from 0030-Check-pointer-for-null-before-use-in-ASSERT.patch rename to 0029-Check-pointer-for-null-before-use-in-ASSERT.patch index f376934..78d904a 100644 --- a/0030-Check-pointer-for-null-before-use-in-ASSERT.patch +++ b/0029-Check-pointer-for-null-before-use-in-ASSERT.patch @@ -1,7 +1,7 @@ -From b14eb8fdac3bfa2763a83541a3e4764c0eac153e Mon Sep 17 00:00:00 2001 +From 7afa1f5d74b0a99c3dcfb4a3be68eee4fa28d7f6 Mon Sep 17 00:00:00 2001 From: Roman Genkhel Date: Thu, 12 Nov 2020 12:21:51 +0300 -Subject: [PATCH 30/51] Check pointer for null before use in ASSERT +Subject: [PATCH 29/59] Check pointer for null before use in ASSERT Task-number: QTBUG-85195 Change-Id: I331e54f6e58aa9d536351a55223610c60b3cb414 @@ -12,7 +12,7 @@ Reviewed-by: David Edmundson 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 9e82c174..0a5fc15b 100644 +index 096859e8..6d49fdfd 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -536,12 +536,12 @@ void QWaylandWindow::sendRecursiveExposeEvent() @@ -30,5 +30,5 @@ index 9e82c174..0a5fc15b 100644 buffer->setBusy(); -- -2.40.1 +2.41.0 diff --git a/0031-Use-wl_surface.damage_buffer-on-the-client-side.patch b/0030-Use-wl_surface.damage_buffer-on-the-client-side.patch similarity index 96% rename from 0031-Use-wl_surface.damage_buffer-on-the-client-side.patch rename to 0030-Use-wl_surface.damage_buffer-on-the-client-side.patch index fa44dcb..562d9c0 100644 --- a/0031-Use-wl_surface.damage_buffer-on-the-client-side.patch +++ b/0030-Use-wl_surface.damage_buffer-on-the-client-side.patch @@ -1,7 +1,7 @@ -From 7daab1d4a36463f0904fdde539894609f8b367c1 Mon Sep 17 00:00:00 2001 +From 892892aca2465d3903ea51120e46b40f0924b00d Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 6 Jul 2020 14:37:35 +0200 -Subject: [PATCH 31/51] Use wl_surface.damage_buffer on the client side +Subject: [PATCH 30/59] Use wl_surface.damage_buffer on the client side Prefer the newer, recommended damage_buffer when the compositor supports it. @@ -20,7 +20,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 1b9ec699..6898a881 100644 +index 4a331a4c..f23c459d 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -493,7 +493,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin @@ -33,7 +33,7 @@ index 1b9ec699..6898a881 100644 } else if (interface == QStringLiteral("wl_shm")) { mShm.reset(new QWaylandShm(this, version, id)); diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 0a5fc15b..5b7f9df9 100644 +index 6d49fdfd..4e5ca97c 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -563,7 +563,11 @@ void QWaylandWindow::damage(const QRect &rect) @@ -127,5 +127,5 @@ index 949dc23d..d176837e 100644 uint32_t callback) override; void surface_commit(Resource *resource) override; -- -2.40.1 +2.41.0 diff --git a/0032-Client-clear-focus-on-touch-cancel.patch b/0031-Client-clear-focus-on-touch-cancel.patch similarity index 96% rename from 0032-Client-clear-focus-on-touch-cancel.patch rename to 0031-Client-clear-focus-on-touch-cancel.patch index d18bc69..7e136d0 100644 --- a/0032-Client-clear-focus-on-touch-cancel.patch +++ b/0031-Client-clear-focus-on-touch-cancel.patch @@ -1,7 +1,7 @@ -From 152984fa2347a2f02568ac6cd9baba5bd8e4d56d Mon Sep 17 00:00:00 2001 +From aa577f8dc28d606dab2cf5aea57ac33477cd4294 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Fri, 5 Aug 2022 15:00:31 +0100 -Subject: [PATCH 32/51] Client: clear focus on touch cancel +Subject: [PATCH 31/59] Client: clear focus on touch cancel When we get a touch_cancel event all touches should be treated as lifted. @@ -23,7 +23,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 4 files changed, 39 insertions(+) diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp -index 5d704795..5b880984 100644 +index e1111124..4d58e9ab 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp @@ -1392,6 +1392,7 @@ void QWaylandInputDevice::Touch::touch_cancel() @@ -112,5 +112,5 @@ index 296dbf47..210d8ddb 100644 Seat *m_seat = nullptr; }; -- -2.40.1 +2.41.0 diff --git a/0033-Guard-mResizeDirty-by-the-correctMutex.patch b/0032-Guard-mResizeDirty-by-the-correctMutex.patch similarity index 88% rename from 0033-Guard-mResizeDirty-by-the-correctMutex.patch rename to 0032-Guard-mResizeDirty-by-the-correctMutex.patch index 24b7845..d8a4c35 100644 --- a/0033-Guard-mResizeDirty-by-the-correctMutex.patch +++ b/0032-Guard-mResizeDirty-by-the-correctMutex.patch @@ -1,7 +1,7 @@ -From 11824dcf4164898a48b0629a072370a195dcc8f1 Mon Sep 17 00:00:00 2001 +From ad92da9b721ee6faad78a5fcbbe05904455b27ab Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Thu, 3 Feb 2022 19:42:33 +0000 -Subject: [PATCH 33/51] Guard mResizeDirty by the correctMutex +Subject: [PATCH 32/59] Guard mResizeDirty by the correctMutex mResizeDirty is used in the GUI thread in setCanResize which can be called from the GUI thread. It is queried and set whilst the resizeLock @@ -15,7 +15,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 5b7f9df9..117e3383 100644 +index 4e5ca97c..f8c71d9c 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -358,11 +358,12 @@ void QWaylandWindow::setGeometry(const QRect &rect) @@ -35,5 +35,5 @@ index 5b7f9df9..117e3383 100644 } QRect exposeGeometry(QPoint(), geometry().size()); -- -2.40.1 +2.41.0 diff --git a/0034-Fix-compile-tests.patch b/0033-Fix-compile-tests.patch similarity index 90% rename from 0034-Fix-compile-tests.patch rename to 0033-Fix-compile-tests.patch index a0cadf0..a404750 100644 --- a/0034-Fix-compile-tests.patch +++ b/0033-Fix-compile-tests.patch @@ -1,7 +1,7 @@ -From 8e2f1b74e780b998ab682d9abbd53feeceaa819e Mon Sep 17 00:00:00 2001 +From 1c9db5444951c613ad4866b282ddeb6de5820e7d Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Fri, 9 Sep 2022 15:37:49 +0200 -Subject: [PATCH 34/51] Fix compile tests +Subject: [PATCH 33/59] Fix compile tests Broken in c618467da4c06528537026e2b78f92265bce446f --- @@ -25,5 +25,5 @@ index b063e0d9..2ea382f1 100644 { auto e = window.m_events.takeFirst(); -- -2.40.1 +2.41.0 diff --git a/0037-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch b/0034-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch similarity index 88% rename from 0037-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch rename to 0034-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch index e952a22..654fb16 100644 --- a/0037-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch +++ b/0034-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch @@ -1,7 +1,7 @@ -From 3f0371cb22e117020e57255858e02f9237210a3b Mon Sep 17 00:00:00 2001 +From c31476115b3f2f34ffef4ce139640d0619fd274d Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Sun, 18 Sep 2022 18:17:18 +0800 -Subject: [PATCH 37/51] Call `finishDrag()` in +Subject: [PATCH 34/59] Call `finishDrag()` in `QWaylandDataDevice::dragSourceCancelled()` Drags can either get finished or cancelled. If a drag is finished @@ -22,7 +22,7 @@ BUG: 446111 1 file changed, 1 insertion(+) diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp -index fbb5aa91..e3e60ed5 100644 +index d154c695..9b3c18ac 100644 --- a/src/client/qwaylanddatadevice.cpp +++ b/src/client/qwaylanddatadevice.cpp @@ -296,6 +296,7 @@ void QWaylandDataDevice::selectionSourceCancelled() @@ -34,5 +34,5 @@ index fbb5aa91..e3e60ed5 100644 } -- -2.40.1 +2.41.0 diff --git a/0038-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch b/0035-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch similarity index 95% rename from 0038-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch rename to 0035-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch index aa5057b..7f55a44 100644 --- a/0038-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch +++ b/0035-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch @@ -1,7 +1,7 @@ -From 20bef824f4b78598fbffa5ada8271e22b658f635 Mon Sep 17 00:00:00 2001 +From de7fbc797929fee6604ed404aefc6ed452beeda1 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 12 Sep 2022 13:28:08 +0100 -Subject: [PATCH 38/51] Hold surface read lock throughout +Subject: [PATCH 35/59] Hold surface read lock throughout QWaylandEglWindow::updateSurface QWaylandEGLWindow::updateSurface is called from both the main and render @@ -50,7 +50,7 @@ index 2be87bc0..ea3d1995 100644 }; diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp -index 13dd747a..872a6237 100644 +index 64f7caeb..dbe2845a 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp @@ -40,6 +40,7 @@ @@ -81,5 +81,5 @@ index 13dd747a..872a6237 100644 } -- -2.40.1 +2.41.0 diff --git a/0035-Use-CRLF-line-delimiter-for-text-uri-list-data.patch b/0035-Use-CRLF-line-delimiter-for-text-uri-list-data.patch deleted file mode 100644 index 67ebc1e..0000000 --- a/0035-Use-CRLF-line-delimiter-for-text-uri-list-data.patch +++ /dev/null @@ -1,40 +0,0 @@ -From a7c3f946175a78df45b1eb3301cf16a05a542d58 Mon Sep 17 00:00:00 2001 -From: Alexandros Frantzis -Date: Wed, 11 May 2022 17:12:52 +0300 -Subject: [PATCH 35/51] Use CRLF line delimiter for text/uri-list data - -According to RFC 2483, which describes text/uri-list, the line delimiter -must be CRLF (instead of the currently used LF). Some applications -strictly expect the CRLF delimiter and fail to properly parse the -uri-list otherwise (e.g., WineX11/XWayland). - -https://datatracker.ietf.org/doc/html/rfc2483 - -5. The text/uri-list Internet Media Type -The format of text/uri-list resources is: -3) As for all text/* formats, lines are terminated with a CRLF pair. - -Pick-to: 6.4 6.3 6.2 5.15 -Change-Id: I7c062224a9060028ab6293fdf172692ade28cca5 -Reviewed-by: David Edmundson -(cherry picked from commit bd5b0a804b91b9fbd0ce44d5d6765e07d0a50b4f) ---- - src/shared/qwaylandmimehelper.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/qwaylandmimehelper.cpp b/src/shared/qwaylandmimehelper.cpp -index 051a91dc..e2fe1928 100644 ---- a/src/shared/qwaylandmimehelper.cpp -+++ b/src/shared/qwaylandmimehelper.cpp -@@ -74,7 +74,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString & - QList urls = mimeData->urls(); - for (int i = 0; i < urls.count(); ++i) { - content.append(urls.at(i).toEncoded()); -- content.append('\n'); -+ content.append("\r\n"); - } - } else { - content = mimeData->data(mimeType); --- -2.40.1 - diff --git a/0036-Avoid-calling-requestUpdate-from-wrong-thread.patch b/0036-Avoid-calling-requestUpdate-from-wrong-thread.patch deleted file mode 100644 index d52f856..0000000 --- a/0036-Avoid-calling-requestUpdate-from-wrong-thread.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 36522a8ed9f43cd49100e06040711de9c2c0c163 Mon Sep 17 00:00:00 2001 -From: Eskil Abrahamsen Blomfeldt -Date: Mon, 8 Aug 2022 12:14:01 +0200 -Subject: [PATCH 36/51] Avoid calling requestUpdate from wrong thread - -In certain circumstances, we can get to createDecoration() -from the render thread (from QWaylandGLContext::makeCurrent) - -Calling requestUpdate() from this secondary thread would -cause an assert, so we queue the call on the appropriate -thread instead. - -This amends af7b60ade5c4be81cbc58eb18307c017d5594071. - -Pick-to: 5.15 6.2 6.3 6.3.2 6.4 -Fixes: QTBUG-105308 -Change-Id: I4805265f39e24eb1464897532be2025bc3c27728 -Reviewed-by: Inho Lee -(cherry picked from commit a0c0b5b42335808c2222cbf72c1758e955731ed9) ---- - src/client/qwaylandwindow.cpp | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 117e3383..4ddf9fbe 100644 ---- a/src/client/qwaylandwindow.cpp -+++ b/src/client/qwaylandwindow.cpp -@@ -873,7 +873,11 @@ bool QWaylandWindow::createDecoration() - // size and are not redrawn, leaving the new buffer empty. As a simple - // work-around, we trigger a full extra update whenever the client-side - // window decorations are toggled while the window is showing. -- window()->requestUpdate(); -+ // Note: createDecoration() is sometimes called from the render thread -+ // of Qt Quick. This is essentially wrong and could potentially cause problems, -+ // but until the underlying issue has been fixed, we have to use invokeMethod() -+ // here to avoid asserts. -+ QMetaObject::invokeMethod(window(), &QWindow::requestUpdate); - } - - return mWindowDecoration; --- -2.40.1 - diff --git a/0039-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch b/0036-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch similarity index 95% rename from 0039-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch rename to 0036-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch index 175c448..392957f 100644 --- a/0039-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch +++ b/0036-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch @@ -1,7 +1,7 @@ -From 6481efa9a8fe88043d931648d72dceeeb91af64d Mon Sep 17 00:00:00 2001 +From dbde248fea508102f656c863c23c09e544f3fd82 Mon Sep 17 00:00:00 2001 From: David Redondo Date: Wed, 8 Jun 2022 11:25:59 +0200 -Subject: [PATCH 39/51] Keep toplevel windows in the top left corner of the +Subject: [PATCH 36/59] Keep toplevel windows in the top left corner of the screen We can't know the actual position of a window on the screen. This causes @@ -39,7 +39,7 @@ index fbf00c6b..54861600 100644 QWaylandIntegration::~QWaylandIntegration() diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 4ddf9fbe..f322a8d6 100644 +index f8c71d9c..7c7e49ac 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -350,8 +350,13 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect) @@ -86,5 +86,5 @@ index ea3d1995..487a91a6 100644 virtual void ensureSize(); WId winId() const override; -- -2.40.1 +2.41.0 diff --git a/0040-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch b/0037-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch similarity index 92% rename from 0040-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch rename to 0037-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch index e90b99e..f7a013d 100644 --- a/0040-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch +++ b/0037-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch @@ -1,7 +1,7 @@ -From 3b29b796f98721cb52c89a56e28ff8f9b830ebc5 Mon Sep 17 00:00:00 2001 +From e79050b5c2ebbb34a9a6c76739b5b824b4819a35 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Thu, 17 Nov 2022 15:25:37 +0200 -Subject: [PATCH 40/51] Client: Add F_SEAL_SHRINK seal to shm backing file +Subject: [PATCH 37/59] Client: Add F_SEAL_SHRINK seal to shm backing file This lets libwayland-server avoid installing a SIGBUS handler when it wants to mmap() the backing file and access the contents of shared @@ -49,5 +49,5 @@ index dc7ff670..98acd42d 100644 QScopedPointer filePointer; -- -2.40.1 +2.41.0 diff --git a/0041-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch b/0038-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch similarity index 87% rename from 0041-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch rename to 0038-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch index 5e7f551..6b2afe5 100644 --- a/0041-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch +++ b/0038-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch @@ -1,7 +1,7 @@ -From 36a9d60c3ed05e2ec8faf7e81946becfaeb2f1d5 Mon Sep 17 00:00:00 2001 +From 50803a2025bad39adb6e0ac969bba60929d593d4 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Mon, 21 Nov 2022 18:39:40 +0200 -Subject: [PATCH 41/51] Client: Call wl_output_release() upon QWaylandScreen +Subject: [PATCH 38/59] Client: Call wl_output_release() upon QWaylandScreen destruction It ensures that the proxy gets destroyed. @@ -27,5 +27,5 @@ index 7c2d9be3..64ae4fe7 100644 uint QWaylandScreen::requiredEvents() const -- -2.40.1 +2.41.0 diff --git a/0042-Client-Bump-wl_output-version.patch b/0039-Client-Bump-wl_output-version.patch similarity index 89% rename from 0042-Client-Bump-wl_output-version.patch rename to 0039-Client-Bump-wl_output-version.patch index ee77b14..9d3ca5d 100644 --- a/0042-Client-Bump-wl_output-version.patch +++ b/0039-Client-Bump-wl_output-version.patch @@ -1,7 +1,7 @@ -From 4293409e97c6ecfaec49b87818f9b439010187c9 Mon Sep 17 00:00:00 2001 +From 5a0e6102fa153daa0e50859f66654e48033bc0fe Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 22 Nov 2022 12:33:41 +0200 -Subject: [PATCH 42/51] Client: Bump wl_output version +Subject: [PATCH 39/59] Client: Bump wl_output version wl_output_release is available starting with wl_output v3. @@ -26,5 +26,5 @@ index 64ae4fe7..5537dafd 100644 , mWaylandDisplay(waylandDisplay) , mOutputName(QStringLiteral("Screen%1").arg(id)) -- -2.40.1 +2.41.0 diff --git a/0043-Fix-frame-sync-related-to-unprotected-multithread-ac.patch b/0040-Fix-frame-sync-related-to-unprotected-multithread-ac.patch similarity index 97% rename from 0043-Fix-frame-sync-related-to-unprotected-multithread-ac.patch rename to 0040-Fix-frame-sync-related-to-unprotected-multithread-ac.patch index 6de6c7a..895c867 100644 --- a/0043-Fix-frame-sync-related-to-unprotected-multithread-ac.patch +++ b/0040-Fix-frame-sync-related-to-unprotected-multithread-ac.patch @@ -1,7 +1,7 @@ -From 7c43759079528c33c30c4a823de7fb2dff6acd27 Mon Sep 17 00:00:00 2001 +From b55964ec30a055ac199e4d6b463afd67b651381c Mon Sep 17 00:00:00 2001 From: Weng Xuetian Date: Sun, 27 Nov 2022 12:44:40 -0800 -Subject: [PATCH 43/51] Fix frame sync related to unprotected multithread +Subject: [PATCH 40/59] Fix frame sync related to unprotected multithread access There is a few crashes happens in real life that frame callback is @@ -21,7 +21,7 @@ Change-Id: Ie01d08d07a2f10f70606ed1935caac09cb4f0382 2 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index f322a8d6..6337db00 100644 +index 7c7e49ac..2e445340 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -252,13 +252,16 @@ void QWaylandWindow::reset() @@ -162,5 +162,5 @@ index 487a91a6..2f219d8c 100644 static QWaylandWindow *mMouseGrab; -- -2.40.1 +2.41.0 diff --git a/0044-Client-Handle-zwp_primary_selection_device_manager_v.patch b/0041-Client-Handle-zwp_primary_selection_device_manager_v.patch similarity index 93% rename from 0044-Client-Handle-zwp_primary_selection_device_manager_v.patch rename to 0041-Client-Handle-zwp_primary_selection_device_manager_v.patch index 3dfe945..df8fb15 100644 --- a/0044-Client-Handle-zwp_primary_selection_device_manager_v.patch +++ b/0041-Client-Handle-zwp_primary_selection_device_manager_v.patch @@ -1,7 +1,7 @@ -From 817655fa798fc2d640b4db006df229c335e02c3b Mon Sep 17 00:00:00 2001 +From a2808e43ff20ab164dfcc9a570da8c28bcfe8334 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 27 Sep 2022 22:05:07 +0300 -Subject: [PATCH 44/51] Client: Handle zwp_primary_selection_device_manager_v1 +Subject: [PATCH 41/59] Client: Handle zwp_primary_selection_device_manager_v1 global removal The zwp_primary_selection_device_manager_v1 global can be withdrawn if @@ -19,7 +19,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 6898a881..27f55965 100644 +index f23c459d..cc321497 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp @@ -519,6 +519,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin @@ -46,7 +46,7 @@ index 6898a881..27f55965 100644 break; } diff --git a/src/client/qwaylandprimaryselectionv1.cpp b/src/client/qwaylandprimaryselectionv1.cpp -index 832f9678..ea508771 100644 +index 78b1de13..cf3b4b22 100644 --- a/src/client/qwaylandprimaryselectionv1.cpp +++ b/src/client/qwaylandprimaryselectionv1.cpp @@ -54,11 +54,6 @@ QWaylandPrimarySelectionDeviceManagerV1::QWaylandPrimarySelectionDeviceManagerV1 @@ -62,5 +62,5 @@ index 832f9678..ea508771 100644 QWaylandPrimarySelectionDeviceV1 *QWaylandPrimarySelectionDeviceManagerV1::createDevice(QWaylandInputDevice *seat) -- -2.40.1 +2.41.0 diff --git a/0045-Fixes-the-build-on-CentOS.patch b/0042-Fixes-the-build-on-CentOS.patch similarity index 87% rename from 0045-Fixes-the-build-on-CentOS.patch rename to 0042-Fixes-the-build-on-CentOS.patch index d541938..1d3205e 100644 --- a/0045-Fixes-the-build-on-CentOS.patch +++ b/0042-Fixes-the-build-on-CentOS.patch @@ -1,7 +1,7 @@ -From 9e03f149e70896d92b51d9c25af681ddc2b5acfb Mon Sep 17 00:00:00 2001 +From fa2a6997d29efea85323237cd3ca8555d091f2d8 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Mon, 19 Dec 2022 15:31:03 +0100 -Subject: [PATCH 45/51] Fixes the build on CentOS +Subject: [PATCH 42/59] Fixes the build on CentOS Change-Id: I3c21972e7681be99b0f45c3ea3a57be285e4ff8e --- @@ -22,5 +22,5 @@ index 98acd42d..41cffdf7 100644 if (fd >= 0) fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL); -- -2.40.1 +2.41.0 diff --git a/0046-client-Avoid-protocol-error-with-invalid-min-max-siz.patch b/0043-client-Avoid-protocol-error-with-invalid-min-max-siz.patch similarity index 93% rename from 0046-client-Avoid-protocol-error-with-invalid-min-max-siz.patch rename to 0043-client-Avoid-protocol-error-with-invalid-min-max-siz.patch index 37c933b..f295d69 100644 --- a/0046-client-Avoid-protocol-error-with-invalid-min-max-siz.patch +++ b/0043-client-Avoid-protocol-error-with-invalid-min-max-siz.patch @@ -1,7 +1,7 @@ -From 5028633b140c013b14a487889eeef992233d4edf Mon Sep 17 00:00:00 2001 +From 4a6222595cc45d57471d5f89959ec2963877fb47 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 23 May 2022 09:47:24 +0200 -Subject: [PATCH 46/51] client: Avoid protocol error with invalid min/max size +Subject: [PATCH 43/59] client: Avoid protocol error with invalid min/max size If the application sets an invalid minimum and maximum size (where the minimum is higher than the maximum), then we @@ -35,7 +35,7 @@ Reviewed-by: David Edmundson 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp -index ead99989..ad666129 100644 +index 774c86f8..696eaf77 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -384,10 +384,10 @@ void QWaylandXdgSurface::setSizeHints() @@ -52,5 +52,5 @@ index ead99989..ad666129 100644 maxHeight = 0; m_toplevel->set_max_size(maxWidth, maxHeight); -- -2.40.1 +2.41.0 diff --git a/0047-Client-Fix-handling-of-Qt-BlankCursor.patch b/0044-Client-Fix-handling-of-Qt-BlankCursor.patch similarity index 87% rename from 0047-Client-Fix-handling-of-Qt-BlankCursor.patch rename to 0044-Client-Fix-handling-of-Qt-BlankCursor.patch index 94ac584..1817ecd 100644 --- a/0047-Client-Fix-handling-of-Qt-BlankCursor.patch +++ b/0044-Client-Fix-handling-of-Qt-BlankCursor.patch @@ -1,7 +1,7 @@ -From aeb7bf67a99fecf5f4e49ba7c49edf9c8b9db2b6 Mon Sep 17 00:00:00 2001 +From 4b4bfbb61b7f232061e0b8e0d4be6487596a3521 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 22 Nov 2022 23:27:34 +0200 -Subject: [PATCH 47/51] Client: Fix handling of Qt::BlankCursor +Subject: [PATCH 44/59] Client: Fix handling of Qt::BlankCursor The cursor may not be properly set when a window has Qt::BlankCursor and it's shown. In that case, the cursor surface may not be present and @@ -20,7 +20,7 @@ Reviewed-by: Qt CI Bot 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp -index 5b880984..9a0fe49d 100644 +index 4d58e9ab..132c5345 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp @@ -310,8 +310,7 @@ void QWaylandInputDevice::Pointer::updateCursor() @@ -34,5 +34,5 @@ index 5b880984..9a0fe49d 100644 } -- -2.40.1 +2.41.0 diff --git a/0048-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch b/0045-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch similarity index 96% rename from 0048-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch rename to 0045-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch index d1f261b..27374b5 100644 --- a/0048-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch +++ b/0045-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch @@ -1,7 +1,7 @@ -From 2e4c35db38a55243bc2458dc87cc9ff6afb81586 Mon Sep 17 00:00:00 2001 +From 58664797ea7f63baf8e4a22e5ca2906363bf4539 Mon Sep 17 00:00:00 2001 From: Marco Martin Date: Fri, 24 Feb 2023 17:40:48 +0100 -Subject: [PATCH 48/51] client: Force a roundtrip when an XdgOutput is not +Subject: [PATCH 45/59] client: Force a roundtrip when an XdgOutput is not ready yet Is possible that the server sends a surface_enter before @@ -21,7 +21,7 @@ Reviewed-by: David Edmundson 4 files changed, 42 insertions(+) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 6337db00..3b700002 100644 +index 2e445340..9bf5b150 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -1042,6 +1042,8 @@ void QWaylandWindow::handleScreensChanged() @@ -113,5 +113,5 @@ index 80429608..68e8d77a 100644 QCOMPOSITOR_TEST_MAIN(tst_xdgoutput) #include "tst_xdgoutput.moc" -- -2.40.1 +2.41.0 diff --git a/0049-Client-Manage-QMimeData-lifecycle.patch b/0046-Client-Manage-QMimeData-lifecycle.patch similarity index 96% rename from 0049-Client-Manage-QMimeData-lifecycle.patch rename to 0046-Client-Manage-QMimeData-lifecycle.patch index 2ea7a27..ff7d2df 100644 --- a/0049-Client-Manage-QMimeData-lifecycle.patch +++ b/0046-Client-Manage-QMimeData-lifecycle.patch @@ -1,7 +1,7 @@ -From dd8640794264449cb978765029fc4713f3fb31b9 Mon Sep 17 00:00:00 2001 +From 091f3dad76007774e103ed8c81adcbf0eca89977 Mon Sep 17 00:00:00 2001 From: Tang Haixiang Date: Thu, 22 Dec 2022 15:19:53 +0800 -Subject: [PATCH 49/51] Client: Manage QMimeData lifecycle +Subject: [PATCH 46/59] Client: Manage QMimeData lifecycle QMimeData is created by user, it is not taken care of in qtwayland, which will cause memory leak. @@ -105,7 +105,7 @@ index ce14e124..bb52683d 100644 } diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp -index 5599cbd4..e085152c 100644 +index 9610366d..1a6b9835 100644 --- a/src/client/qwaylanddatasource.cpp +++ b/src/client/qwaylanddatasource.cpp @@ -71,11 +71,6 @@ QWaylandDataSource::~QWaylandDataSource() @@ -121,7 +121,7 @@ index 5599cbd4..e085152c 100644 { Q_EMIT cancelled(); diff --git a/src/client/qwaylanddatasource_p.h b/src/client/qwaylanddatasource_p.h -index 96f07bc3..14d1542d 100644 +index b6a9e06b..089c5485 100644 --- a/src/client/qwaylanddatasource_p.h +++ b/src/client/qwaylanddatasource_p.h @@ -74,8 +74,6 @@ public: @@ -134,5 +134,5 @@ index 96f07bc3..14d1542d 100644 void cancelled(); void finished(); -- -2.40.1 +2.41.0 diff --git a/0050-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch b/0047-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch similarity index 89% rename from 0050-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch rename to 0047-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch index 8e77c1e..3f28394 100644 --- a/0050-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch +++ b/0047-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch @@ -1,7 +1,7 @@ -From 346cebf39b90f7fe012f57e66d493634aba20f89 Mon Sep 17 00:00:00 2001 +From aae875167fb67df735f922677104f815463b9f1c Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Mon, 6 Mar 2023 01:11:45 +0100 -Subject: [PATCH 50/51] client: Do not cast placeholder screens to +Subject: [PATCH 47/59] client: Do not cast placeholder screens to QWaylandScreen It's wrong to C-cast an object to a class that isn't theirs. Check if it @@ -30,5 +30,5 @@ index bf54a1a0..9763c312 100644 return nullptr; -- -2.40.1 +2.41.0 diff --git a/0051-Client-Remove-flip-popup-constraints.patch b/0048-Client-Remove-flip-popup-constraints.patch similarity index 91% rename from 0051-Client-Remove-flip-popup-constraints.patch rename to 0048-Client-Remove-flip-popup-constraints.patch index 7a7f46b..75b4c0a 100644 --- a/0051-Client-Remove-flip-popup-constraints.patch +++ b/0048-Client-Remove-flip-popup-constraints.patch @@ -1,7 +1,7 @@ -From aabaa4efd1d284f07c3cb5b8a7d62a9143701bc4 Mon Sep 17 00:00:00 2001 +From 53ee577e86f88abbbdbba26c593d03d87994b757 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Thu, 12 Jan 2023 14:49:25 +0200 -Subject: [PATCH 51/51] Client: Remove flip popup constraints +Subject: [PATCH 48/59] Client: Remove flip popup constraints xdg_positioner doesn't have good anchor rect and other needed information so the compositor can properly flip popups. In some windows @@ -22,7 +22,7 @@ Reviewed-by: Liang Qi 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp -index ad666129..822b385c 100644 +index 696eaf77..2cc36510 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -425,9 +425,7 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) @@ -37,5 +37,5 @@ index ad666129..822b385c 100644 positioner->destroy(); -- -2.40.1 +2.41.0 diff --git a/0049-Destroy-frame-queue-before-display.patch b/0049-Destroy-frame-queue-before-display.patch new file mode 100644 index 0000000..2a396df --- /dev/null +++ b/0049-Destroy-frame-queue-before-display.patch @@ -0,0 +1,38 @@ +From c64fb8989dcde2a00381d8ff75e7cf63dfc94b90 Mon Sep 17 00:00:00 2001 +From: David Redondo +Date: Tue, 11 Apr 2023 14:27:27 +0200 +Subject: [PATCH 49/59] Destroy frame queue before display + +wl_event_queue_destroy accesses the display. +Found by running a test under valgrind. + +Pick-to: 6.5 +Change-Id: Ic89cbd3b6e98b4fc9561b0e63b5fab4886a1ec50 +Reviewed-by: David Edmundson +(cherry picked from commit a76bf824fcd1cc3789f0d3454a0423c0241d9718) +--- + src/client/qwaylanddisplay.cpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp +index cc321497..737b539d 100644 +--- a/src/client/qwaylanddisplay.cpp ++++ b/src/client/qwaylanddisplay.cpp +@@ -379,11 +379,12 @@ QWaylandDisplay::~QWaylandDisplay(void) + #if QT_CONFIG(cursor) + qDeleteAll(mCursorThemes); + #endif +- if (mDisplay) +- wl_display_disconnect(mDisplay); + + if (m_frameEventQueue) + wl_event_queue_destroy(m_frameEventQueue); ++ ++ if (mDisplay) ++ wl_display_disconnect(mDisplay); + } + + // Steps which is called just after constructor. This separates registry_global() out of the constructor +-- +2.41.0 + diff --git a/0050-client-Fix-crash-on-dnd-updates-after-client-facing-.patch b/0050-client-Fix-crash-on-dnd-updates-after-client-facing-.patch new file mode 100644 index 0000000..a37b504 --- /dev/null +++ b/0050-client-Fix-crash-on-dnd-updates-after-client-facing-.patch @@ -0,0 +1,42 @@ +From 2dabdd8227088d01a6d375e25226b1805769021d Mon Sep 17 00:00:00 2001 +From: David Edmundson +Date: Wed, 7 Jun 2023 22:12:15 +0100 +Subject: [PATCH 50/59] client: Fix crash on dnd updates after client facing + drag ends + +A platform drag and a application-facing drag have two different +lifespans. + +The platform drag lasts until all mimedata is transferred and the client +receiving the drops marks it as finished. + +The application facing QDrag lasts until the client deletes it. We can +get a crash if we get updates during this time. + +The drop event is guarded, but not the action negotiation. + +Pick-to: 6.6 +Change-Id: Ib9c047f04d65883105d4cd3f169637d0e038a63f +Reviewed-by: Eskil Abrahamsen Blomfeldt +(cherry picked from commit 22daca49b807fefba58113a06b86df4274e49f62) +--- + src/client/qwaylanddatadevice.cpp | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp +index 9b3c18ac..9c3308d5 100644 +--- a/src/client/qwaylanddatadevice.cpp ++++ b/src/client/qwaylanddatadevice.cpp +@@ -132,6 +132,9 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, Qt::DropActions supporte + connect(m_dragSource.data(), &QWaylandDataSource::cancelled, this, &QWaylandDataDevice::dragSourceCancelled); + connect(m_dragSource.data(), &QWaylandDataSource::dndResponseUpdated, this, [this](bool accepted, Qt::DropAction action) { + auto drag = static_cast(QGuiApplicationPrivate::platformIntegration()->drag()); ++ if (!drag->currentDrag()) { ++ return; ++ } + // in old versions drop action is not set, so we guess + if (wl_data_source_get_version(m_dragSource->object()) < 3) { + drag->setResponse(accepted); +-- +2.41.0 + diff --git a/0051-Convert-cursor-bitmap-to-supported-format.patch b/0051-Convert-cursor-bitmap-to-supported-format.patch new file mode 100644 index 0000000..494d336 --- /dev/null +++ b/0051-Convert-cursor-bitmap-to-supported-format.patch @@ -0,0 +1,66 @@ +From e14bd7626bf8dd24c8de325656371383a434e345 Mon Sep 17 00:00:00 2001 +From: Michael Weghorn +Date: Mon, 20 Feb 2023 14:02:23 +0100 +Subject: [PATCH 51/59] Convert cursor bitmap to supported format + +The 1-bit image formats QImage::Format_Mono and +QImage::Format_MonoLSB used by cursor bitmaps don't have +a corresponding wl_shm_format. + +Therefore, convert to a supported image format as necessary +to make such bitmap cursors work on Wayland as well. + +Fixes: QTBUG-95434 +Change-Id: I402fd870b301ddc01075251b66f2cf7cc1923133 +Reviewed-by: Eskil Abrahamsen Blomfeldt +(cherry picked from commit 45ec1362f8fcb5ade92f4d2d4985b1c24e78c8ba) + +Backport changes: Use Qt::ReturnByValue version for QCursor::mask() and QCursor::bitmap() +--- + src/client/qwaylandcursor.cpp | 23 ++++++++++++++++++++++- + 1 file changed, 22 insertions(+), 1 deletion(-) + +diff --git a/src/client/qwaylandcursor.cpp b/src/client/qwaylandcursor.cpp +index e4eca9d4..ba76ba2d 100644 +--- a/src/client/qwaylandcursor.cpp ++++ b/src/client/qwaylandcursor.cpp +@@ -44,6 +44,7 @@ + #include "qwaylandshmbackingstore_p.h" + + #include ++#include + #include + + #include +@@ -250,7 +251,27 @@ QWaylandCursor::QWaylandCursor(QWaylandDisplay *display) + QSharedPointer QWaylandCursor::cursorBitmapBuffer(QWaylandDisplay *display, const QCursor *cursor) + { + Q_ASSERT(cursor->shape() == Qt::BitmapCursor); +- const QImage &img = cursor->pixmap().toImage(); ++ ++ const QBitmap mask = cursor->mask(Qt::ReturnByValue); ++ QImage img; ++ if (cursor->pixmap().isNull()) ++ img = cursor->bitmap(Qt::ReturnByValue).toImage(); ++ else ++ img = cursor->pixmap().toImage(); ++ ++ // convert to supported format if necessary ++ if (!display->shm()->formatSupported(img.format())) { ++ if (mask.isNull()) { ++ img.convertTo(QImage::Format_RGB32); ++ } else { ++ // preserve mask ++ img.convertTo(QImage::Format_ARGB32); ++ QPixmap pixmap = QPixmap::fromImage(img); ++ pixmap.setMask(mask); ++ img = pixmap.toImage(); ++ } ++ } ++ + QSharedPointer buffer(new QWaylandShmBuffer(display, img.size(), img.format())); + memcpy(buffer->image()->bits(), img.bits(), size_t(img.sizeInBytes())); + return buffer; +-- +2.41.0 + diff --git a/0052-Replace-scale-with-devicePixelRatio-for-non-integer-.patch b/0052-Replace-scale-with-devicePixelRatio-for-non-integer-.patch new file mode 100644 index 0000000..3d4a6f2 --- /dev/null +++ b/0052-Replace-scale-with-devicePixelRatio-for-non-integer-.patch @@ -0,0 +1,169 @@ +From 53e02e2ccf64ce1459fd46a71c88d069d8d5e478 Mon Sep 17 00:00:00 2001 +From: Jungi Byun +Date: Wed, 27 Jan 2021 08:24:23 +0900 +Subject: [PATCH 52/59] Replace scale with devicePixelRatio for non-integer + scaling + +The 'scale' event from wayland cannot support non-integer scaling +which was originally supported in Qt. + +As default, devicePixelRatio follows the 'scale' so that the high DPI +still works as the mechanism in Wayland. But if non-integer scaling +factor such as 150% is needed, it can be supported to override the +devicePixelRatio. + +Change-Id: I63a04db27bd521264b6d0904e1ddd05a572dc970 +Reviewed-by: Elvis Lee +Reviewed-by: Jungi Byun +Reviewed-by: Eskil Abrahamsen Blomfeldt +(cherry picked from commit cf98abbc6ae9ba9373803ffe193f839324e0c80b) +--- + src/client/qwaylandabstractdecoration.cpp | 2 +- + src/client/qwaylandshmbackingstore.cpp | 6 +++--- + src/client/qwaylandshmbackingstore_p.h | 2 +- + src/client/qwaylandwindow.cpp | 16 ++++++++-------- + src/client/qwaylandwindow_p.h | 2 +- + .../client/wayland-egl/qwaylandglcontext.cpp | 2 +- + 6 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/src/client/qwaylandabstractdecoration.cpp b/src/client/qwaylandabstractdecoration.cpp +index b628930d..d15a7f9f 100644 +--- a/src/client/qwaylandabstractdecoration.cpp ++++ b/src/client/qwaylandabstractdecoration.cpp +@@ -122,7 +122,7 @@ const QImage &QWaylandAbstractDecoration::contentImage() + if (d->m_isDirty) { + // Update the decoration backingstore + +- const int bufferScale = waylandWindow()->scale(); ++ const qreal bufferScale = waylandWindow()->scale(); + const QSize imageSize = waylandWindow()->surfaceSize() * bufferScale; + d->m_decorationContentImage = QImage(imageSize, QImage::Format_ARGB32_Premultiplied); + // Only scale by buffer scale, not QT_SCALE_FACTOR etc. +diff --git a/src/client/qwaylandshmbackingstore.cpp b/src/client/qwaylandshmbackingstore.cpp +index 41cffdf7..90e37e95 100644 +--- a/src/client/qwaylandshmbackingstore.cpp ++++ b/src/client/qwaylandshmbackingstore.cpp +@@ -72,7 +72,7 @@ QT_BEGIN_NAMESPACE + namespace QtWaylandClient { + + QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display, +- const QSize &size, QImage::Format format, int scale) ++ const QSize &size, QImage::Format format, qreal scale) + { + int stride = size.width() * 4; + int alloc = stride * size.height(); +@@ -114,7 +114,7 @@ QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display, + QWaylandShm* shm = display->shm(); + wl_shm_format wl_format = shm->formatFrom(format); + mImage = QImage(data, size.width(), size.height(), stride, format); +- mImage.setDevicePixelRatio(qreal(scale)); ++ mImage.setDevicePixelRatio(scale); + + mShmPool = wl_shm_create_pool(shm->object(), fd, alloc); + init(wl_shm_pool_create_buffer(mShmPool,0, size.width(), size.height(), +@@ -277,7 +277,7 @@ QWaylandShmBuffer *QWaylandShmBackingStore::getBuffer(const QSize &size) + void QWaylandShmBackingStore::resize(const QSize &size) + { + QMargins margins = windowDecorationMargins(); +- int scale = waylandWindow()->scale(); ++ qreal scale = waylandWindow()->scale(); + QSize sizeWithMargins = (size + QSize(margins.left()+margins.right(),margins.top()+margins.bottom())) * scale; + + // We look for a free buffer to draw into. If the buffer is not the last buffer we used, +diff --git a/src/client/qwaylandshmbackingstore_p.h b/src/client/qwaylandshmbackingstore_p.h +index e01632da..f3fae438 100644 +--- a/src/client/qwaylandshmbackingstore_p.h ++++ b/src/client/qwaylandshmbackingstore_p.h +@@ -71,7 +71,7 @@ class QWaylandWindow; + class Q_WAYLAND_CLIENT_EXPORT QWaylandShmBuffer : public QWaylandBuffer { + public: + QWaylandShmBuffer(QWaylandDisplay *display, +- const QSize &size, QImage::Format format, int scale = 1); ++ const QSize &size, QImage::Format format, qreal scale = 1); + ~QWaylandShmBuffer() override; + QSize size() const override { return mImage.size(); } + int scale() const override { return int(mImage.devicePixelRatio()); } +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 9bf5b150..92eeba53 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -185,7 +185,7 @@ void QWaylandWindow::initWindow() + // typically be integer 1 (normal-dpi) or 2 (high-dpi). Call set_buffer_scale() + // to inform the compositor that high-resolution buffers will be provided. + if (mDisplay->compositorVersion() >= 3) +- mSurface->set_buffer_scale(scale()); ++ mSurface->set_buffer_scale(mScale); + + if (QScreen *s = window()->screen()) + setOrientationMask(s->orientationUpdateMask()); +@@ -572,9 +572,9 @@ void QWaylandWindow::damage(const QRect &rect) + if (mSurface == nullptr) + return; + +- const int s = scale(); ++ const qreal s = scale(); + if (mDisplay->compositorVersion() >= 4) +- mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height()); ++ mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height())); + else + mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); + } +@@ -613,9 +613,9 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage) + + attachOffset(buffer); + if (mDisplay->compositorVersion() >= 4) { +- const int s = scale(); ++ const qreal s = scale(); + for (const QRect &rect: damage) +- mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height()); ++ mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height())); + } else { + for (const QRect &rect: damage) + mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); +@@ -1103,14 +1103,14 @@ bool QWaylandWindow::isActive() const + return mDisplay->isWindowActivated(this); + } + +-int QWaylandWindow::scale() const ++qreal QWaylandWindow::scale() const + { +- return mScale; ++ return devicePixelRatio(); + } + + qreal QWaylandWindow::devicePixelRatio() const + { +- return mScale; ++ return qreal(mScale); + } + + bool QWaylandWindow::setMouseGrabEnabled(bool grab) +diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h +index 2f219d8c..741f9e5c 100644 +--- a/src/client/qwaylandwindow_p.h ++++ b/src/client/qwaylandwindow_p.h +@@ -158,7 +158,7 @@ public: + + void setMask(const QRegion ®ion) override; + +- int scale() const; ++ qreal scale() const; + qreal devicePixelRatio() const override; + + void requestActivateWindow() override; +diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp +index c1f45fa6..bbc63444 100644 +--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp ++++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp +@@ -195,7 +195,7 @@ public: + QOpenGLTextureCache *cache = QOpenGLTextureCache::cacheForContext(m_context->context()); + + QSize surfaceSize = window->surfaceSize(); +- int scale = window->scale() ; ++ qreal scale = window->scale() ; + glViewport(0, 0, surfaceSize.width() * scale, surfaceSize.height() * scale); + + //Draw Decoration +-- +2.41.0 + diff --git a/0053-Client-Fix-buffer-damage.patch b/0053-Client-Fix-buffer-damage.patch new file mode 100644 index 0000000..fb1e6ae --- /dev/null +++ b/0053-Client-Fix-buffer-damage.patch @@ -0,0 +1,71 @@ +From b42a0b7a97545859cc1a83556491f90a3d408790 Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Thu, 3 Aug 2023 12:28:44 +0300 +Subject: [PATCH 53/59] Client: Fix buffer damage + +If the specified damage rectangle has fractional coordinates in the buffer +local coordinate space, the buffer damage needs to be expanded, i.e. + +- bufferRect.left = floor(rect.left * scale) +- bufferRect.right = ceil(rect.right * scale) = ceil((rect.x + rect.width) * scale) + +Flooring the coordinates and ceiling the size is not enough. It can +produce incorrect results. + +For example, consider that a rectangle with logical coordinates of +QRect(0, 23, 179, 46) has been damaged in a window with scale 1.5. When +flooring the coordinates and ceiling the size, the following buffer +damage rect will be produced: QRect(0, 34, 269, 69). Its height is off by +1, the expected height is 70 (ceil((23 + 46) * 1.5) - floor(23 * 1.5) = +ceil(103.5) - floor(34.5) = 104 - 34 = 70). + +Pick-to: 5.15 6.5 6.6 +Change-Id: I927e75a2224bb58b4634125011d1305dbdfbb3aa +Reviewed-by: David Edmundson +(cherry picked from commit d79db699866b37bd3e3358ca18a210dfc5c0b4b9) +--- + src/client/qwaylandwindow.cpp | 20 +++++++++++++++----- + 1 file changed, 15 insertions(+), 5 deletions(-) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 92eeba53..e2e513af 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -573,10 +573,15 @@ void QWaylandWindow::damage(const QRect &rect) + return; + + const qreal s = scale(); +- if (mDisplay->compositorVersion() >= 4) +- mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height())); +- else ++ if (mDisplay->compositorVersion() >= 4) { ++ const QRect bufferRect = ++ QRectF(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height()) ++ .toAlignedRect(); ++ mSurface->damage_buffer(bufferRect.x(), bufferRect.y(), bufferRect.width(), ++ bufferRect.height()); ++ } else { + mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); ++ } + } + + void QWaylandWindow::safeCommit(QWaylandBuffer *buffer, const QRegion &damage) +@@ -614,8 +619,13 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage) + attachOffset(buffer); + if (mDisplay->compositorVersion() >= 4) { + const qreal s = scale(); +- for (const QRect &rect: damage) +- mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height())); ++ for (const QRect &rect : damage) { ++ const QRect bufferRect = ++ QRectF(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height()) ++ .toAlignedRect(); ++ mSurface->damage_buffer(bufferRect.x(), bufferRect.y(), bufferRect.width(), ++ bufferRect.height()); ++ } + } else { + for (const QRect &rect: damage) + mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height()); +-- +2.41.0 + diff --git a/0054-client-Fix-infinite-recursion-with-text-input-v2.patch b/0054-client-Fix-infinite-recursion-with-text-input-v2.patch new file mode 100644 index 0000000..8a9c320 --- /dev/null +++ b/0054-client-Fix-infinite-recursion-with-text-input-v2.patch @@ -0,0 +1,63 @@ +From 959738880c1c2ba6b496657d6bcd8b67d1e326ae Mon Sep 17 00:00:00 2001 +From: Eskil Abrahamsen Blomfeldt +Date: Thu, 12 Jan 2023 14:56:18 +0100 +Subject: [PATCH 54/59] client: Fix infinite recursion with text-input-v2 + +It was possible to get into an infinite recursion when +double-clicking an entry in an item view to edit it. + +What would happen is that the editor takes focus, and we call +commit on the input method commit in case the previous focused +widget has pending input that needs to be committed. The +subsequent method event then causes the QAbstractItemView to +set focus, and since we have not yet updated the focus in the +previous call, we end up in an infinite recursion, eventually +crashing when the stack overflows. + +As a guard for this, we only send an input method event when there +is actually pre-edit text to commit, and we reset the pre-edit +text immediately so that any subsequent call will just exit. + +[ChangeLog][QtWaylandClient] Fixed a possible crash when editing +a field in an item view. + +Pick-to: 5.15 6.2 6.4 6.5 +Fixes: QTBUG-109302 +Change-Id: I45237c80e53b1386705279899e19319180d78fa1 +Reviewed-by: Liang Qi +Reviewed-by: Paul Olav Tvete +Reviewed-by: Inho Lee +(cherry picked from commit db4afd9caf037cfff7aca8b130d326c340b7fed0) + +* asturmlechner 2023-08-14: Resolve conflict with dev branch commit + af8f8c33ea885f472682f98e0699721f50b1f020 - change applied in + qwaylandinputcontext.cpp instead. +--- + src/client/qwaylandinputcontext.cpp | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/src/client/qwaylandinputcontext.cpp b/src/client/qwaylandinputcontext.cpp +index 47696a6a..9435e961 100644 +--- a/src/client/qwaylandinputcontext.cpp ++++ b/src/client/qwaylandinputcontext.cpp +@@ -93,9 +93,14 @@ void QWaylandTextInput::reset() + void QWaylandTextInput::commit() + { + if (QObject *o = QGuiApplication::focusObject()) { +- QInputMethodEvent event; +- event.setCommitString(m_preeditCommit); +- QCoreApplication::sendEvent(o, &event); ++ if (!m_preeditCommit.isEmpty()) { ++ ++ QInputMethodEvent event; ++ event.setCommitString(m_preeditCommit); ++ m_preeditCommit = QString(); ++ ++ QCoreApplication::sendEvent(o, &event); ++ } + } + + reset(); +-- +2.41.0 + diff --git a/0055-Client-Fix-the-mouse-being-stuck-in-pressed-state-af.patch b/0055-Client-Fix-the-mouse-being-stuck-in-pressed-state-af.patch new file mode 100644 index 0000000..174e8d6 --- /dev/null +++ b/0055-Client-Fix-the-mouse-being-stuck-in-pressed-state-af.patch @@ -0,0 +1,38 @@ +From b792de4b59ab80e14c21a953f4e026f6f342b609 Mon Sep 17 00:00:00 2001 +From: Ilya Fedin +Date: Sun, 19 Mar 2023 10:20:11 +0400 +Subject: [PATCH 55/59] Client: Fix the mouse being stuck in pressed state + after DnD + +I can still reproduce the problem using QtWidgets applications +on KDE Plasma 5.27. Both Windows and macOS QPA have a similar quirk +and they both send a MouseButtonRelease event rather than a MouseMove +event. + +Amends f7a386eeaec8e6314c1be7de5e14e9fe3847f9ba + +Task-number: QTBUG-97037 +Pick-to: 6.5 6.2 5.15 +Change-Id: I864a1cb68b3660d858623f943b3958f7cafbf955 +Reviewed-by: David Edmundson +(cherry picked from commit e3c74961b1c7415fd94678802ad7f8173d0be4c1) +--- + src/client/qwaylandinputdevice.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp +index 132c5345..34c185a3 100644 +--- a/src/client/qwaylandinputdevice.cpp ++++ b/src/client/qwaylandinputdevice.cpp +@@ -845,7 +845,7 @@ void QWaylandInputDevice::Pointer::releaseButtons() + mButtons = Qt::NoButton; + + if (auto *window = focusWindow()) { +- MotionEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mParent->modifiers()); ++ ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers()); + window->handleMouse(mParent, e); + } + } +-- +2.41.0 + diff --git a/0056-Client-Commit-the-initial-surface-state-explicitly.patch b/0056-Client-Commit-the-initial-surface-state-explicitly.patch new file mode 100644 index 0000000..b15f2b3 --- /dev/null +++ b/0056-Client-Commit-the-initial-surface-state-explicitly.patch @@ -0,0 +1,37 @@ +From 63914e595d5de7bd64e221b2d63efbe27432fa40 Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Fri, 25 Aug 2023 10:19:07 +0300 +Subject: [PATCH 56/59] Client: Commit the initial surface state explicitly + +QWaylandWindow lacks an explicit step to finish initializing the shell +surface by committing the surface. So far it used to work because of +hidden surface commits in +QWaylandWindow::handleContentOrientationChange(), +QWaylandWindow::setMask() and so on. + +This change adds an explicit step to commit the initial surface state to +make the shell surface initialization robust. + +Change-Id: Ibc38a4e0dbea689a727451c25a61af0270c7e548 +Reviewed-by: David Edmundson +(cherry picked from commit 225432c2294bdfbf24856b2f155cd274b24543b2) +--- + src/client/qwaylandwindow.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index e2e513af..cf2a03fe 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -200,6 +200,8 @@ void QWaylandWindow::initWindow() + mShellSurface->requestWindowStates(window()->windowStates()); + handleContentOrientationChange(window()->contentOrientation()); + mFlags = window()->flags(); ++ ++ mSurface->commit(); + } + + void QWaylandWindow::initializeWlSurface() +-- +2.41.0 + diff --git a/0057-tests-Fix-tst_xdgshell-minMaxSize.patch b/0057-tests-Fix-tst_xdgshell-minMaxSize.patch new file mode 100644 index 0000000..83d3871 --- /dev/null +++ b/0057-tests-Fix-tst_xdgshell-minMaxSize.patch @@ -0,0 +1,35 @@ +From 0091a19ae0d73ec6390d86823fd6a8c4fc9f7f3b Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Fri, 15 Sep 2023 10:06:32 +0300 +Subject: [PATCH 57/59] tests: Fix tst_xdgshell::minMaxSize() + +Amends e8cff6fb39c0fd01548bce18542820a6612dbe49. + +The new size hints will be committed when the surface is committed. + +Change-Id: I94e944fee7dac63d5e9ac86fb348b5d24d54abfc +Reviewed-by: Eskil Abrahamsen Blomfeldt +(cherry picked from commit d8d3d6097afeac62f1b0285e3d5365c7cb580547) +--- + tests/auto/client/xdgshell/tst_xdgshell.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp +index 747875b4..afbeef53 100644 +--- a/tests/auto/client/xdgshell/tst_xdgshell.cpp ++++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp +@@ -604,9 +604,11 @@ void tst_xdgshell::minMaxSize() + QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000)); + + window.setMaximumSize(QSize(500, 400)); ++ window.update(); + QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(500, 400)); + + window.setMinimumSize(QSize(50, 40)); ++ window.update(); + QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(50, 40)); + } + +-- +2.41.0 + diff --git a/0058-Client-Remove-some-surface-commits.patch b/0058-Client-Remove-some-surface-commits.patch new file mode 100644 index 0000000..4fe06b6 --- /dev/null +++ b/0058-Client-Remove-some-surface-commits.patch @@ -0,0 +1,62 @@ +From 035f5d4526d155b45f7d3efddc6505f9e186ae06 Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Fri, 25 Aug 2023 10:15:29 +0300 +Subject: [PATCH 58/59] Client: Remove some surface commits + +The buffer transform, input and opaque regions are double buffered +state. They will be applied on the next surface commit. + +But the issue with them is that the relevant code makes surface commits +too. It's undesired as it can lead to qtwayland committing partial +state, for example it can break xdg surface window geometry. + +This change removes hidden surface commits. The relevant properties will +be applied on the next frame. + +Change-Id: I1c40c9a5430fb6b91d7643b20d628f8a9a9d501a +Reviewed-by: David Edmundson +(cherry picked from commit e8cff6fb39c0fd01548bce18542820a6612dbe49) +--- + src/client/qwaylandwindow.cpp | 4 ---- + src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | 3 --- + 2 files changed, 7 deletions(-) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index cf2a03fe..d3958d46 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -478,8 +478,6 @@ void QWaylandWindow::setMask(const QRegion &mask) + if (isOpaque()) + setOpaqueArea(mMask); + } +- +- mSurface->commit(); + } + + void QWaylandWindow::applyConfigureWhenPossible() +@@ -794,8 +792,6 @@ void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orient + Q_UNREACHABLE(); + } + mSurface->set_buffer_transform(transform); +- // set_buffer_transform is double buffered, we need to commit. +- mSurface->commit(); + } + + void QWaylandWindow::setOrientationMask(Qt::ScreenOrientations mask) +diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +index 2cc36510..535c3398 100644 +--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp ++++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +@@ -367,9 +367,6 @@ bool QWaylandXdgSurface::wantsDecorations() const + void QWaylandXdgSurface::propagateSizeHints() + { + setSizeHints(); +- +- if (m_toplevel && m_window) +- m_window->commit(); + } + + void QWaylandXdgSurface::setWindowGeometry(const QRect &rect) +-- +2.41.0 + diff --git a/0059-Client-Avoid-locking-resizing-in-QWaylandShmBackingS.patch b/0059-Client-Avoid-locking-resizing-in-QWaylandShmBackingS.patch new file mode 100644 index 0000000..7568ea7 --- /dev/null +++ b/0059-Client-Avoid-locking-resizing-in-QWaylandShmBackingS.patch @@ -0,0 +1,69 @@ +From 4de268cbaf6ff3b633429577f06d3d746a3b202a Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Wed, 30 Aug 2023 09:49:41 +0300 +Subject: [PATCH 59/59] Client: Avoid locking resizing in + QWaylandShmBackingStore + +QWaylandWindow::setCanResize(false) will block applying configure +events. QWaylandWindow::setCanResize(true) will unblock configure events +and potentially apply a scheduled configure event if there's one. + +QWaylandWindow::setCanResize(true) has to be called **after** committing +the surface to ensure that the xdg window geometry matches the buffer. +We don't want the xdg window geometry change when painting. + +Unfortunately, setCanResize(true) can be called before the surface is +committed when using a RasterSurface, for example + + - QWaylandShmBackingStore::beginPaint(): calls setCanResize(false) + - QWaylandShmBackingStore::endPaint(): calls setCanResize(true) + - QWaylandWindow::setCanResize(true): applies pending configure event + - QWaylandShmBackingStore::flush(): commits the surface, but the xdg + window geometry is wrong now + +As is, beginPaint() and endPaint() are not entirely correct functions +where configure events can be blocked. We need functions that wrap both +painting and flushing, which are not feasible with the current backing +store design. + +On the other hand, it's worth noting that blocking configure events in +the backing store is not necessary because painting happens on the main +thread unlike OpenGL or Vulkan code paths. + +Given the lack of synchronization points and the fact that rendering +happens on the main thread, this change removes blocking configure +events in QWaylandShmBackingStore. It fixes dolphin and various other +applications that use QtWidgets jumping while being interactively +resized. + +Change-Id: I156e4fd5e04a6bba7e8d48171510d5ab0ec89713 +Reviewed-by: David Edmundson +(cherry picked from commit 8828452bcf2ecf4e02a64380a1697d148c4366b0) +--- + src/client/qwaylandshmbackingstore.cpp | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/src/client/qwaylandshmbackingstore.cpp b/src/client/qwaylandshmbackingstore.cpp +index 90e37e95..145f933b 100644 +--- a/src/client/qwaylandshmbackingstore.cpp ++++ b/src/client/qwaylandshmbackingstore.cpp +@@ -186,8 +186,6 @@ void QWaylandShmBackingStore::beginPaint(const QRegion ®ion) + mPainting = true; + ensureSize(); + +- waylandWindow()->setCanResize(false); +- + if (mBackBuffer->image()->hasAlphaChannel()) { + QPainter p(paintDevice()); + p.setCompositionMode(QPainter::CompositionMode_Source); +@@ -202,7 +200,6 @@ void QWaylandShmBackingStore::endPaint() + mPainting = false; + if (mPendingFlush) + flush(window(), mPendingRegion, QPoint()); +- waylandWindow()->setCanResize(true); + } + + void QWaylandShmBackingStore::ensureSize() +-- +2.41.0 + diff --git a/qt5-qtwayland.spec b/qt5-qtwayland.spec index 51a4a7b..5ec3ccc 100644 --- a/qt5-qtwayland.spec +++ b/qt5-qtwayland.spec @@ -2,8 +2,8 @@ Summary: Qt5 - Wayland platform support and QtCompositor module Name: qt5-%{qt_module} -Version: 5.15.10 -Release: 4%{?dist} +Version: 5.15.11 +Release: 1%{?dist} License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0 Url: http://www.qt.io @@ -13,7 +13,7 @@ Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submod ## Upstream patches ## repo: https://invent.kde.org/qt/qt/qtwayland ## branch: kde/5.15 -## git format-patch v5.15.8-lts-lgpl +## git format-patch v5.15.11-lts-lgpl Patch1: 0001-Client-Announce-an-output-after-receiving-more-compl.patch Patch2: 0002-Fix-issue-with-repeated-window-size-changes.patch Patch3: 0003-Client-Connect-drags-being-accepted-to-updating-the-.patch @@ -41,30 +41,38 @@ Patch24: 0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch Patch25: 0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch Patch26: 0026-use-poll-2-when-reading-from-clipboard.patch Patch27: 0027-Reduce-memory-leakage.patch -Patch28: 0028-Fix-build-with-libcxx-missing-array-include.patch -Patch29: 0029-Only-close-popup-in-the-the-hierchary.patch -Patch30: 0030-Check-pointer-for-null-before-use-in-ASSERT.patch -Patch31: 0031-Use-wl_surface.damage_buffer-on-the-client-side.patch -Patch32: 0032-Client-clear-focus-on-touch-cancel.patch -Patch33: 0033-Guard-mResizeDirty-by-the-correctMutex.patch -Patch34: 0034-Fix-compile-tests.patch -Patch35: 0035-Use-CRLF-line-delimiter-for-text-uri-list-data.patch -Patch36: 0036-Avoid-calling-requestUpdate-from-wrong-thread.patch -Patch37: 0037-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch -Patch38: 0038-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch -Patch39: 0039-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch -Patch40: 0040-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch -Patch41: 0041-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch -Patch42: 0042-Client-Bump-wl_output-version.patch -Patch43: 0043-Fix-frame-sync-related-to-unprotected-multithread-ac.patch -Patch44: 0044-Client-Handle-zwp_primary_selection_device_manager_v.patch -Patch45: 0045-Fixes-the-build-on-CentOS.patch -Patch46: 0046-client-Avoid-protocol-error-with-invalid-min-max-siz.patch -Patch47: 0047-Client-Fix-handling-of-Qt-BlankCursor.patch -Patch48: 0048-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch -Patch49: 0049-Client-Manage-QMimeData-lifecycle.patch -Patch50: 0050-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch -Patch51: 0051-Client-Remove-flip-popup-constraints.patch +Patch28: 0028-Only-close-popup-in-the-the-hierchary.patch +Patch29: 0029-Check-pointer-for-null-before-use-in-ASSERT.patch +Patch30: 0030-Use-wl_surface.damage_buffer-on-the-client-side.patch +Patch31: 0031-Client-clear-focus-on-touch-cancel.patch +Patch32: 0032-Guard-mResizeDirty-by-the-correctMutex.patch +Patch33: 0033-Fix-compile-tests.patch +Patch34: 0034-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch +Patch35: 0035-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch +Patch36: 0036-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch +Patch37: 0037-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch +Patch38: 0038-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch +Patch39: 0039-Client-Bump-wl_output-version.patch +Patch40: 0040-Fix-frame-sync-related-to-unprotected-multithread-ac.patch +Patch41: 0041-Client-Handle-zwp_primary_selection_device_manager_v.patch +Patch42: 0042-Fixes-the-build-on-CentOS.patch +Patch43: 0043-client-Avoid-protocol-error-with-invalid-min-max-siz.patch +Patch44: 0044-Client-Fix-handling-of-Qt-BlankCursor.patch +Patch45: 0045-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch +Patch46: 0046-Client-Manage-QMimeData-lifecycle.patch +Patch47: 0047-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch +Patch48: 0048-Client-Remove-flip-popup-constraints.patch +Patch49: 0049-Destroy-frame-queue-before-display.patch +Patch50: 0050-client-Fix-crash-on-dnd-updates-after-client-facing-.patch +Patch51: 0051-Convert-cursor-bitmap-to-supported-format.patch +Patch52: 0052-Replace-scale-with-devicePixelRatio-for-non-integer-.patch +Patch53: 0053-Client-Fix-buffer-damage.patch +Patch54: 0054-client-Fix-infinite-recursion-with-text-input-v2.patch +Patch55: 0055-Client-Fix-the-mouse-being-stuck-in-pressed-state-af.patch +Patch56: 0056-Client-Commit-the-initial-surface-state-explicitly.patch +Patch57: 0057-tests-Fix-tst_xdgshell-minMaxSize.patch +Patch58: 0058-Client-Remove-some-surface-commits.patch +Patch59: 0059-Client-Avoid-locking-resizing-in-QWaylandShmBackingS.patch # Use QAdwaitaDecorations by default Patch100: qtwayland-use-adwaita-decorations-by-default.patch @@ -178,6 +186,9 @@ popd %changelog +* Fri Oct 06 2023 Jan Grulich - 5.15.11-1 +- 5.15.11 + * Tue Aug 22 2023 Jan Grulich - 5.15.10-4 - Rebuild (qtbase) diff --git a/sources b/sources index 4493233..b4a67ce 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (qtwayland-everywhere-opensource-src-5.15.10.tar.xz) = 214b1fec7dfd815d148a7485f7811e623b06d172e58e4ee3167264a4e4b8f4aeec11474e574f91652a0bd3a48476a6747cad468f1e5035c49a55a96fc1400899 +SHA512 (qtwayland-everywhere-opensource-src-5.15.11.tar.xz) = b47a3358bc37f52dde0839940431e8049abfaa827722e6d57362b07547c35fe9fb422d28fd28c69a13f5773c24efc3eeea1e584372737a0151ed94bf4c5b9980