diff --git a/.gitignore b/.gitignore index f7132bf..0e19fc3 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ /qtwayland-everywhere-opensource-src-5.15.6.tar.xz /qtwayland-everywhere-opensource-src-5.15.7.tar.xz /qtwayland-everywhere-opensource-src-5.15.8.tar.xz +/qtwayland-everywhere-opensource-src-5.15.9.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 a2b56b4..2142e9d 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 32471d114c621e3e6c89a4b7090543a8ff47c0a8 Mon Sep 17 00:00:00 2001 +From 4ddf70b1ed7c5baddef41c549d04917b9dec7d0f Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Wed, 5 May 2021 20:49:26 +0300 -Subject: [PATCH 01/57] Client: Announce an output after receiving more +Subject: [PATCH 01/55] 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.39.0 +2.40.0 diff --git a/0002-Fix-issue-with-repeated-window-size-changes.patch b/0002-Fix-issue-with-repeated-window-size-changes.patch index 1323335..58b41d1 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 4ce9dacc726c61aca80fa283decb2b030bf826db Mon Sep 17 00:00:00 2001 +From a9bcc5dc553b5a307a5bdcb6e1d92058e0257c7c Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Mon, 15 Feb 2021 08:31:06 +0900 -Subject: [PATCH 02/57] Fix issue with repeated window size changes +Subject: [PATCH 02/55] 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,10 +20,10 @@ 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 7889f575..201b583b 100644 +index 57d4eb6b..13dd747a 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp -@@ -131,14 +131,16 @@ void QWaylandEglWindow::updateSurface(bool create) +@@ -122,14 +122,16 @@ void QWaylandEglWindow::updateSurface(bool create) if (!disableResizeCheck) { wl_egl_window_get_attached_size(m_waylandEglWindow, ¤t_width, ¤t_height); } @@ -42,10 +42,10 @@ index 7889f575..201b583b 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 5b1f4d56..0079dfef 100644 +index 6c8f04ec..94c56325 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h -@@ -88,6 +88,7 @@ private: +@@ -87,6 +87,7 @@ private: mutable QOpenGLFramebufferObject *m_contentFBO = nullptr; QSurfaceFormat m_format; @@ -54,5 +54,5 @@ index 5b1f4d56..0079dfef 100644 } -- -2.39.0 +2.40.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 ab9ebae..80f81ae 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 b94794e343a6aacb4eaab3890163d9d9f1755c44 Mon Sep 17 00:00:00 2001 +From eb8e933841d66f0ebe071a170a9af995c2b07b0d Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Tue, 9 Feb 2021 16:09:21 +0000 -Subject: [PATCH 03/57] Client: Connect drags being accepted to updating the +Subject: [PATCH 03/55] Client: Connect drags being accepted to updating the source drag icon Currently in a multi-process drag and drop when the other client accepts @@ -35,5 +35,5 @@ index 7e2e3308..bbd2d568 100644 start_drag(m_dragSource->object(), origin->wlSurface(), icon->wlSurface(), m_display->currentInputDevice()->serial()); return true; -- -2.39.0 +2.40.0 diff --git a/0004-Client-Disconnect-registry-listener-on-destruction.patch b/0004-Client-Disconnect-registry-listener-on-destruction.patch index ac3e48d..51b5718 100644 --- a/0004-Client-Disconnect-registry-listener-on-destruction.patch +++ b/0004-Client-Disconnect-registry-listener-on-destruction.patch @@ -1,7 +1,7 @@ -From 53322088f924decda883293a48e165619d309c7f Mon Sep 17 00:00:00 2001 +From 9d16197f5e888b68cdf98165f46dcc9ac4dd9820 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Fri, 14 May 2021 13:23:24 +0100 -Subject: [PATCH 04/57] Client: Disconnect registry listener on destruction +Subject: [PATCH 04/55] 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 @@ -45,5 +45,5 @@ index 98272e57..5bd28398 100644 QtWaylandClient::QWaylandIntegration *integration() const; int version() const; -- -2.39.0 +2.40.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 074a046..e77a833 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 be78c471e94c7f0906318fc21a1509d90bb730aa Mon Sep 17 00:00:00 2001 +From 8256c6d8bb0f456ad27031bad1cce916c0c29740 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 3 May 2021 23:01:53 +0100 -Subject: [PATCH 05/57] Client: Set XdgShell size hints before the first commit +Subject: [PATCH 05/55] 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 f3e3c330..eb317f3a 100644 +index f50e1c0e..1f51562b 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.39.0 +2.40.0 diff --git a/0006-Fix-build.patch b/0006-Fix-build.patch index 4e04038..41ba119 100644 --- a/0006-Fix-build.patch +++ b/0006-Fix-build.patch @@ -1,7 +1,7 @@ -From d9479064ef2e669cb79c200ee1db7e4f5e145f1f Mon Sep 17 00:00:00 2001 +From bea02a7b4bce8cc3b2a7bce10c53fccc9aedef1e Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 14 Jun 2021 12:45:37 +0100 -Subject: [PATCH 06/57] Fix build +Subject: [PATCH 06/55] Fix build 1b5e43a593e917610e6245f7a272ac081c508ba4 relied on a patch that we can't backport. @@ -42,5 +42,5 @@ index 69cc46a0..9091efbe 100644 class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate -- -2.39.0 +2.40.0 diff --git a/0007-Fix-remove-listener.patch b/0007-Fix-remove-listener.patch index bad25fc..958c895 100644 --- a/0007-Fix-remove-listener.patch +++ b/0007-Fix-remove-listener.patch @@ -1,7 +1,7 @@ -From f1e0f3caca97331b02782c4a367366078ba36b4d Mon Sep 17 00:00:00 2001 +From 418580420c34c1a81fd5a4d872e41dc467c124d0 Mon Sep 17 00:00:00 2001 From: Zhang Liang Date: Mon, 1 Feb 2021 19:29:43 +0800 -Subject: [PATCH 07/57] Fix: remove listener +Subject: [PATCH 07/55] Fix: remove listener Add the operation for removing the listener form listener list @@ -13,10 +13,10 @@ Reviewed-by: David Edmundson 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index f10c1f79..e0dfe8b2 100644 +index 78e387bc..280e63bd 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -452,9 +452,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data) +@@ -456,9 +456,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data) void QWaylandDisplay::removeListener(RegistryListener listener, void *data) { @@ -29,5 +29,5 @@ index f10c1f79..e0dfe8b2 100644 uint32_t QWaylandDisplay::currentTimeMillisec() -- -2.39.0 +2.40.0 diff --git a/0008-Hook-up-queryKeyboardModifers.patch b/0008-Hook-up-queryKeyboardModifers.patch index cd5c550..c121bf4 100644 --- a/0008-Hook-up-queryKeyboardModifers.patch +++ b/0008-Hook-up-queryKeyboardModifers.patch @@ -1,7 +1,7 @@ -From 5fe9ca3aad86b82a2c43b33491605e53227cefad Mon Sep 17 00:00:00 2001 +From 0bd8b57955c74fd7cadc3ceb1409c1705208f91e Mon Sep 17 00:00:00 2001 From: David Redondo Date: Wed, 26 May 2021 14:49:40 +0200 -Subject: [PATCH 08/57] Hook up queryKeyboardModifers +Subject: [PATCH 08/55] Hook up queryKeyboardModifers Can be useful when upon enter a modifiers event is received but no key event so no QKeyEvent is generated. @@ -19,7 +19,7 @@ Reviewed-by: David Edmundson 2 files changed, 10 insertions(+) diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp -index c53ccb78..e5e7dd42 100644 +index d257e2e3..cd8569b1 100644 --- a/src/client/qwaylandintegration.cpp +++ b/src/client/qwaylandintegration.cpp @@ -262,6 +262,14 @@ QWaylandDisplay *QWaylandIntegration::display() const @@ -51,5 +51,5 @@ index ff70ae25..73b80658 100644 QStringList themeNames() const override; -- -2.39.0 +2.40.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 1bb9b82..674bde0 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 c903b6486550f3dbbb8d4dc3ddd81aa60cc505fe Mon Sep 17 00:00:00 2001 +From 046a799372b78ab843b26c2312bb563c0d50adcb Mon Sep 17 00:00:00 2001 From: Jan Blackquill Date: Tue, 24 Aug 2021 14:36:34 -0400 -Subject: [PATCH 09/57] Correctly detect if image format is supported by +Subject: [PATCH 09/55] Correctly detect if image format is supported by QImageWriter The code queries potential image formats by stripping a mimetype of its @@ -64,5 +64,5 @@ index a5fdd34d..051a91dc 100644 fmt = imgFmt; } -- -2.39.0 +2.40.0 diff --git a/0010-Client-Don-t-always-recreate-frame-callbacks.patch b/0010-Client-Don-t-always-recreate-frame-callbacks.patch index bddb1b3..bfe00e5 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 f1c68a200d48545dee0e266a55953e5ddac475f5 Mon Sep 17 00:00:00 2001 +From 3bb880d6b828f934f69608af958963c9eedc4e74 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 27 May 2021 19:55:04 -0300 -Subject: [PATCH 10/57] Client: Don't always recreate frame callbacks +Subject: [PATCH 10/55] 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 cb82857a..f13018be 100644 +index df2dcdaa..23816895 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp -@@ -1185,6 +1185,10 @@ void QWaylandWindow::requestUpdate() +@@ -1192,6 +1192,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.39.0 +2.40.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 5983fea..6eb5579 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 a3fcf0c111a96f3dd69ae51366fe7e167d7bac31 Mon Sep 17 00:00:00 2001 +From a0ab21120ae0d0976d1c554aa72f00d4b3d35de9 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 27 May 2021 20:02:53 -0300 -Subject: [PATCH 11/57] Client: Always destroy frame callback in the actual +Subject: [PATCH 11/55] 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 f13018be..4544dcec 100644 +index 23816895..d3f28d68 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -635,9 +635,13 @@ void QWaylandWindow::commit() @@ -41,7 +41,7 @@ index f13018be..4544dcec 100644 window->handleFrameCallback(); } }; -@@ -1194,11 +1198,6 @@ void QWaylandWindow::handleUpdate() +@@ -1201,11 +1205,6 @@ void QWaylandWindow::handleUpdate() if (!mSurface) return; @@ -54,5 +54,5 @@ index f13018be..4544dcec 100644 struct ::wl_surface *wrappedSurface = reinterpret_cast(wl_proxy_create_wrapper(mSurface->object())); wl_proxy_set_queue(reinterpret_cast(wrappedSurface), mFrameQueue.queue); -- -2.39.0 +2.40.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 e88abd4..1a0cff0 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 2cee3d23545333b16c185c36769e4be05660efe7 Mon Sep 17 00:00:00 2001 +From d40acfcc33ae9f8d105f196d1af03a640a02db0b 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/57] Wayland client: use wl_keyboard to determine active +Subject: [PATCH 12/55] Wayland client: use wl_keyboard to determine active state Commit f497a5bb87270174b8e0106b7eca1992d44ff15d made QWaylandDisplay @@ -46,10 +46,10 @@ 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 e0dfe8b2..27303110 100644 +index 280e63bd..1568052e 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -575,14 +575,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic +@@ -579,14 +579,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic if (mLastKeyboardFocus == keyboardFocus) return; @@ -68,7 +68,7 @@ index e0dfe8b2..27303110 100644 mLastKeyboardFocus = keyboardFocus; } -@@ -627,6 +623,13 @@ QWaylandInputDevice *QWaylandDisplay::defaultInputDevice() const +@@ -631,6 +627,13 @@ QWaylandInputDevice *QWaylandDisplay::defaultInputDevice() const return mInputDevices.isEmpty() ? 0 : mInputDevices.first(); } @@ -83,10 +83,10 @@ index e0dfe8b2..27303110 100644 QWaylandCursor *QWaylandDisplay::waylandCursor() diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h -index 3b092bc8..09a1736a 100644 +index 1bad8b67..15104d65 100644 --- a/src/client/qwaylanddisplay_p.h +++ b/src/client/qwaylanddisplay_p.h -@@ -215,6 +215,7 @@ public: +@@ -219,6 +219,7 @@ public: void destroyFrameQueue(const FrameQueue &q); void dispatchQueueWhile(wl_event_queue *queue, std::function condition, int timeout = -1); @@ -95,7 +95,7 @@ index 3b092bc8..09a1736a 100644 void blockingReadEvents(); void flushRequests(); diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 4544dcec..0b64b0f4 100644 +index d3f28d68..b363c352 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 4544dcec..0b64b0f4 100644 } QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface) -@@ -1098,10 +1099,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab) +@@ -1105,10 +1106,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 eb317f3a..11706924 100644 +index 1f51562b..b7383e19 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.39.0 +2.40.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 289fd5b..fb12a01 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 b1b87bf639d46605d63e07eecd1135d9e5e4ffac Mon Sep 17 00:00:00 2001 +From 23327bb4cdc00b47e0f96efca2fe494540f01601 Mon Sep 17 00:00:00 2001 From: Jan Grulich Date: Fri, 16 Jul 2021 13:00:03 +0200 -Subject: [PATCH 13/57] Client: do not empty clipboard when a new popup/window +Subject: [PATCH 13/55] 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,10 +21,10 @@ Cherry-pick: 1e57ebd501cfc2255300392cd4565cd034efeed8 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 27303110..9f595af3 100644 +index 1568052e..aa8808e9 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -597,6 +597,19 @@ void QWaylandDisplay::handleWaylandSync() +@@ -601,6 +601,19 @@ void QWaylandDisplay::handleWaylandSync() QWindow *activeWindow = mActiveWindows.empty() ? nullptr : mActiveWindows.last()->window(); if (activeWindow != QGuiApplication::focusWindow()) QWindowSystemInterface::handleWindowActivated(activeWindow); @@ -45,10 +45,10 @@ index 27303110..9f595af3 100644 const wl_callback_listener QWaylandDisplay::syncCallbackListener = { diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp -index 613fe862..aaec7eb8 100644 +index e931d1f5..5d704795 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp -@@ -1300,14 +1300,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed() +@@ -1304,14 +1304,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed() void QWaylandInputDevice::Keyboard::handleFocusLost() { mFocus = nullptr; @@ -64,5 +64,5 @@ index 613fe862..aaec7eb8 100644 mRepeatTimer.stop(); } -- -2.39.0 +2.40.0 diff --git a/0015-Client-Implement-DataDeviceV3.patch b/0014-Client-Implement-DataDeviceV3.patch similarity index 98% rename from 0015-Client-Implement-DataDeviceV3.patch rename to 0014-Client-Implement-DataDeviceV3.patch index f8f7562..76c63d1 100644 --- a/0015-Client-Implement-DataDeviceV3.patch +++ b/0014-Client-Implement-DataDeviceV3.patch @@ -1,7 +1,7 @@ -From 3eaa09ead7750e9a484d0f4dc44d60ee48e54cdd Mon Sep 17 00:00:00 2001 +From e0e004c77140da5e454dadf4d6809c1603b5735d Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Tue, 16 Feb 2021 09:51:47 +0000 -Subject: [PATCH 15/57] Client: Implement DataDeviceV3 +Subject: [PATCH 14/55] Client: Implement DataDeviceV3 DataDeviceV2 fixes a leak of DataDevice resources. @@ -409,10 +409,10 @@ index 25afff79..96f07bc3 100644 } diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 9f595af3..ea344c61 100644 +index aa8808e9..2d298532 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -354,7 +354,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin +@@ -356,7 +356,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin mInputDevices.append(inputDevice); #if QT_CONFIG(wayland_datadevice) } else if (interface == QStringLiteral("wl_data_device_manager")) { @@ -509,5 +509,5 @@ index 1568b3b9..067410d0 100644 class DataDeviceCompositor : public DefaultCompositor { public: -- -2.39.0 +2.40.0 diff --git a/0014-Set-preedit-cursor-when-cursor-equals-to-0.patch b/0014-Set-preedit-cursor-when-cursor-equals-to-0.patch deleted file mode 100644 index 7dd5f80..0000000 --- a/0014-Set-preedit-cursor-when-cursor-equals-to-0.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 4a7cf632c3d1a5ad66e724b0de85342654ba4760 Mon Sep 17 00:00:00 2001 -From: Weng Xuetian -Date: Sat, 18 Dec 2021 23:42:49 -0800 -Subject: [PATCH 14/57] Set preedit cursor when cursor equals to 0 - -Pick-to: 6.3 6.2 5.15 -Change-Id: I832fbb22d973b36ac4ab51570fc53bc2e4c3ed58 -Reviewed-by: Liang Qi -(cherry picked from commit 719a55be13bdadfa659a732755f280e276a894bd) ---- - src/shared/qwaylandinputmethodeventbuilder.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/shared/qwaylandinputmethodeventbuilder.cpp b/src/shared/qwaylandinputmethodeventbuilder.cpp -index 526d0ef4..25be2509 100644 ---- a/src/shared/qwaylandinputmethodeventbuilder.cpp -+++ b/src/shared/qwaylandinputmethodeventbuilder.cpp -@@ -151,7 +151,7 @@ QInputMethodEvent QWaylandInputMethodEventBuilder::buildPreedit(const QString &t - { - QList attributes; - -- if (m_preeditCursor < 0) { -+ if (m_preeditCursor <= 0) { - attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, 0, 0, QVariant())); - } else if (m_preeditCursor > 0) { - attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, indexFromWayland(text, m_preeditCursor), 1, QVariant())); --- -2.39.0 - diff --git a/0016-Client-Delay-deletion-of-QDrag-object-until-after-we.patch b/0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch similarity index 93% rename from 0016-Client-Delay-deletion-of-QDrag-object-until-after-we.patch rename to 0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch index 4852ad3..a07907b 100644 --- a/0016-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 072a3e85068c74cb63fd66bc9dcf7b0b5757a30b Mon Sep 17 00:00:00 2001 +From f3900786ebe46aefbecbb2a37cb175846ca0dfc2 Mon Sep 17 00:00:00 2001 From: Arjen Hiemstra Date: Thu, 18 Nov 2021 13:05:30 +0100 -Subject: [PATCH 16/57] Client: Delay deletion of QDrag object until after +Subject: [PATCH 15/55] 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.39.0 +2.40.0 diff --git a/0017-Client-Avoid-processing-of-events-when-showing-windo.patch b/0016-Client-Avoid-processing-of-events-when-showing-windo.patch similarity index 89% rename from 0017-Client-Avoid-processing-of-events-when-showing-windo.patch rename to 0016-Client-Avoid-processing-of-events-when-showing-windo.patch index 54fec68..de9483c 100644 --- a/0017-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 b61579e7185d4f64ef896ec609428afe81e586e1 Mon Sep 17 00:00:00 2001 +From 9edd2a05c79a1c40867440826c830c76136152da Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Sun, 14 Nov 2021 13:54:19 +0000 -Subject: [PATCH 17/57] Client: Avoid processing of events when showing windows +Subject: [PATCH 16/55] 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 0b64b0f4..cc425818 100644 +index b363c352..b98435ed 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 0b64b0f4..cc425818 100644 setGeometry(windowGeometry()); // Don't flush the events here, or else the newly visible window may start drawing, but since -- -2.39.0 +2.40.0 diff --git a/0018-Handle-registry_global-out-of-constructor.patch b/0017-Handle-registry_global-out-of-constructor.patch similarity index 87% rename from 0018-Handle-registry_global-out-of-constructor.patch rename to 0017-Handle-registry_global-out-of-constructor.patch index 74532e0..96206d3 100644 --- a/0018-Handle-registry_global-out-of-constructor.patch +++ b/0017-Handle-registry_global-out-of-constructor.patch @@ -1,7 +1,7 @@ -From a68649f3a3f04b14238be9f327c5132da1f9fe27 Mon Sep 17 00:00:00 2001 +From 5889bb845d951a7877201bca97ffe4bb2491d966 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Thu, 18 Feb 2021 15:45:49 +0900 -Subject: [PATCH 18/57] Handle registry_global out of constructor +Subject: [PATCH 17/55] 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,10 +17,10 @@ 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 ea344c61..0f75cb7e 100644 +index 2d298532..97fb8cbe 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -158,13 +158,6 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) +@@ -160,13 +160,6 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) if (!mXkbContext) qCWarning(lcQpaWayland, "failed to create xkb context"); #endif @@ -34,7 +34,7 @@ index ea344c61..0f75cb7e 100644 } QWaylandDisplay::~QWaylandDisplay(void) -@@ -189,6 +182,18 @@ QWaylandDisplay::~QWaylandDisplay(void) +@@ -191,6 +184,18 @@ QWaylandDisplay::~QWaylandDisplay(void) wl_display_disconnect(mDisplay); } @@ -54,10 +54,10 @@ index ea344c61..0f75cb7e 100644 { if (!mScreens.empty() || mPlaceholderScreen) diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h -index 09a1736a..d9c8849f 100644 +index 15104d65..49820255 100644 --- a/src/client/qwaylanddisplay_p.h +++ b/src/client/qwaylanddisplay_p.h -@@ -129,6 +129,8 @@ public: +@@ -131,6 +131,8 @@ public: QWaylandDisplay(QWaylandIntegration *waylandIntegration); ~QWaylandDisplay(void) override; @@ -67,7 +67,7 @@ index 09a1736a..d9c8849f 100644 struct xkb_context *xkbContext() const { return mXkbContext.get(); } #endif diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp -index e5e7dd42..f5632982 100644 +index cd8569b1..8afecb31 100644 --- a/src/client/qwaylandintegration.cpp +++ b/src/client/qwaylandintegration.cpp @@ -200,6 +200,9 @@ void QWaylandIntegration::initialize() @@ -81,5 +81,5 @@ index e5e7dd42..f5632982 100644 mDisplay->ensureScreen(); } -- -2.39.0 +2.40.0 diff --git a/0019-Connect-flushRequest-after-forceRoundTrip.patch b/0018-Connect-flushRequest-after-forceRoundTrip.patch similarity index 93% rename from 0019-Connect-flushRequest-after-forceRoundTrip.patch rename to 0018-Connect-flushRequest-after-forceRoundTrip.patch index baf184e..3b9af70 100644 --- a/0019-Connect-flushRequest-after-forceRoundTrip.patch +++ b/0018-Connect-flushRequest-after-forceRoundTrip.patch @@ -1,7 +1,7 @@ -From 848a4c047577d4800a03da2cb98e305702b220ae Mon Sep 17 00:00:00 2001 +From 2e03c3b47fa91eb8db5b9a635c2f9dca2b4f5158 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 17 Mar 2021 16:31:10 +0900 -Subject: [PATCH 19/57] Connect flushRequest after forceRoundTrip +Subject: [PATCH 18/55] Connect flushRequest after forceRoundTrip If flushRequest is connected with aboutToBlock, the flushRequest may consumes all events so that processEvents might be blocked in forceRoundTrip. @@ -14,7 +14,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp -index f5632982..3a6fa651 100644 +index 8afecb31..661cea53 100644 --- a/src/client/qwaylandintegration.cpp +++ b/src/client/qwaylandintegration.cpp @@ -192,10 +192,6 @@ QAbstractEventDispatcher *QWaylandIntegration::createEventDispatcher() const @@ -43,5 +43,5 @@ index f5632982..3a6fa651 100644 mDisplay->ensureScreen(); } -- -2.39.0 +2.40.0 diff --git a/0020-Move-the-wayland-socket-polling-to-a-separate-event-.patch b/0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch similarity index 95% rename from 0020-Move-the-wayland-socket-polling-to-a-separate-event-.patch rename to 0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch index 5850e4d..5e045bf 100644 --- a/0020-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 920bdf21327c447e11a1edb8e75b153800025732 Mon Sep 17 00:00:00 2001 +From d89cc9deab3f61cacfad71e8aa32d83d421d49da Mon Sep 17 00:00:00 2001 From: Adrien Faveraux Date: Fri, 26 Nov 2021 09:18:58 +0100 -Subject: [PATCH 20/57] Move the wayland socket polling to a separate event +Subject: [PATCH 19/55] Move the wayland socket polling to a separate event thread New event threads is introduced which calls poll() on the wayland fd, @@ -32,10 +32,10 @@ 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 0f75cb7e..a7ce280a 100644 +index 97fb8cbe..ebcdbd22 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -85,10 +85,203 @@ +@@ -87,10 +87,203 @@ #include @@ -239,7 +239,7 @@ index 0f75cb7e..a7ce280a 100644 Q_LOGGING_CATEGORY(lcQpaWayland, "qt.qpa.wayland"); // for general (uncategorized) Wayland platform logging struct wl_surface *QWaylandDisplay::createSurface(void *handle) -@@ -162,6 +355,12 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) +@@ -164,6 +357,12 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) QWaylandDisplay::~QWaylandDisplay(void) { @@ -252,7 +252,7 @@ index 0f75cb7e..a7ce280a 100644 if (mSyncCallback) wl_callback_destroy(mSyncCallback); -@@ -208,98 +407,37 @@ void QWaylandDisplay::ensureScreen() +@@ -210,98 +409,37 @@ void QWaylandDisplay::ensureScreen() void QWaylandDisplay::checkError() const { @@ -371,7 +371,7 @@ index 0f75cb7e..a7ce280a 100644 } QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const -@@ -674,4 +812,6 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p +@@ -678,4 +816,6 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p } // namespace QtWaylandClient @@ -379,10 +379,10 @@ index 0f75cb7e..a7ce280a 100644 + QT_END_NAMESPACE diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h -index d9c8849f..42bc661d 100644 +index 49820255..cf91b924 100644 --- a/src/client/qwaylanddisplay_p.h +++ b/src/client/qwaylanddisplay_p.h -@@ -109,6 +109,7 @@ class QWaylandSurface; +@@ -111,6 +111,7 @@ class QWaylandSurface; class QWaylandShellIntegration; class QWaylandCursor; class QWaylandCursorTheme; @@ -390,7 +390,7 @@ index d9c8849f..42bc661d 100644 typedef void (*RegistryListener)(void *data, struct wl_registry *registry, -@@ -120,12 +121,6 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandDisplay : public QObject, public QtWayland +@@ -122,12 +123,6 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandDisplay : public QObject, public QtWayland Q_OBJECT public: @@ -403,7 +403,7 @@ index d9c8849f..42bc661d 100644 QWaylandDisplay(QWaylandIntegration *waylandIntegration); ~QWaylandDisplay(void) override; -@@ -212,12 +207,11 @@ public: +@@ -216,12 +211,11 @@ public: void handleKeyboardFocusChanged(QWaylandInputDevice *inputDevice); void handleWindowDestroyed(QWaylandWindow *window); @@ -419,7 +419,7 @@ index d9c8849f..42bc661d 100644 public slots: void blockingReadEvents(); void flushRequests(); -@@ -240,6 +234,9 @@ private: +@@ -244,6 +238,9 @@ private: }; struct wl_display *mDisplay = nullptr; @@ -429,7 +429,7 @@ index d9c8849f..42bc661d 100644 QtWayland::wl_compositor mCompositor; QScopedPointer mShm; QList mWaitingScreens; -@@ -276,11 +273,9 @@ private: +@@ -282,11 +279,9 @@ private: QWaylandInputDevice *mLastInputDevice = nullptr; QPointer mLastInputWindow; QPointer mLastKeyboardFocus; @@ -443,7 +443,7 @@ index d9c8849f..42bc661d 100644 bool mClientSideInputContextRequested = !QPlatformInputContextFactory::requested().isNull(); diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp -index 3a6fa651..3b876047 100644 +index 661cea53..fbf00c6b 100644 --- a/src/client/qwaylandintegration.cpp +++ b/src/client/qwaylandintegration.cpp @@ -192,9 +192,7 @@ QAbstractEventDispatcher *QWaylandIntegration::createEventDispatcher() const @@ -458,7 +458,7 @@ index 3a6fa651..3b876047 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 cc425818..13976320 100644 +index b98435ed..292dd023 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr; @@ -506,7 +506,7 @@ index cc425818..13976320 100644 if (mWaitingForFrameCallback) { qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed"; -@@ -1172,8 +1175,11 @@ void QWaylandWindow::requestUpdate() +@@ -1179,8 +1182,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 +520,7 @@ index cc425818..13976320 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 -@@ -1186,7 +1192,12 @@ void QWaylandWindow::requestUpdate() +@@ -1193,7 +1199,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 +534,7 @@ index cc425818..13976320 100644 deliverUpdateRequest(); }, Qt::QueuedConnection); } -@@ -1206,9 +1217,10 @@ void QWaylandWindow::handleUpdate() +@@ -1213,9 +1224,10 @@ void QWaylandWindow::handleUpdate() if (!mSurface) return; @@ -547,7 +547,7 @@ index cc425818..13976320 100644 mFrameCallback = wl_surface_frame(wrappedSurface); wl_proxy_wrapper_destroy(wrappedSurface); wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this); -@@ -1218,6 +1230,8 @@ void QWaylandWindow::handleUpdate() +@@ -1225,6 +1237,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 +570,5 @@ index fb3ed606..54ac67a9 100644 // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer -- -2.39.0 +2.40.0 diff --git a/0022-Client-Remove-mWaitingForUpdateDelivery.patch b/0020-Client-Remove-mWaitingForUpdateDelivery.patch similarity index 95% rename from 0022-Client-Remove-mWaitingForUpdateDelivery.patch rename to 0020-Client-Remove-mWaitingForUpdateDelivery.patch index 2960eb8..3074807 100644 --- a/0022-Client-Remove-mWaitingForUpdateDelivery.patch +++ b/0020-Client-Remove-mWaitingForUpdateDelivery.patch @@ -1,7 +1,7 @@ -From 0aaf113e480900740f8c7e6ebd7acb1ea28cf40e Mon Sep 17 00:00:00 2001 +From 58c67c6e8f2d94cef7f8eec072ebad031769e144 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 1 Feb 2022 13:05:36 +0200 -Subject: [PATCH 22/57] Client: Remove mWaitingForUpdateDelivery +Subject: [PATCH 20/55] 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 13976320..579a762a 100644 +index 292dd023..de5af1bd 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.39.0 +2.40.0 diff --git a/0021-Fix-crash-if-no-input-method-module-could-be-loaded.patch b/0021-Fix-crash-if-no-input-method-module-could-be-loaded.patch deleted file mode 100644 index 69d38b3..0000000 --- a/0021-Fix-crash-if-no-input-method-module-could-be-loaded.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 4a1969067ed737c3fa659242cf7e806cd86982e0 Mon Sep 17 00:00:00 2001 -From: Joni Poikelin -Date: Thu, 3 Feb 2022 14:01:50 +0200 -Subject: [PATCH 21/57] Fix crash if no input method module could be loaded - -Pick-to: 6.2 6.3 5.15 -Change-Id: I8f346def616606a6c5540856bd08a84ee7ed5ca2 -Reviewed-by: David Edmundson -(cherry picked from commit 49fb7248f6ab7de046e2179c7861951ea1169e9b) ---- - src/client/qwaylandintegration.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp -index 3b876047..fbf00c6b 100644 ---- a/src/client/qwaylandintegration.cpp -+++ b/src/client/qwaylandintegration.cpp -@@ -491,7 +491,7 @@ void QWaylandIntegration::reconfigureInputContext() - } - #endif - -- qCDebug(lcQpaWayland) << "using input method:" << inputContext()->metaObject()->className(); -+ qCDebug(lcQpaWayland) << "using input method:" << (inputContext() ? inputContext()->metaObject()->className() : ""); - } - - QWaylandShellIntegration *QWaylandIntegration::createShellIntegration(const QString &integrationName) --- -2.39.0 - diff --git a/0025-client-Simplify-round-trip-behavior.patch b/0021-client-Simplify-round-trip-behavior.patch similarity index 92% rename from 0025-client-Simplify-round-trip-behavior.patch rename to 0021-client-Simplify-round-trip-behavior.patch index 069848b..b6b1d10 100644 --- a/0025-client-Simplify-round-trip-behavior.patch +++ b/0021-client-Simplify-round-trip-behavior.patch @@ -1,7 +1,7 @@ -From 7b07d715203182c1f04ad450011a7e3623d1e8e8 Mon Sep 17 00:00:00 2001 +From 71a1a9791df20307dd4eb688b0957d0f695823c5 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Wed, 9 Feb 2022 17:20:48 +0000 -Subject: [PATCH 25/57] client: Simplify round trip behavior +Subject: [PATCH 21/55] client: Simplify round trip behavior The custom event queue was removed in 302d4ffb8549214eb4028dc3e47ec4ee4e12ffbd (2015) so the comment about not @@ -22,10 +22,10 @@ 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 a7ce280a..41a44e4b 100644 +index ebcdbd22..d371ffec 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -611,50 +611,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec() +@@ -615,50 +615,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec() return 0; } @@ -78,5 +78,5 @@ index a7ce280a..41a44e4b 100644 bool QWaylandDisplay::supportsWindowDecoration() const -- -2.39.0 +2.40.0 diff --git a/0026-Client-Fix-opaque-region-setter.patch b/0022-Client-Fix-opaque-region-setter.patch similarity index 86% rename from 0026-Client-Fix-opaque-region-setter.patch rename to 0022-Client-Fix-opaque-region-setter.patch index 46d1dc1..6c6c41d 100644 --- a/0026-Client-Fix-opaque-region-setter.patch +++ b/0022-Client-Fix-opaque-region-setter.patch @@ -1,7 +1,7 @@ -From 2c71ea7f92616c799f12a342807688f6854beb4d Mon Sep 17 00:00:00 2001 +From f584a8350503e349669744a1587634431ac0dc82 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Sat, 19 Feb 2022 17:01:04 +0200 -Subject: [PATCH 26/57] Client: Fix opaque region setter +Subject: [PATCH 22/55] 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 579a762a..694e98a4 100644 +index de5af1bd..69319228 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 579a762a..694e98a4 100644 void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset) -- -2.39.0 +2.40.0 diff --git a/0023-Cursor-position-0-should-still-show-the-cursor.patch b/0023-Cursor-position-0-should-still-show-the-cursor.patch deleted file mode 100644 index dbac557..0000000 --- a/0023-Cursor-position-0-should-still-show-the-cursor.patch +++ /dev/null @@ -1,35 +0,0 @@ -From b5ee817f9d1597d6cffb82ec2638d2259e6b1a5a Mon Sep 17 00:00:00 2001 -From: Weng Xuetian -Date: Tue, 8 Feb 2022 07:11:25 -0800 -Subject: [PATCH 23/57] Cursor position == 0 should still show the cursor - -Otherwise the cursor would be hidden even if preedit is empty. -Amends 719a55be13bdadfa659a732755f280e276a894bd - -Pick-to: 5.15 6.2 6.3 -Change-Id: I320733b917779b7b51aa4a28eaea411fdb10a318 -Reviewed-by: Liang Qi -(cherry picked from commit 31ae194e295651d9ece03408630d2358acd4f7b4) ---- - src/shared/qwaylandinputmethodeventbuilder.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/shared/qwaylandinputmethodeventbuilder.cpp b/src/shared/qwaylandinputmethodeventbuilder.cpp -index 25be2509..458d818e 100644 ---- a/src/shared/qwaylandinputmethodeventbuilder.cpp -+++ b/src/shared/qwaylandinputmethodeventbuilder.cpp -@@ -151,9 +151,9 @@ QInputMethodEvent QWaylandInputMethodEventBuilder::buildPreedit(const QString &t - { - QList attributes; - -- if (m_preeditCursor <= 0) { -+ if (m_preeditCursor < 0) { - attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, 0, 0, QVariant())); -- } else if (m_preeditCursor > 0) { -+ } else { - attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, indexFromWayland(text, m_preeditCursor), 1, QVariant())); - } - --- -2.39.0 - diff --git a/0027-Use-proper-dependencies-in-compile-tests.patch b/0023-Use-proper-dependencies-in-compile-tests.patch similarity index 96% rename from 0027-Use-proper-dependencies-in-compile-tests.patch rename to 0023-Use-proper-dependencies-in-compile-tests.patch index 0d02875..0023433 100644 --- a/0027-Use-proper-dependencies-in-compile-tests.patch +++ b/0023-Use-proper-dependencies-in-compile-tests.patch @@ -1,7 +1,7 @@ -From 20af00d0fb9da337d16b6d464ade52de39d39bf0 Mon Sep 17 00:00:00 2001 +From a9831916ac5463682b7a27db3ffcadfe0ea07ab9 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Fri, 4 Feb 2022 11:07:36 +0100 -Subject: [PATCH 27/57] Use proper dependencies in compile tests +Subject: [PATCH 23/55] 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.39.0 +2.40.0 diff --git a/0029-Revert-Client-Remove-mWaitingForUpdateDelivery.patch b/0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch similarity index 92% rename from 0029-Revert-Client-Remove-mWaitingForUpdateDelivery.patch rename to 0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch index 90ce23d..1cc3e5c 100644 --- a/0029-Revert-Client-Remove-mWaitingForUpdateDelivery.patch +++ b/0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch @@ -1,7 +1,7 @@ -From 041325c228861093d4325927e4f5e535c9410d1f Mon Sep 17 00:00:00 2001 +From c6639e225f45564def8f6729c83887ab73495e59 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 15 Mar 2022 15:59:15 +0100 -Subject: [PATCH 29/57] Revert "Client: Remove mWaitingForUpdateDelivery" +Subject: [PATCH 24/55] 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 694e98a4..733d5ffa 100644 +index 69319228..a87e11aa 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.39.0 +2.40.0 diff --git a/0024-Update-the-preedit-styling-mapping.patch b/0024-Update-the-preedit-styling-mapping.patch deleted file mode 100644 index 6530033..0000000 --- a/0024-Update-the-preedit-styling-mapping.patch +++ /dev/null @@ -1,88 +0,0 @@ -From b7cf29e74784f5138a0182f733fe31960debf7be Mon Sep 17 00:00:00 2001 -From: Weng Xuetian -Date: Wed, 22 Dec 2021 10:42:38 -0800 -Subject: [PATCH 24/57] Update the preedit styling mapping - -- None mapping to no style. -- Default/Underline mapping to underline. -- Highlight/Selection mapping to background color/text color with highlight/highlight -text with underline. -- Active/Inactive mapping to bold text with underline. -- Incorrect mapping to red wave underline. - -Pick-to: 5.15 6.2 6.3 -Change-Id: Iab51d671b8f83aece8596f7f7610de19343fcceb -Reviewed-by: Aleix Pol Gonzalez -(cherry picked from commit f1fb5d9e568a24e213ee41e82a1142cef56f1098) ---- - .../qwaylandinputmethodeventbuilder.cpp | 31 ++++++++++++------- - 1 file changed, 20 insertions(+), 11 deletions(-) - -diff --git a/src/shared/qwaylandinputmethodeventbuilder.cpp b/src/shared/qwaylandinputmethodeventbuilder.cpp -index 458d818e..f50ccf30 100644 ---- a/src/shared/qwaylandinputmethodeventbuilder.cpp -+++ b/src/shared/qwaylandinputmethodeventbuilder.cpp -@@ -39,7 +39,10 @@ - - #include "qwaylandinputmethodeventbuilder_p.h" - -+#include -+#include - #include -+#include - #include - - #ifdef QT_BUILD_WAYLANDCOMPOSITOR_LIB -@@ -81,32 +84,38 @@ void QWaylandInputMethodEventBuilder::addPreeditStyling(uint32_t index, uint32_t - QTextCharFormat format; - - switch (style) { -- case 0: -- case 1: -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_NONE: -+ break; -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_DEFAULT: -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_UNDERLINE: - format.setFontUnderline(true); - format.setUnderlineStyle(QTextCharFormat::SingleUnderline); - m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); - break; -- case 2: -- case 3: -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_ACTIVE: -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_INACTIVE: - format.setFontWeight(QFont::Bold); - format.setFontUnderline(true); - format.setUnderlineStyle(QTextCharFormat::SingleUnderline); - m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); - break; -- case 4: -- format.setFontUnderline(true); -- format.setUnderlineStyle(QTextCharFormat::SingleUnderline); -- m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_HIGHLIGHT: -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_SELECTION: -+ { -+ format.setFontUnderline(true); -+ format.setUnderlineStyle(QTextCharFormat::SingleUnderline); -+ QPalette palette = qApp->palette(); -+ format.setBackground(QBrush(palette.color(QPalette::Active, QPalette::Highlight))); -+ format.setForeground(QBrush(palette.color(QPalette::Active, QPalette::HighlightedText))); -+ m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); -+ } - break; -- case 5: -+ case ZWP_TEXT_INPUT_V2_PREEDIT_STYLE_INCORRECT: - format.setFontUnderline(true); - format.setUnderlineStyle(QTextCharFormat::WaveUnderline); - format.setUnderlineColor(QColor(Qt::red)); - m_preeditStyles.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, index, length, format)); - break; --// case QtWayland::wl_text_input::preedit_style_selection: --// case QtWayland::wl_text_input::preedit_style_none: - default: - break; - } --- -2.39.0 - diff --git a/0030-Fix-race-condition-on-mWaitingForUpdateDelivery.patch b/0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch similarity index 92% rename from 0030-Fix-race-condition-on-mWaitingForUpdateDelivery.patch rename to 0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch index 9d882ea..9f03187 100644 --- a/0030-Fix-race-condition-on-mWaitingForUpdateDelivery.patch +++ b/0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch @@ -1,7 +1,7 @@ -From 2c108beef333a46caf80db9decff43083aaaa099 Mon Sep 17 00:00:00 2001 +From 2c403a8522db9aa6a9f365dba5f8ef5af205295c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 15 Mar 2022 16:53:04 +0100 -Subject: [PATCH 30/57] Fix race condition on mWaitingForUpdateDelivery +Subject: [PATCH 25/55] 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 733d5ffa..1952c81e 100644 +index a87e11aa..264ca59b 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.39.0 +2.40.0 diff --git a/0031-use-poll-2-when-reading-from-clipboard.patch b/0026-use-poll-2-when-reading-from-clipboard.patch similarity index 92% rename from 0031-use-poll-2-when-reading-from-clipboard.patch rename to 0026-use-poll-2-when-reading-from-clipboard.patch index ba8462e..358dc32 100644 --- a/0031-use-poll-2-when-reading-from-clipboard.patch +++ b/0026-use-poll-2-when-reading-from-clipboard.patch @@ -1,7 +1,7 @@ -From 78ea1a157dde5246b0b53e80d61bb7929aff9616 Mon Sep 17 00:00:00 2001 +From 2f0528fc51a378bdd8a3ff93d996765fccf54cce Mon Sep 17 00:00:00 2001 From: Kenneth Topp Date: Mon, 4 Apr 2022 09:36:21 -0400 -Subject: [PATCH 31/57] use poll(2) when reading from clipboard +Subject: [PATCH 26/55] 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.39.0 +2.40.0 diff --git a/0032-Reduce-memory-leakage.patch b/0027-Reduce-memory-leakage.patch similarity index 79% rename from 0032-Reduce-memory-leakage.patch rename to 0027-Reduce-memory-leakage.patch index 44fa5ae..e647362 100644 --- a/0032-Reduce-memory-leakage.patch +++ b/0027-Reduce-memory-leakage.patch @@ -1,7 +1,7 @@ -From 55fc0727534575897a866f4b89295dfc38652434 Mon Sep 17 00:00:00 2001 +From 2197557879ae1e3459e715dbc20b21e8652cb972 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Tue, 22 Feb 2022 12:31:08 +0100 -Subject: [PATCH 32/57] Reduce memory leakage +Subject: [PATCH 27/55] Reduce memory leakage We need to clean up the event queue when we're done. @@ -13,10 +13,10 @@ Reviewed-by: David Edmundson 1 file changed, 3 insertions(+) diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp -index 41a44e4b..622ffe41 100644 +index d371ffec..1b9ec699 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -379,6 +379,9 @@ QWaylandDisplay::~QWaylandDisplay(void) +@@ -381,6 +381,9 @@ QWaylandDisplay::~QWaylandDisplay(void) #endif if (mDisplay) wl_display_disconnect(mDisplay); @@ -27,5 +27,5 @@ index 41a44e4b..622ffe41 100644 // Steps which is called just after constructor. This separates registry_global() out of the constructor -- -2.39.0 +2.40.0 diff --git a/0033-Fix-build-with-libcxx-missing-array-include.patch b/0028-Fix-build-with-libcxx-missing-array-include.patch similarity index 87% rename from 0033-Fix-build-with-libcxx-missing-array-include.patch rename to 0028-Fix-build-with-libcxx-missing-array-include.patch index 8808ccc..a731873 100644 --- a/0033-Fix-build-with-libcxx-missing-array-include.patch +++ b/0028-Fix-build-with-libcxx-missing-array-include.patch @@ -1,7 +1,7 @@ -From 5b78d5157803414733133ca22490117a1f1a881b Mon Sep 17 00:00:00 2001 +From d9b04ba05ed479b577579e6a34d97fb906791f69 Mon Sep 17 00:00:00 2001 From: Sam James Date: Sat, 18 Jun 2022 17:11:11 +0100 -Subject: [PATCH 33/57] Fix build with libcxx (missing array include) +Subject: [PATCH 28/55] Fix build with libcxx (missing array include) Bug: https://bugs.gentoo.org/833488 @@ -28,5 +28,5 @@ index 56a710c3..c6a8b6c6 100644 #include -- -2.39.0 +2.40.0 diff --git a/0028-client-update-button-state-and-etc-in-pointer_leave.patch b/0028-client-update-button-state-and-etc-in-pointer_leave.patch deleted file mode 100644 index 5473734..0000000 --- a/0028-client-update-button-state-and-etc-in-pointer_leave.patch +++ /dev/null @@ -1,50 +0,0 @@ -From a947fd6ffe37524e81936c84f264da9c50b009a8 Mon Sep 17 00:00:00 2001 -From: Liang Qi -Date: Wed, 9 Mar 2022 10:47:42 +0100 -Subject: [PATCH 28/57] client: update button state and etc in pointer_leave() - -The cleanup work needs to be done even the surface is null, for -example, a window was closed in mouse press handler, then will not -get a mouse release. - -Fixes: QTBUG-100942 -Pick-to: 5.15 6.2 6.3 -Change-Id: I637a6744909ddbe62bdeba6b21494e5a6ae7fa9f -Reviewed-by: Tang Haixiang -Reviewed-by: David Edmundson -(cherry picked from commit 409d1080f25b653b3ff3f57c9776c5c390912206) ---- - src/client/qwaylandinputdevice.cpp | 10 +++++----- - 1 file changed, 5 insertions(+), 5 deletions(-) - -diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp -index aaec7eb8..c3cc4eca 100644 ---- a/src/client/qwaylandinputdevice.cpp -+++ b/src/client/qwaylandinputdevice.cpp -@@ -685,6 +685,11 @@ public: - - void QWaylandInputDevice::Pointer::pointer_leave(uint32_t time, struct wl_surface *surface) - { -+ invalidateFocus(); -+ mButtons = Qt::NoButton; -+ -+ mParent->mTime = time; -+ - // The event may arrive after destroying the window, indicated by - // a null surface. - if (!surface) -@@ -696,11 +701,6 @@ void QWaylandInputDevice::Pointer::pointer_leave(uint32_t time, struct wl_surfac - - if (!QWaylandWindow::mouseGrab()) - setFrameEvent(new LeaveEvent(window, mSurfacePos, mGlobalPos)); -- -- invalidateFocus(); -- mButtons = Qt::NoButton; -- -- mParent->mTime = time; - } - - class MotionEvent : public QWaylandPointerEvent --- -2.39.0 - diff --git a/0034-Only-close-popup-in-the-the-hierchary.patch b/0029-Only-close-popup-in-the-the-hierchary.patch similarity index 96% rename from 0034-Only-close-popup-in-the-the-hierchary.patch rename to 0029-Only-close-popup-in-the-the-hierchary.patch index 8d382bc..7378cfe 100644 --- a/0034-Only-close-popup-in-the-the-hierchary.patch +++ b/0029-Only-close-popup-in-the-the-hierchary.patch @@ -1,7 +1,7 @@ -From 81ddf70997f62d5f1a02d89048c5ec2d3cd27eaf Mon Sep 17 00:00:00 2001 +From 9265dae0d87eaf2a0dfc8a67c46f6c11bd14d2ab Mon Sep 17 00:00:00 2001 From: Weng Xuetian Date: Wed, 20 Jul 2022 15:57:40 -0700 -Subject: [PATCH 34/57] Only close popup in the the hierchary +Subject: [PATCH 29/55] 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 1952c81e..6923c9a7 100644 +index 264ca59b..9e82c174 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -239,6 +239,7 @@ bool QWaylandWindow::shouldCreateSubSurface() const @@ -81,7 +81,7 @@ index 1952c81e..6923c9a7 100644 reset(); } } -@@ -1290,6 +1273,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea) +@@ -1297,6 +1280,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 11706924..25c0e8c3 100644 +index b7383e19..962001b3 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 @@ -258,10 +258,10 @@ index 11706924..25c0e8c3 100644 auto positioner = new QtWayland::xdg_positioner(m_shell->create_positioner()); // set_popup expects a position relative to the parent QPoint transientPos = m_window->geometry().topLeft(); // this is absolute -@@ -407,8 +414,9 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) - positioner->set_anchor(QtWayland::xdg_positioner::anchor_top_left); - positioner->set_gravity(QtWayland::xdg_positioner::gravity_bottom_right); - positioner->set_size(m_window->geometry().width(), m_window->geometry().height()); +@@ -411,8 +418,9 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) + | QtWayland::xdg_positioner::constraint_adjustment_slide_y + | QtWayland::xdg_positioner::constraint_adjustment_flip_x + | QtWayland::xdg_positioner::constraint_adjustment_flip_y); - m_popup = new Popup(this, parentXdgSurface, positioner); + m_popup = new Popup(this, parent, positioner); positioner->destroy(); @@ -397,5 +397,5 @@ index 73d1eb9c..747875b4 100644 void tst_xdgshell::switchPopups() { -- -2.39.0 +2.40.0 diff --git a/0035-Build-fixes-for-GCC-11.patch b/0030-Build-fixes-for-GCC-11.patch similarity index 87% rename from 0035-Build-fixes-for-GCC-11.patch rename to 0030-Build-fixes-for-GCC-11.patch index 50610ea..28ad68d 100644 --- a/0035-Build-fixes-for-GCC-11.patch +++ b/0030-Build-fixes-for-GCC-11.patch @@ -1,7 +1,7 @@ -From 2b46297649a4a002a046960e571917660927ed31 Mon Sep 17 00:00:00 2001 +From 08ce7a21017e1f9553cd0f4af1316e38709d5553 Mon Sep 17 00:00:00 2001 From: Ville Voutilainen Date: Mon, 18 Jan 2021 12:31:31 +0200 -Subject: [PATCH 35/57] Build fixes for GCC 11 +Subject: [PATCH 30/55] Build fixes for GCC 11 Task-number: QTBUG-89977 Change-Id: I7e3d0964087865e8062f539f851a61f3df017dae @@ -24,5 +24,5 @@ index 5c6c83ba..fa9b7662 100644 namespace MockCompositor { -- -2.39.0 +2.40.0 diff --git a/0036-Check-pointer-for-null-before-use-in-ASSERT.patch b/0031-Check-pointer-for-null-before-use-in-ASSERT.patch similarity index 84% rename from 0036-Check-pointer-for-null-before-use-in-ASSERT.patch rename to 0031-Check-pointer-for-null-before-use-in-ASSERT.patch index 73696ea..c6a4793 100644 --- a/0036-Check-pointer-for-null-before-use-in-ASSERT.patch +++ b/0031-Check-pointer-for-null-before-use-in-ASSERT.patch @@ -1,7 +1,7 @@ -From e043e3770da7ac7dc2e899e4f8f4d23eb8d53161 Mon Sep 17 00:00:00 2001 +From ec0171610350305be51c3e4be7c6f086cb360fe6 Mon Sep 17 00:00:00 2001 From: Roman Genkhel Date: Thu, 12 Nov 2020 12:21:51 +0300 -Subject: [PATCH 36/57] Check pointer for null before use in ASSERT +Subject: [PATCH 31/55] 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 6923c9a7..a4190e16 100644 +index 9e82c174..0a5fc15b 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -536,12 +536,12 @@ void QWaylandWindow::sendRecursiveExposeEvent() @@ -30,5 +30,5 @@ index 6923c9a7..a4190e16 100644 buffer->setBusy(); -- -2.39.0 +2.40.0 diff --git a/0037-Use-wl_surface.damage_buffer-on-the-client-side.patch b/0032-Use-wl_surface.damage_buffer-on-the-client-side.patch similarity index 95% rename from 0037-Use-wl_surface.damage_buffer-on-the-client-side.patch rename to 0032-Use-wl_surface.damage_buffer-on-the-client-side.patch index 8461f05..5f02727 100644 --- a/0037-Use-wl_surface.damage_buffer-on-the-client-side.patch +++ b/0032-Use-wl_surface.damage_buffer-on-the-client-side.patch @@ -1,7 +1,7 @@ -From 604594c3d6734bb7c849edf3810d96eb2fbd0869 Mon Sep 17 00:00:00 2001 +From 2d3d929c86c5aab6dd30e02ade25697d49617335 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 6 Jul 2020 14:37:35 +0200 -Subject: [PATCH 37/57] Use wl_surface.damage_buffer on the client side +Subject: [PATCH 32/55] Use wl_surface.damage_buffer on the client side Prefer the newer, recommended damage_buffer when the compositor supports it. @@ -20,10 +20,10 @@ 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 622ffe41..e8613ed8 100644 +index 1b9ec699..6898a881 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -491,7 +491,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin +@@ -493,7 +493,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin if (interface == QStringLiteral("wl_output")) { mWaitingScreens << new QWaylandScreen(this, version, id); } else if (interface == QStringLiteral("wl_compositor")) { @@ -33,7 +33,7 @@ index 622ffe41..e8613ed8 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 a4190e16..0967c975 100644 +index 0a5fc15b..5b7f9df9 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.39.0 +2.40.0 diff --git a/0038-Client-clear-focus-on-touch-cancel.patch b/0033-Client-clear-focus-on-touch-cancel.patch similarity index 94% rename from 0038-Client-clear-focus-on-touch-cancel.patch rename to 0033-Client-clear-focus-on-touch-cancel.patch index d0715fa..7513b34 100644 --- a/0038-Client-clear-focus-on-touch-cancel.patch +++ b/0033-Client-clear-focus-on-touch-cancel.patch @@ -1,7 +1,7 @@ -From ef75dcf8ec8ea3996aba46ec1fcf63b34421133c Mon Sep 17 00:00:00 2001 +From bdf04e01153aeda2c2bafa059dd21dc377eb82e1 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Fri, 5 Aug 2022 15:00:31 +0100 -Subject: [PATCH 38/57] Client: clear focus on touch cancel +Subject: [PATCH 33/55] Client: clear focus on touch cancel When we get a touch_cancel event all touches should be treated as lifted. @@ -23,10 +23,10 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt 4 files changed, 39 insertions(+) diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp -index c3cc4eca..4b90de84 100644 +index 5d704795..5b880984 100644 --- a/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp -@@ -1388,6 +1388,7 @@ void QWaylandInputDevice::Touch::touch_cancel() +@@ -1392,6 +1392,7 @@ void QWaylandInputDevice::Touch::touch_cancel() if (touchExt) touchExt->touchCanceled(); @@ -112,5 +112,5 @@ index 296dbf47..210d8ddb 100644 Seat *m_seat = nullptr; }; -- -2.39.0 +2.40.0 diff --git a/0039-Guard-mResizeDirty-by-the-correctMutex.patch b/0034-Guard-mResizeDirty-by-the-correctMutex.patch similarity index 88% rename from 0039-Guard-mResizeDirty-by-the-correctMutex.patch rename to 0034-Guard-mResizeDirty-by-the-correctMutex.patch index aee1454..82ee313 100644 --- a/0039-Guard-mResizeDirty-by-the-correctMutex.patch +++ b/0034-Guard-mResizeDirty-by-the-correctMutex.patch @@ -1,7 +1,7 @@ -From 7bc9e2931cc1c81da23e245eafd42252f9cd6e9f Mon Sep 17 00:00:00 2001 +From e920173ee9cef08d10ad8a7e21ae7a5a2c2d7530 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Thu, 3 Feb 2022 19:42:33 +0000 -Subject: [PATCH 39/57] Guard mResizeDirty by the correctMutex +Subject: [PATCH 34/55] 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 0967c975..c6477ec4 100644 +index 5b7f9df9..117e3383 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 0967c975..c6477ec4 100644 } QRect exposeGeometry(QPoint(), geometry().size()); -- -2.39.0 +2.40.0 diff --git a/0040-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch b/0035-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch similarity index 91% rename from 0040-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch rename to 0035-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch index 784daf0..9cfd102 100644 --- a/0040-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch +++ b/0035-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch @@ -1,7 +1,7 @@ -From 4939cb0b313727474e340cf31a8037ede91517d3 Mon Sep 17 00:00:00 2001 +From 1ff4219d8c58f8356d9d12824948013cdfde6ac5 Mon Sep 17 00:00:00 2001 From: Liang Qi Date: Fri, 11 Mar 2022 09:17:25 +0100 -Subject: [PATCH 40/57] client: Synthesize enter/leave event for popup in +Subject: [PATCH 35/55] client: Synthesize enter/leave event for popup in xdg-shell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 @@ -23,7 +23,7 @@ Reviewed-by: Tor Arne Vestbø 1 file changed, 27 insertions(+) diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp -index 25c0e8c3..fa6d5808 100644 +index 962001b3..ead99989 100644 --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp @@ -221,6 +221,16 @@ QWaylandXdgSurface::Popup::~Popup() @@ -43,7 +43,7 @@ index 25c0e8c3..fa6d5808 100644 } } -@@ -438,6 +448,23 @@ void QWaylandXdgSurface::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevic +@@ -442,6 +452,23 @@ void QWaylandXdgSurface::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevic } setPopup(parent); m_popup->grab(device, serial); @@ -68,5 +68,5 @@ index 25c0e8c3..fa6d5808 100644 void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial) -- -2.39.0 +2.40.0 diff --git a/0041-Fix-compile-tests.patch b/0036-Fix-compile-tests.patch similarity index 90% rename from 0041-Fix-compile-tests.patch rename to 0036-Fix-compile-tests.patch index 79b5055..83acc1f 100644 --- a/0041-Fix-compile-tests.patch +++ b/0036-Fix-compile-tests.patch @@ -1,7 +1,7 @@ -From c629110d32e33cf0292fcff4b508e5f31cdc51f0 Mon Sep 17 00:00:00 2001 +From bf6b509011c4086cc7b1a7cfdc78dd50e446b15f Mon Sep 17 00:00:00 2001 From: Albert Astals Cid Date: Fri, 9 Sep 2022 15:37:49 +0200 -Subject: [PATCH 41/57] Fix compile tests +Subject: [PATCH 36/55] Fix compile tests Broken in c618467da4c06528537026e2b78f92265bce446f --- @@ -25,5 +25,5 @@ index b063e0d9..2ea382f1 100644 { auto e = window.m_events.takeFirst(); -- -2.39.0 +2.40.0 diff --git a/0042-Use-CRLF-line-delimiter-for-text-uri-list-data.patch b/0037-Use-CRLF-line-delimiter-for-text-uri-list-data.patch similarity index 91% rename from 0042-Use-CRLF-line-delimiter-for-text-uri-list-data.patch rename to 0037-Use-CRLF-line-delimiter-for-text-uri-list-data.patch index 09e321a..3664c5c 100644 --- a/0042-Use-CRLF-line-delimiter-for-text-uri-list-data.patch +++ b/0037-Use-CRLF-line-delimiter-for-text-uri-list-data.patch @@ -1,7 +1,7 @@ -From 8f16be8260f181df34ef69cea784bd92e480e1ad Mon Sep 17 00:00:00 2001 +From 137958eec28cb8209069f9a3a3ab778202773ff6 Mon Sep 17 00:00:00 2001 From: Alexandros Frantzis Date: Wed, 11 May 2022 17:12:52 +0300 -Subject: [PATCH 42/57] Use CRLF line delimiter for text/uri-list data +Subject: [PATCH 37/55] 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 @@ -36,5 +36,5 @@ index 051a91dc..e2fe1928 100644 } else { content = mimeData->data(mimeType); -- -2.39.0 +2.40.0 diff --git a/0044-Avoid-calling-requestUpdate-from-wrong-thread.patch b/0038-Avoid-calling-requestUpdate-from-wrong-thread.patch similarity index 90% rename from 0044-Avoid-calling-requestUpdate-from-wrong-thread.patch rename to 0038-Avoid-calling-requestUpdate-from-wrong-thread.patch index 5143ff0..dc29759 100644 --- a/0044-Avoid-calling-requestUpdate-from-wrong-thread.patch +++ b/0038-Avoid-calling-requestUpdate-from-wrong-thread.patch @@ -1,7 +1,7 @@ -From a20047ef5387673471af835cd3fba7e23585bc75 Mon Sep 17 00:00:00 2001 +From 0064749af275016ae3b4b09964d8d31d756d3468 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 8 Aug 2022 12:14:01 +0200 -Subject: [PATCH 44/57] Avoid calling requestUpdate from wrong thread +Subject: [PATCH 38/55] Avoid calling requestUpdate from wrong thread In certain circumstances, we can get to createDecoration() from the render thread (from QWaylandGLContext::makeCurrent) @@ -22,7 +22,7 @@ Reviewed-by: Inho Lee 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index cb610510..771c96cc 100644 +index 117e3383..4ddf9fbe 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -873,7 +873,11 @@ bool QWaylandWindow::createDecoration() @@ -39,5 +39,5 @@ index cb610510..771c96cc 100644 return mWindowDecoration; -- -2.39.0 +2.40.0 diff --git a/0046-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch b/0039-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch similarity index 90% rename from 0046-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch rename to 0039-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch index 9515644..777e40d 100644 --- a/0046-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch +++ b/0039-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch @@ -1,7 +1,7 @@ -From 38c84c26f3b14d49ef26416049115545e7627514 Mon Sep 17 00:00:00 2001 +From 35c03e72007630040659188b2bc7f47b1df82577 Mon Sep 17 00:00:00 2001 From: Fushan Wen Date: Sun, 18 Sep 2022 18:17:18 +0800 -Subject: [PATCH 46/57] Call `finishDrag()` in +Subject: [PATCH 39/55] Call `finishDrag()` in `QWaylandDataDevice::dragSourceCancelled()` Drags can either get finished or cancelled. If a drag is finished @@ -34,5 +34,5 @@ index fbb5aa91..e3e60ed5 100644 } -- -2.39.0 +2.40.0 diff --git a/0047-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch b/0040-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch similarity index 91% rename from 0047-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch rename to 0040-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch index 0cd1026..bb0cfdc 100644 --- a/0047-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch +++ b/0040-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch @@ -1,7 +1,7 @@ -From 1ec6327d2e376e76a35cd36cd7d0ed9ddd4294ce Mon Sep 17 00:00:00 2001 +From 37ad4aeaa6dce748f5f6bcc5030be187e6320ec0 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 12 Sep 2022 13:28:08 +0100 -Subject: [PATCH 47/57] Hold surface read lock throughout +Subject: [PATCH 40/55] 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 201b583b..64140672 100644 +index 13dd747a..872a6237 100644 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp @@ -40,6 +40,7 @@ @@ -61,7 +61,7 @@ index 201b583b..64140672 100644 #include "qwaylandglcontext.h" #include -@@ -124,6 +125,7 @@ void QWaylandEglWindow::updateSurface(bool create) +@@ -115,6 +116,7 @@ void QWaylandEglWindow::updateSurface(bool create) } mOffset = QPoint(); } else { @@ -69,7 +69,7 @@ index 201b583b..64140672 100644 if (m_waylandEglWindow) { int current_width, current_height; static bool disableResizeCheck = qgetenv("QT_WAYLAND_DISABLE_RESIZECHECK").toInt(); -@@ -138,8 +140,8 @@ void QWaylandEglWindow::updateSurface(bool create) +@@ -129,8 +131,8 @@ void QWaylandEglWindow::updateSurface(bool create) m_resize = true; } @@ -81,5 +81,5 @@ index 201b583b..64140672 100644 } -- -2.39.0 +2.40.0 diff --git a/0048-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch b/0041-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch similarity index 95% rename from 0048-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch rename to 0041-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch index 6bb90dc..95aa134 100644 --- a/0048-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch +++ b/0041-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch @@ -1,7 +1,7 @@ -From b965ae977891221ad6b02d8994352b263e14d2ee Mon Sep 17 00:00:00 2001 +From 1012f1d4b5753ad63da3cca1226fb034e297ae6d Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 8 Nov 2022 16:10:18 +0200 -Subject: [PATCH 48/57] Client: Ensure that wl_surface lives as long as qtquick +Subject: [PATCH 41/55] Client: Ensure that wl_surface lives as long as qtquick render thread needs it wl_surface can be destroyed while qtquick render thread still uses it. @@ -18,7 +18,7 @@ Change-Id: I044f40dd64e6672027a833379b57ccd9973d8305 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 771c96cc..5b97cd55 100644 +index 4ddf9fbe..1f2d56b5 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -76,6 +76,7 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr; @@ -105,5 +105,5 @@ index c1f45fa6..5d6fb2bf 100644 GLuint QWaylandGLContext::defaultFramebufferObject(QPlatformSurface *surface) const -- -2.39.0 +2.40.0 diff --git a/0049-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch b/0042-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch similarity index 95% rename from 0049-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch rename to 0042-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch index c1337d6..cc97967 100644 --- a/0049-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch +++ b/0042-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch @@ -1,7 +1,7 @@ -From 9146c96b84392df39d2962c3b8bcf25bbcf93ff5 Mon Sep 17 00:00:00 2001 +From 61fccee064cd8cea698a530c76113f8487d11d68 Mon Sep 17 00:00:00 2001 From: David Redondo Date: Wed, 8 Jun 2022 11:25:59 +0200 -Subject: [PATCH 49/57] Keep toplevel windows in the top left corner of the +Subject: [PATCH 42/55] 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 5b97cd55..01cbbf39 100644 +index 1f2d56b5..d3459168 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -361,8 +361,13 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect) @@ -86,5 +86,5 @@ index e18609d9..a8ee2696 100644 virtual void ensureSize(); WId winId() const override; -- -2.39.0 +2.40.0 diff --git a/0043-Fix-missing-update-when-toggling-client-side-decorat.patch b/0043-Fix-missing-update-when-toggling-client-side-decorat.patch deleted file mode 100644 index 2fe3017..0000000 --- a/0043-Fix-missing-update-when-toggling-client-side-decorat.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 2d37a9d3700578154275661a51ccf1b895f05260 Mon Sep 17 00:00:00 2001 -From: Eskil Abrahamsen Blomfeldt -Date: Tue, 9 Nov 2021 13:23:41 +0100 -Subject: [PATCH 43/57] Fix missing update when toggling client-side - decorations - -When CSD is toggled while a window is showing, it would change the -size and recreate the buffers, but since the widget area remained -the same size, we would not trigger a redraw. The result was that -when you got any update to the window, it would redraw the widgets -that had changed, and the rest would be transparent. - -Since this is a fairly specialized case, we fix it the simple way, -by just issuing an extra update when it happens. - -This also required an update to the surface test, since there is -an additional buffer commit in the beginning of the sequence now. - -Pick-to: 5.15 6.2 6.3 -Fixes: QTBUG-95032 -Change-Id: Ic4bdb9c66a2ea76546926dd622f2d2dac5dce10c -Reviewed-by: Qt CI Bot -Reviewed-by: Liang Qi -(cherry picked from commit af7b60ade5c4be81cbc58eb18307c017d5594071) ---- - src/client/qwaylandwindow.cpp | 7 +++++++ - tests/auto/client/surface/tst_surface.cpp | 4 ++++ - 2 files changed, 11 insertions(+) - -diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index c6477ec4..cb610510 100644 ---- a/src/client/qwaylandwindow.cpp -+++ b/src/client/qwaylandwindow.cpp -@@ -867,6 +867,13 @@ bool QWaylandWindow::createDecoration() - subsurf->set_position(pos.x() + m.left(), pos.y() + m.top()); - } - sendExposeEvent(QRect(QPoint(), geometry().size())); -+ -+ // This is a special case where the buffer is recreated, but since -+ // the content rect remains the same, the widgets remain the same -+ // 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(); - } - - return mWindowDecoration; -diff --git a/tests/auto/client/surface/tst_surface.cpp b/tests/auto/client/surface/tst_surface.cpp -index 95e4e609..60c672ce 100644 ---- a/tests/auto/client/surface/tst_surface.cpp -+++ b/tests/auto/client/surface/tst_surface.cpp -@@ -129,6 +129,10 @@ void tst_surface::waitForFrameCallbackGl() - // Make sure we follow frame callbacks for some frames - for (int i = 0; i < 5; ++i) { - xdgPingAndWaitForPong(); // Make sure things have happened on the client -+ if (!qEnvironmentVariableIntValue("QT_WAYLAND_DISABLE_WINDOWDECORATION") && i == 0) { -+ QCOMPARE(bufferSpy.count(), 1); -+ bufferSpy.removeFirst(); -+ } - exec([&] { - QVERIFY(bufferSpy.empty()); // Make sure no extra buffers have arrived - QVERIFY(!xdgToplevel()->surface()->m_waitingFrameCallbacks.empty()); --- -2.39.0 - diff --git a/0050-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch b/0043-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch similarity index 95% rename from 0050-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch rename to 0043-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch index 9dc27a4..ffe2322 100644 --- a/0050-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch +++ b/0043-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch @@ -1,7 +1,7 @@ -From 7f04725f5121bc0b05ad2289a1fef362aaa48b2f Mon Sep 17 00:00:00 2001 +From 3813da4b6d88320b42a7d91ae100e1567113ee72 Mon Sep 17 00:00:00 2001 From: David Edmundson Date: Mon, 14 Nov 2022 10:43:25 +0000 -Subject: [PATCH 50/57] Revert "Client: Ensure that wl_surface lives as long as +Subject: [PATCH 43/55] Revert "Client: Ensure that wl_surface lives as long as qtquick render thread needs it" This reverts commit 81a7702a87f386a60a0ac8c902e203daae044d81 @@ -12,7 +12,7 @@ This reverts commit 81a7702a87f386a60a0ac8c902e203daae044d81 3 files changed, 2 insertions(+), 20 deletions(-) diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp -index 01cbbf39..d4083121 100644 +index d3459168..f322a8d6 100644 --- a/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp @@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr; @@ -99,5 +99,5 @@ index 5d6fb2bf..c1f45fa6 100644 GLuint QWaylandGLContext::defaultFramebufferObject(QPlatformSurface *surface) const -- -2.39.0 +2.40.0 diff --git a/0051-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch b/0044-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch similarity index 92% rename from 0051-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch rename to 0044-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch index 45c4571..2f9ec44 100644 --- a/0051-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch +++ b/0044-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch @@ -1,7 +1,7 @@ -From ee6465749449f83f4d0028ff7988ca0c77b3506d Mon Sep 17 00:00:00 2001 +From dd605d5fec6921a7befbfe2c40c2ae87935aa9c4 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Thu, 17 Nov 2022 15:25:37 +0200 -Subject: [PATCH 51/57] Client: Add F_SEAL_SHRINK seal to shm backing file +Subject: [PATCH 44/55] 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.39.0 +2.40.0 diff --git a/0052-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch b/0045-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch similarity index 87% rename from 0052-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch rename to 0045-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch index 5f782bf..3d44293 100644 --- a/0052-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch +++ b/0045-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch @@ -1,7 +1,7 @@ -From 4c56a6d18da10b42a5e01d31b3d636cfd551a767 Mon Sep 17 00:00:00 2001 +From dea12f0bb5729de6c1a31b03b7e79710baf96b63 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Mon, 21 Nov 2022 18:39:40 +0200 -Subject: [PATCH 52/57] Client: Call wl_output_release() upon QWaylandScreen +Subject: [PATCH 45/55] 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.39.0 +2.40.0 diff --git a/0045-Client-support-high-dpi-mode-for-window-icon.patch b/0045-Client-support-high-dpi-mode-for-window-icon.patch deleted file mode 100644 index 04979a1..0000000 --- a/0045-Client-support-high-dpi-mode-for-window-icon.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 1c4a808a3e81aa498da00b88d1ada8b40465d0f8 Mon Sep 17 00:00:00 2001 -From: Liang Qi -Date: Mon, 13 Dec 2021 13:01:59 +0100 -Subject: [PATCH 45/57] Client: support high-dpi mode for window icon -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Fixes: QTBUG-90530 -Pick-to: 6.3 6.2 5.15 -Change-Id: Ib1f36e1cb89352dfac8a385a7b097cfc0226e813 -Reviewed-by: David Edmundson -Reviewed-by: Tor Arne Vestbø -(cherry picked from commit fc91cd6b1306c6d452cbddab3c2289ccb92218d6) ---- - src/plugins/decorations/bradient/main.cpp | 9 +++------ - 1 file changed, 3 insertions(+), 6 deletions(-) - -diff --git a/src/plugins/decorations/bradient/main.cpp b/src/plugins/decorations/bradient/main.cpp -index e75fda3c..fa885143 100644 ---- a/src/plugins/decorations/bradient/main.cpp -+++ b/src/plugins/decorations/bradient/main.cpp -@@ -164,13 +164,10 @@ void QWaylandBradientDecoration::paint(QPaintDevice *device) - // Window icon - QIcon icon = waylandWindow()->windowIcon(); - if (!icon.isNull()) { -- QPixmap pixmap = icon.pixmap(QSize(128, 128)); -- QPixmap scaled = pixmap.scaled(22, 22, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); -- - QRectF iconRect(0, 0, 22, 22); -- p.drawPixmap(iconRect.adjusted(margins().left() + BUTTON_SPACING, 4, -- margins().left() + BUTTON_SPACING, 4), -- scaled, iconRect); -+ iconRect.adjust(margins().left() + BUTTON_SPACING, 4, -+ margins().left() + BUTTON_SPACING, 4), -+ icon.paint(&p, iconRect.toRect()); - } - - // Window title --- -2.39.0 - diff --git a/0053-Client-Bump-wl_output-version.patch b/0046-Client-Bump-wl_output-version.patch similarity index 89% rename from 0053-Client-Bump-wl_output-version.patch rename to 0046-Client-Bump-wl_output-version.patch index 2538c3e..29740c9 100644 --- a/0053-Client-Bump-wl_output-version.patch +++ b/0046-Client-Bump-wl_output-version.patch @@ -1,7 +1,7 @@ -From 66110372de281b85acff08acd68d127163c7d83e Mon Sep 17 00:00:00 2001 +From 8071f24324ffa8c556068816e009a5887e1a6ddd Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 22 Nov 2022 12:33:41 +0200 -Subject: [PATCH 53/57] Client: Bump wl_output version +Subject: [PATCH 46/55] 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.39.0 +2.40.0 diff --git a/0054-Fix-frame-sync-related-to-unprotected-multithread-ac.patch b/0047-Fix-frame-sync-related-to-unprotected-multithread-ac.patch similarity index 97% rename from 0054-Fix-frame-sync-related-to-unprotected-multithread-ac.patch rename to 0047-Fix-frame-sync-related-to-unprotected-multithread-ac.patch index b3dde4c..723d07c 100644 --- a/0054-Fix-frame-sync-related-to-unprotected-multithread-ac.patch +++ b/0047-Fix-frame-sync-related-to-unprotected-multithread-ac.patch @@ -1,7 +1,7 @@ -From 776598deb927c259cd2f4d95cfd72677478ecf59 Mon Sep 17 00:00:00 2001 +From ef5b1f40b684927f73bc04ab84c396be074cb61e Mon Sep 17 00:00:00 2001 From: Weng Xuetian Date: Sun, 27 Nov 2022 12:44:40 -0800 -Subject: [PATCH 54/57] Fix frame sync related to unprotected multithread +Subject: [PATCH 47/55] 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 d4083121..fb2c59dc 100644 +index f322a8d6..6337db00 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.39.0 +2.40.0 diff --git a/0055-Client-Handle-zwp_primary_selection_device_manager_v.patch b/0048-Client-Handle-zwp_primary_selection_device_manager_v.patch similarity index 90% rename from 0055-Client-Handle-zwp_primary_selection_device_manager_v.patch rename to 0048-Client-Handle-zwp_primary_selection_device_manager_v.patch index 08efb25..727159b 100644 --- a/0055-Client-Handle-zwp_primary_selection_device_manager_v.patch +++ b/0048-Client-Handle-zwp_primary_selection_device_manager_v.patch @@ -1,7 +1,7 @@ -From d0e8f938567f841a779d7365b8b5037037045fc5 Mon Sep 17 00:00:00 2001 +From 21e354e7b1878a243d29466b19084083df3d0db9 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii Date: Tue, 27 Sep 2022 22:05:07 +0300 -Subject: [PATCH 55/57] Client: Handle zwp_primary_selection_device_manager_v1 +Subject: [PATCH 48/55] Client: Handle zwp_primary_selection_device_manager_v1 global removal The zwp_primary_selection_device_manager_v1 global can be withdrawn if @@ -19,10 +19,10 @@ 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 e8613ed8..c01e238b 100644 +index 6898a881..27f55965 100644 --- a/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp -@@ -515,6 +515,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin +@@ -519,6 +519,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin #if QT_CONFIG(wayland_client_primary_selection) } else if (interface == QStringLiteral("zwp_primary_selection_device_manager_v1")) { mPrimarySelectionManager.reset(new QWaylandPrimarySelectionDeviceManagerV1(this, id, 1)); @@ -31,7 +31,7 @@ index e8613ed8..c01e238b 100644 #endif } else if (interface == QStringLiteral("zwp_text_input_manager_v2") && !mClientSideInputContextRequested) { mTextInputManager.reset(new QtWayland::zwp_text_input_manager_v2(registry, id, 1)); -@@ -573,6 +575,13 @@ void QWaylandDisplay::registry_global_remove(uint32_t id) +@@ -577,6 +579,13 @@ void QWaylandDisplay::registry_global_remove(uint32_t id) inputDevice->setTextInput(nullptr); mWaylandIntegration->reconfigureInputContext(); } @@ -62,5 +62,5 @@ index 832f9678..ea508771 100644 QWaylandPrimarySelectionDeviceV1 *QWaylandPrimarySelectionDeviceManagerV1::createDevice(QWaylandInputDevice *seat) -- -2.39.0 +2.40.0 diff --git a/0056-Fixes-the-build-on-CentOS.patch b/0049-Fixes-the-build-on-CentOS.patch similarity index 87% rename from 0056-Fixes-the-build-on-CentOS.patch rename to 0049-Fixes-the-build-on-CentOS.patch index cd1f369..0d15bba 100644 --- a/0056-Fixes-the-build-on-CentOS.patch +++ b/0049-Fixes-the-build-on-CentOS.patch @@ -1,7 +1,7 @@ -From 2904e1b3c3004153b49c4dabfec04cc1ff5e3284 Mon Sep 17 00:00:00 2001 +From c12b0ed6db709e2af40ab3687d880aff5c56b5c1 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Mon, 19 Dec 2022 15:31:03 +0100 -Subject: [PATCH 56/57] Fixes the build on CentOS +Subject: [PATCH 49/55] 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.39.0 +2.40.0 diff --git a/0057-client-Avoid-protocol-error-with-invalid-min-max-siz.patch b/0050-client-Avoid-protocol-error-with-invalid-min-max-siz.patch similarity index 93% rename from 0057-client-Avoid-protocol-error-with-invalid-min-max-siz.patch rename to 0050-client-Avoid-protocol-error-with-invalid-min-max-siz.patch index 941d514..de04d80 100644 --- a/0057-client-Avoid-protocol-error-with-invalid-min-max-siz.patch +++ b/0050-client-Avoid-protocol-error-with-invalid-min-max-siz.patch @@ -1,7 +1,7 @@ -From f6a1e838e371dc90272c62daeea597fe487dec3e Mon Sep 17 00:00:00 2001 +From d04d4c7fe2e00285e7d70da42094f213e13c6ed8 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Mon, 23 May 2022 09:47:24 +0200 -Subject: [PATCH 57/57] client: Avoid protocol error with invalid min/max size +Subject: [PATCH 50/55] 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 fa6d5808..67342b0c 100644 +index ead99989..ad666129 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 fa6d5808..67342b0c 100644 maxHeight = 0; m_toplevel->set_max_size(maxWidth, maxHeight); -- -2.39.0 +2.40.0 diff --git a/0051-Client-Fix-handling-of-Qt-BlankCursor.patch b/0051-Client-Fix-handling-of-Qt-BlankCursor.patch new file mode 100644 index 0000000..de310e5 --- /dev/null +++ b/0051-Client-Fix-handling-of-Qt-BlankCursor.patch @@ -0,0 +1,38 @@ +From fbb9d65cf158bcf63440e9839acae9238ad4e0a7 Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Tue, 22 Nov 2022 23:27:34 +0200 +Subject: [PATCH 51/55] 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 +wl_pointer.set_cursor won't be called. + +On the other hand, wl_pointer.set_cursor must be always called when +wl_pointer.enter is received. + +Pick-to: 6.5 +Change-Id: I8540e7a02df1579b3380a1a1d4cfab42c1ab3104 +Reviewed-by: David Edmundson +Reviewed-by: Qt CI Bot +(cherry picked from commit e954853f0e68d78ac1a98bc3533713881496064c) +--- + src/client/qwaylandinputdevice.cpp | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp +index 5b880984..9a0fe49d 100644 +--- a/src/client/qwaylandinputdevice.cpp ++++ b/src/client/qwaylandinputdevice.cpp +@@ -310,8 +310,7 @@ void QWaylandInputDevice::Pointer::updateCursor() + auto shape = seat()->mCursor.shape; + + if (shape == Qt::BlankCursor) { +- if (mCursor.surface) +- mCursor.surface->hide(); ++ getOrCreateCursorSurface()->hide(); + return; + } + +-- +2.40.0 + diff --git a/0052-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch b/0052-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch new file mode 100644 index 0000000..28e517b --- /dev/null +++ b/0052-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch @@ -0,0 +1,117 @@ +From 6897f62f603df049135347cf402a7a4037092263 Mon Sep 17 00:00:00 2001 +From: Marco Martin +Date: Fri, 24 Feb 2023 17:40:48 +0100 +Subject: [PATCH 52/55] client: Force a roundtrip when an XdgOutput is not + ready yet + +Is possible that the server sends a surface_enter before +all the information of the XdgOutput have been processed by the client. +in this case the associated QScreen doesn't exist yet, causing a +QWindow::SetScreen(nullptr), which will fall back to +QGuiApplication::primaryScreen(), having the QWindow being assigned the +wrong screen + +Change-Id: I923d5d3a35484deafa6f0572f79c16c27b1f87f0 +Reviewed-by: David Edmundson +--- + src/client/qwaylandwindow.cpp | 2 ++ + tests/auto/client/shared/coreprotocol.cpp | 2 ++ + tests/auto/client/shared/coreprotocol.h | 3 ++ + tests/auto/client/xdgoutput/tst_xdgoutput.cpp | 35 +++++++++++++++++++ + 4 files changed, 42 insertions(+) + +diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp +index 6337db00..3b700002 100644 +--- a/src/client/qwaylandwindow.cpp ++++ b/src/client/qwaylandwindow.cpp +@@ -1042,6 +1042,8 @@ void QWaylandWindow::handleScreensChanged() + if (newScreen == mLastReportedScreen) + return; + ++ if (!newScreen->isPlaceholder() && !newScreen->QPlatformScreen::screen()) ++ mDisplay->forceRoundTrip(); + QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen()); + mLastReportedScreen = newScreen; + if (fixedToplevelPositions && !QPlatformWindow::parent() && window()->type() != Qt::Popup +diff --git a/tests/auto/client/shared/coreprotocol.cpp b/tests/auto/client/shared/coreprotocol.cpp +index d1a2e7cb..53e12291 100644 +--- a/tests/auto/client/shared/coreprotocol.cpp ++++ b/tests/auto/client/shared/coreprotocol.cpp +@@ -185,6 +185,8 @@ void Output::output_bind_resource(QtWaylandServer::wl_output::Resource *resource + + if (m_version >= WL_OUTPUT_DONE_SINCE_VERSION) + wl_output::send_done(resource->handle); ++ ++ Q_EMIT outputBound(resource); + } + + // Seat stuff +diff --git a/tests/auto/client/shared/coreprotocol.h b/tests/auto/client/shared/coreprotocol.h +index 210d8ddb..00c439e1 100644 +--- a/tests/auto/client/shared/coreprotocol.h ++++ b/tests/auto/client/shared/coreprotocol.h +@@ -273,6 +273,9 @@ public: + OutputData m_data; + int m_version = 1; // TODO: remove on libwayland upgrade + ++Q_SIGNALS: ++ void outputBound(Resource *resource); ++ + protected: + void output_bind_resource(Resource *resource) override; + }; +diff --git a/tests/auto/client/xdgoutput/tst_xdgoutput.cpp b/tests/auto/client/xdgoutput/tst_xdgoutput.cpp +index 80429608..68e8d77a 100644 +--- a/tests/auto/client/xdgoutput/tst_xdgoutput.cpp ++++ b/tests/auto/client/xdgoutput/tst_xdgoutput.cpp +@@ -55,6 +55,7 @@ private slots: + void primaryScreen(); + void overrideGeometry(); + void changeGeometry(); ++ void outputCreateEnterRace(); + }; + + void tst_xdgoutput::cleanup() +@@ -134,5 +135,39 @@ void tst_xdgoutput::changeGeometry() + exec([=] { remove(output(1)); }); + } + ++void tst_xdgoutput::outputCreateEnterRace() ++{ ++ m_config.autoConfigure = true; ++ m_config.autoEnter = false; ++ QRasterWindow window; ++ QSignalSpy screenChanged(&window, &QWindow::screenChanged); ++ window.resize(400, 320); ++ window.show(); ++ QCOMPOSITOR_TRY_VERIFY(xdgSurface() && xdgSurface()->m_committedConfigureSerial); ++ exec([=] { xdgToplevel()->surface()->sendEnter(output(0));}); ++ ++ QTRY_COMPARE(QGuiApplication::screens().size(), 1); ++ QScreen *primaryScreen = QGuiApplication::screens().first(); ++ QCOMPARE(window.screen(), primaryScreen); ++ ++ auto *out = exec([=] { ++ return add(); ++ }); ++ ++ // In Compositor Thread ++ connect(out, &Output::outputBound, this, [this](QtWaylandServer::wl_output::Resource *resource){ ++ auto surface = xdgToplevel()->surface(); ++ surface->sendLeave(output(0)); ++ surface->QtWaylandServer::wl_surface::send_enter(surface->resource()->handle, resource->handle); ++ }, Qt::DirectConnection); ++ ++ QTRY_COMPARE(QGuiApplication::screens().size(), 2); ++ QTRY_COMPARE(window.screen(), QGuiApplication::screens()[1]); ++ ++ exec([=] { remove(out); }); ++ m_config.autoConfigure = false; ++ m_config.autoEnter = true; ++} ++ + QCOMPOSITOR_TEST_MAIN(tst_xdgoutput) + #include "tst_xdgoutput.moc" +-- +2.40.0 + diff --git a/0053-Client-Manage-QMimeData-lifecycle.patch b/0053-Client-Manage-QMimeData-lifecycle.patch new file mode 100644 index 0000000..4941d36 --- /dev/null +++ b/0053-Client-Manage-QMimeData-lifecycle.patch @@ -0,0 +1,138 @@ +From 31eab11d3b6697a76cc7802d02e525c1152a42c2 Mon Sep 17 00:00:00 2001 +From: Tang Haixiang +Date: Thu, 22 Dec 2022 15:19:53 +0800 +Subject: [PATCH 53/55] Client: Manage QMimeData lifecycle + +QMimeData is created by user, it is not taken care of in qtwayland, +which will cause memory leak. + +It is now handled in qtwayland that when a new QMimeData is set, +the previous QMimeData is freed. + +Change-Id: Ic502021fe700c7ee10454d94f0d1868901809af7 +Reviewed-by: David Edmundson +Reviewed-by: Qt CI Bot +(cherry picked from commit 3af40c6c42703a65656fdd3322183abb2905e44d) +--- + src/client/qwaylandclipboard.cpp | 27 +++++++++++++++++++++------ + src/client/qwaylandclipboard_p.h | 1 + + src/client/qwaylanddatasource.cpp | 5 ----- + src/client/qwaylanddatasource_p.h | 2 -- + 4 files changed, 22 insertions(+), 13 deletions(-) + +diff --git a/src/client/qwaylandclipboard.cpp b/src/client/qwaylandclipboard.cpp +index 81f48e05..14561c77 100644 +--- a/src/client/qwaylandclipboard.cpp ++++ b/src/client/qwaylandclipboard.cpp +@@ -54,10 +54,15 @@ namespace QtWaylandClient { + QWaylandClipboard::QWaylandClipboard(QWaylandDisplay *display) + : mDisplay(display) + { ++ m_clientClipboard[QClipboard::Clipboard] = nullptr; ++ m_clientClipboard[QClipboard::Selection] = nullptr; + } + + QWaylandClipboard::~QWaylandClipboard() + { ++ if (m_clientClipboard[QClipboard::Clipboard] != m_clientClipboard[QClipboard::Selection]) ++ delete m_clientClipboard[QClipboard::Clipboard]; ++ delete m_clientClipboard[QClipboard::Selection]; + } + + QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode) +@@ -69,8 +74,8 @@ QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode) + switch (mode) { + case QClipboard::Clipboard: + if (auto *dataDevice = seat->dataDevice()) { +- if (auto *source = dataDevice->selectionSource()) +- return source->mimeData(); ++ if (dataDevice->selectionSource()) ++ return m_clientClipboard[QClipboard::Clipboard]; + if (auto *offer = dataDevice->selectionOffer()) + return offer->mimeData(); + } +@@ -78,8 +83,8 @@ QMimeData *QWaylandClipboard::mimeData(QClipboard::Mode mode) + case QClipboard::Selection: + #if QT_CONFIG(wayland_client_primary_selection) + if (auto *selectionDevice = seat->primarySelectionDevice()) { +- if (auto *source = selectionDevice->selectionSource()) +- return source->mimeData(); ++ if (selectionDevice->selectionSource()) ++ return m_clientClipboard[QClipboard::Selection]; + if (auto *offer = selectionDevice->selectionOffer()) + return offer->mimeData(); + } +@@ -104,17 +109,27 @@ void QWaylandClipboard::setMimeData(QMimeData *data, QClipboard::Mode mode) + if (data && data->hasFormat(plain) && !data->hasFormat(utf8)) + data->setData(utf8, data->data(plain)); + ++ if (m_clientClipboard[mode]) { ++ if (m_clientClipboard[QClipboard::Clipboard] != m_clientClipboard[QClipboard::Selection]) ++ delete m_clientClipboard[mode]; ++ m_clientClipboard[mode] = nullptr; ++ } ++ ++ m_clientClipboard[mode] = data; ++ + switch (mode) { + case QClipboard::Clipboard: + if (auto *dataDevice = seat->dataDevice()) { +- dataDevice->setSelectionSource(data ? new QWaylandDataSource(mDisplay->dndSelectionHandler(), data) : nullptr); ++ dataDevice->setSelectionSource(data ? new QWaylandDataSource(mDisplay->dndSelectionHandler(), ++ m_clientClipboard[QClipboard::Clipboard]) : nullptr); + emitChanged(mode); + } + break; + case QClipboard::Selection: + #if QT_CONFIG(wayland_client_primary_selection) + if (auto *selectionDevice = seat->primarySelectionDevice()) { +- selectionDevice->setSelectionSource(data ? new QWaylandPrimarySelectionSourceV1(mDisplay->primarySelectionManager(), data) : nullptr); ++ selectionDevice->setSelectionSource(data ? new QWaylandPrimarySelectionSourceV1(mDisplay->primarySelectionManager(), ++ m_clientClipboard[QClipboard::Selection]) : nullptr); + emitChanged(mode); + } + #endif +diff --git a/src/client/qwaylandclipboard_p.h b/src/client/qwaylandclipboard_p.h +index ce14e124..bb52683d 100644 +--- a/src/client/qwaylandclipboard_p.h ++++ b/src/client/qwaylandclipboard_p.h +@@ -80,6 +80,7 @@ public: + private: + QWaylandDisplay *mDisplay = nullptr; + QMimeData m_emptyData; ++ QMimeData *m_clientClipboard[2]; + }; + + } +diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp +index 5599cbd4..e085152c 100644 +--- a/src/client/qwaylanddatasource.cpp ++++ b/src/client/qwaylanddatasource.cpp +@@ -71,11 +71,6 @@ QWaylandDataSource::~QWaylandDataSource() + destroy(); + } + +-QMimeData * QWaylandDataSource::mimeData() const +-{ +- return m_mime_data; +-} +- + void QWaylandDataSource::data_source_cancelled() + { + Q_EMIT cancelled(); +diff --git a/src/client/qwaylanddatasource_p.h b/src/client/qwaylanddatasource_p.h +index 96f07bc3..14d1542d 100644 +--- a/src/client/qwaylanddatasource_p.h ++++ b/src/client/qwaylanddatasource_p.h +@@ -74,8 +74,6 @@ public: + QWaylandDataSource(QWaylandDataDeviceManager *dataDeviceManager, QMimeData *mimeData); + ~QWaylandDataSource() override; + +- QMimeData *mimeData() const; +- + Q_SIGNALS: + void cancelled(); + void finished(); +-- +2.40.0 + diff --git a/0054-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch b/0054-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch new file mode 100644 index 0000000..2d7ba8a --- /dev/null +++ b/0054-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch @@ -0,0 +1,34 @@ +From 18c2bcec31f68aafd66d7ec503ec6511ca804d07 Mon Sep 17 00:00:00 2001 +From: Aleix Pol +Date: Mon, 6 Mar 2023 01:11:45 +0100 +Subject: [PATCH 54/55] 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 +is a placeholder first. + +Pick-to: 5.15 6.2 6.5 +Change-Id: I45d3c423422ae6638a033fb0f4cfefc7cd4460f0 +Reviewed-by: Eskil Abrahamsen Blomfeldt +Reviewed-by: David Edmundson +(cherry picked from commit a53f022393a1276dbf8eccbae04cb0bd6cea0160) +--- + src/client/qwaylandnativeinterface.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/client/qwaylandnativeinterface.cpp b/src/client/qwaylandnativeinterface.cpp +index bf54a1a0..9763c312 100644 +--- a/src/client/qwaylandnativeinterface.cpp ++++ b/src/client/qwaylandnativeinterface.cpp +@@ -139,7 +139,7 @@ void *QWaylandNativeInterface::nativeResourceForScreen(const QByteArray &resourc + { + QByteArray lowerCaseResource = resourceString.toLower(); + +- if (lowerCaseResource == "output") ++ if (lowerCaseResource == "output" && !screen->handle()->isPlaceholder()) + return ((QWaylandScreen *) screen->handle())->output(); + + return nullptr; +-- +2.40.0 + diff --git a/0055-Client-Remove-flip-popup-constraints.patch b/0055-Client-Remove-flip-popup-constraints.patch new file mode 100644 index 0000000..a51fad7 --- /dev/null +++ b/0055-Client-Remove-flip-popup-constraints.patch @@ -0,0 +1,41 @@ +From c4c3fc69250c01cb35aaae5ea1ea2bcc8236dff0 Mon Sep 17 00:00:00 2001 +From: Vlad Zahorodnii +Date: Thu, 12 Jan 2023 14:49:25 +0200 +Subject: [PATCH 55/55] 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 +I see that some popups are flipped in such a way that the popups look +"detached" from the parent window. + +With the information that QtWayland provides so far only slide +constraint adjustments can produce somewhat expected results. Although +there will be still some issues near screen edges. + +Pick-to: 6.5 6.4 6.2 5.15 +Task-number: QTBUG-87303 +Change-Id: I4021f497b78e62651fe606c4be21a387a92edd6c +Reviewed-by: Liang Qi +(cherry picked from commit d7a5dab0182cba19d7f59e542672aa3d1b2e859e) +--- + src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | 4 +--- + 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 +--- 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) + positioner->set_gravity(QtWayland::xdg_positioner::gravity_bottom_right); + positioner->set_size(m_window->geometry().width(), m_window->geometry().height()); + positioner->set_constraint_adjustment(QtWayland::xdg_positioner::constraint_adjustment_slide_x +- | QtWayland::xdg_positioner::constraint_adjustment_slide_y +- | QtWayland::xdg_positioner::constraint_adjustment_flip_x +- | QtWayland::xdg_positioner::constraint_adjustment_flip_y); ++ | QtWayland::xdg_positioner::constraint_adjustment_slide_y); + m_popup = new Popup(this, parent, positioner); + positioner->destroy(); + +-- +2.40.0 + diff --git a/qt5-qtwayland.spec b/qt5-qtwayland.spec index 695b355..314a1c5 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.8 -Release: 6%{?dist} +Version: 5.15.9 +Release: 1%{?dist} License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0 Url: http://www.qt.io @@ -27,50 +27,48 @@ Patch10: 0010-Client-Don-t-always-recreate-frame-callbacks.patch Patch11: 0011-Client-Always-destroy-frame-callback-in-the-actual-c.patch Patch12: 0012-Wayland-client-use-wl_keyboard-to-determine-active-s.patch Patch13: 0013-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch -Patch14: 0014-Set-preedit-cursor-when-cursor-equals-to-0.patch -Patch15: 0015-Client-Implement-DataDeviceV3.patch -Patch16: 0016-Client-Delay-deletion-of-QDrag-object-until-after-we.patch -Patch17: 0017-Client-Avoid-processing-of-events-when-showing-windo.patch -Patch18: 0018-Handle-registry_global-out-of-constructor.patch -Patch19: 0019-Connect-flushRequest-after-forceRoundTrip.patch -Patch20: 0020-Move-the-wayland-socket-polling-to-a-separate-event-.patch -Patch21: 0021-Fix-crash-if-no-input-method-module-could-be-loaded.patch -Patch22: 0022-Client-Remove-mWaitingForUpdateDelivery.patch -Patch23: 0023-Cursor-position-0-should-still-show-the-cursor.patch -Patch24: 0024-Update-the-preedit-styling-mapping.patch -Patch25: 0025-client-Simplify-round-trip-behavior.patch -Patch26: 0026-Client-Fix-opaque-region-setter.patch -Patch27: 0027-Use-proper-dependencies-in-compile-tests.patch -Patch28: 0028-client-update-button-state-and-etc-in-pointer_leave.patch -Patch29: 0029-Revert-Client-Remove-mWaitingForUpdateDelivery.patch -Patch30: 0030-Fix-race-condition-on-mWaitingForUpdateDelivery.patch -Patch31: 0031-use-poll-2-when-reading-from-clipboard.patch -Patch32: 0032-Reduce-memory-leakage.patch -Patch33: 0033-Fix-build-with-libcxx-missing-array-include.patch -Patch34: 0034-Only-close-popup-in-the-the-hierchary.patch -Patch35: 0035-Build-fixes-for-GCC-11.patch -Patch36: 0036-Check-pointer-for-null-before-use-in-ASSERT.patch -Patch37: 0037-Use-wl_surface.damage_buffer-on-the-client-side.patch -Patch38: 0038-Client-clear-focus-on-touch-cancel.patch -Patch39: 0039-Guard-mResizeDirty-by-the-correctMutex.patch -Patch40: 0040-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch -Patch41: 0041-Fix-compile-tests.patch -Patch42: 0042-Use-CRLF-line-delimiter-for-text-uri-list-data.patch -Patch43: 0043-Fix-missing-update-when-toggling-client-side-decorat.patch -Patch44: 0044-Avoid-calling-requestUpdate-from-wrong-thread.patch -Patch45: 0045-Client-support-high-dpi-mode-for-window-icon.patch -Patch46: 0046-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch -Patch47: 0047-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch -Patch48: 0048-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch -Patch49: 0049-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch -Patch50: 0050-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch -Patch51: 0051-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch -Patch52: 0052-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch -Patch53: 0053-Client-Bump-wl_output-version.patch -Patch54: 0054-Fix-frame-sync-related-to-unprotected-multithread-ac.patch -Patch55: 0055-Client-Handle-zwp_primary_selection_device_manager_v.patch -Patch56: 0056-Fixes-the-build-on-CentOS.patch -Patch57: 0057-client-Avoid-protocol-error-with-invalid-min-max-siz.patch +Patch14: 0014-Client-Implement-DataDeviceV3.patch +Patch15: 0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch +Patch16: 0016-Client-Avoid-processing-of-events-when-showing-windo.patch +Patch17: 0017-Handle-registry_global-out-of-constructor.patch +Patch18: 0018-Connect-flushRequest-after-forceRoundTrip.patch +Patch19: 0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch +Patch20: 0020-Client-Remove-mWaitingForUpdateDelivery.patch +Patch21: 0021-client-Simplify-round-trip-behavior.patch +Patch22: 0022-Client-Fix-opaque-region-setter.patch +Patch23: 0023-Use-proper-dependencies-in-compile-tests.patch +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-Build-fixes-for-GCC-11.patch +Patch31: 0031-Check-pointer-for-null-before-use-in-ASSERT.patch +Patch32: 0032-Use-wl_surface.damage_buffer-on-the-client-side.patch +Patch33: 0033-Client-clear-focus-on-touch-cancel.patch +Patch34: 0034-Guard-mResizeDirty-by-the-correctMutex.patch +Patch35: 0035-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch +Patch36: 0036-Fix-compile-tests.patch +Patch37: 0037-Use-CRLF-line-delimiter-for-text-uri-list-data.patch +Patch38: 0038-Avoid-calling-requestUpdate-from-wrong-thread.patch +Patch39: 0039-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch +Patch40: 0040-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch +Patch41: 0041-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch +Patch42: 0042-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch +Patch43: 0043-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch +Patch44: 0044-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch +Patch45: 0045-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch +Patch46: 0046-Client-Bump-wl_output-version.patch +Patch47: 0047-Fix-frame-sync-related-to-unprotected-multithread-ac.patch +Patch48: 0048-Client-Handle-zwp_primary_selection_device_manager_v.patch +Patch49: 0049-Fixes-the-build-on-CentOS.patch +Patch50: 0050-client-Avoid-protocol-error-with-invalid-min-max-siz.patch +Patch51: 0051-Client-Fix-handling-of-Qt-BlankCursor.patch +Patch52: 0052-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch +Patch53: 0053-Client-Manage-QMimeData-lifecycle.patch +Patch54: 0054-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch +Patch55: 0055-Client-Remove-flip-popup-constraints.patch Patch80: 0080-Client-set-constraint-adjustments-for-popups-in-xdg.patch @@ -183,6 +181,9 @@ popd %changelog +* Tue Apr 11 2023 Jan Grulich +- 5.15.9 + * Wed Mar 29 2023 Than Ngo - 5.15.8-6 - Related bz#2179854, rebuild against new qt5-qtbase diff --git a/sources b/sources index 059e648..f07dee3 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (qtwayland-everywhere-opensource-src-5.15.8.tar.xz) = 6c6e9dc20f98d71abd7dba54ff278bf4535e70f86bfc4e6dd46c1af7c87777f045a6aba02bba3eb786f7cf383da5fb72b03e1e6ec636c8be0cde0e4e5b7b5b2d +SHA512 (qtwayland-everywhere-opensource-src-5.15.9.tar.xz) = d108d63ceeb3b1a8905ad7f53a7271fca6a3506679d352b7290cdf8c00e1c180b6c561ee013a674002b89e23f58cfb7b909dfc5a8fdec6cece7e0a782be77978