This commit is contained in:
Jan Grulich 2023-10-08 16:36:55 +02:00
parent 4c11bfec54
commit 2ff721c9b7
65 changed files with 935 additions and 347 deletions

1
.gitignore vendored
View File

@ -18,3 +18,4 @@
/qtwayland-everywhere-opensource-src-5.15.8.tar.xz
/qtwayland-everywhere-opensource-src-5.15.9.tar.xz
/qtwayland-everywhere-opensource-src-5.15.10.tar.xz
/qtwayland-everywhere-opensource-src-5.15.11.tar.xz

View File

@ -1,7 +1,7 @@
From d7ea7592e47828d2f806bb372db705a1f3b9f948 Mon Sep 17 00:00:00 2001
From ec085b69839e85b4543afb2009d519da21ffd782 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Wed, 5 May 2021 20:49:26 +0300
Subject: [PATCH 01/51] Client: Announce an output after receiving more
Subject: [PATCH 01/59] Client: Announce an output after receiving more
complete state
Output initialization is not atomic, meaning that the compositor may
@ -142,5 +142,5 @@ index df1c94f2..050cfdc0 100644
#if QT_CONFIG(cursor)
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From e08bb6ed336b4bd2f3e85b0d2f43f1b49cdaf7b0 Mon Sep 17 00:00:00 2001
From 09b0405d8dd413c34ab03b3c9a288f3e11765ec1 Mon Sep 17 00:00:00 2001
From: Jaeyoon Jung <jaeyoon.jung@lge.com>
Date: Mon, 15 Feb 2021 08:31:06 +0900
Subject: [PATCH 02/51] Fix issue with repeated window size changes
Subject: [PATCH 02/59] Fix issue with repeated window size changes
Check if the new window size is different from the size requested
previously before calling wl_egl_window_resize. It addresses the issue
@ -20,7 +20,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
index 57d4eb6b..13dd747a 100644
index e00c28c3..64f7caeb 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
@@ -122,14 +122,16 @@ void QWaylandEglWindow::updateSurface(bool create)
@ -42,10 +42,10 @@ index 57d4eb6b..13dd747a 100644
if (!m_eglSurface && m_waylandEglWindow && create) {
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
index 6c8f04ec..94c56325 100644
index 2fccbcea..ad1e5ee9 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
@@ -87,6 +87,7 @@ private:
@@ -85,6 +85,7 @@ private:
mutable QOpenGLFramebufferObject *m_contentFBO = nullptr;
QSurfaceFormat m_format;
@ -54,5 +54,5 @@ index 6c8f04ec..94c56325 100644
}
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 40965d23e170cb02b184cda5962352acd415542e Mon Sep 17 00:00:00 2001
From 1cdb21c2e739aabb6793cf90029e76921b67d975 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Tue, 9 Feb 2021 16:09:21 +0000
Subject: [PATCH 03/51] Client: Connect drags being accepted to updating the
Subject: [PATCH 03/59] Client: Connect drags being accepted to updating the
source drag icon
Currently in a multi-process drag and drop when the other client accepts
@ -23,7 +23,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
1 file changed, 1 insertion(+)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp
index 7e2e3308..bbd2d568 100644
index 1e2db786..0124b890 100644
--- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp
@@ -124,6 +124,7 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon)
@ -35,5 +35,5 @@ index 7e2e3308..bbd2d568 100644
start_drag(m_dragSource->object(), origin->wlSurface(), icon->wlSurface(), m_display->currentInputDevice()->serial());
return true;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 1474fd12afbc6c9850872801c70252c425d4280b Mon Sep 17 00:00:00 2001
From 4bce11a39578ed43d7efd61e2140704e84386cb9 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Fri, 14 May 2021 13:23:24 +0100
Subject: [PATCH 04/51] Client: Disconnect registry listener on destruction
Subject: [PATCH 04/59] Client: Disconnect registry listener on destruction
If a display outlives a QWaylandClientExtension and a new global is
announced we end up delivering an event to a now deleted extension which
@ -15,7 +15,7 @@ Change-Id: Idc0de40be61a2f7627ab4963e1fe29b22fbf3f04
2 files changed, 8 insertions(+)
diff --git a/src/client/global/qwaylandclientextension.cpp b/src/client/global/qwaylandclientextension.cpp
index 125b1e19..797b06fe 100644
index 966096a8..2dc61b77 100644
--- a/src/client/global/qwaylandclientextension.cpp
+++ b/src/client/global/qwaylandclientextension.cpp
@@ -88,6 +88,13 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver)
@ -45,5 +45,5 @@ index 98272e57..5bd28398 100644
QtWaylandClient::QWaylandIntegration *integration() const;
int version() const;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From f5e0a5773064636b6802a4f8f7fb0cb3cec46a68 Mon Sep 17 00:00:00 2001
From 668ebf5792f1eb0910245465e5407fcab86ce98b Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Mon, 3 May 2021 23:01:53 +0100
Subject: [PATCH 05/51] Client: Set XdgShell size hints before the first commit
Subject: [PATCH 05/59] Client: Set XdgShell size hints before the first commit
propagateSizeHints is only called in QWindow we have platform window and
minimumSizeHint is then sent. We also need to send existing hints when
@ -20,7 +20,7 @@ Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org>
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index fa9c01aa..c3d2d3ea 100644
index 94ea573e..699a75eb 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -105,8 +105,6 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
@ -54,5 +54,5 @@ index 2277bbb8..2fdd0a7c 100644
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100));
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000));
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 27108c290bf0f12bb032827e5c01cc94e330d547 Mon Sep 17 00:00:00 2001
From bc07f9d8083f9f731fefb0f1180a18d2172eb57d Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Mon, 14 Jun 2021 12:45:37 +0100
Subject: [PATCH 06/51] Fix build
Subject: [PATCH 06/59] Fix build
1b5e43a593e917610e6245f7a272ac081c508ba4 relied on a patch that we can't
backport.
@ -14,7 +14,7 @@ d6ac8cf6.
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/client/global/qwaylandclientextension.cpp b/src/client/global/qwaylandclientextension.cpp
index 797b06fe..edccfe63 100644
index 2dc61b77..36609c08 100644
--- a/src/client/global/qwaylandclientextension.cpp
+++ b/src/client/global/qwaylandclientextension.cpp
@@ -74,7 +74,10 @@ void QWaylandClientExtensionPrivate::handleRegistryGlobal(void *data, ::wl_regis
@ -42,5 +42,5 @@ index 69cc46a0..9091efbe 100644
class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 07a83b80d7c1b90146d9c6b6339bf4e730ca50b9 Mon Sep 17 00:00:00 2001
From cfbb11da7f7ecbf6372967f01015d269d832dccf Mon Sep 17 00:00:00 2001
From: Zhang Liang <zhanglianga@uniontech.com>
Date: Mon, 1 Feb 2021 19:29:43 +0800
Subject: [PATCH 07/51] Fix: remove listener
Subject: [PATCH 07/59] Fix: remove listener
Add the operation for removing the listener form listener list
@ -13,7 +13,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 78e387bc..280e63bd 100644
index 8a6d5db1..16f8ca1a 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -456,9 +456,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data)
@ -29,5 +29,5 @@ index 78e387bc..280e63bd 100644
uint32_t QWaylandDisplay::currentTimeMillisec()
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 218aa4f1fb91a1dfe892111a45376091dd34ec06 Mon Sep 17 00:00:00 2001
From 25218285ed45d32a93d10e354975ccbbd98cdb77 Mon Sep 17 00:00:00 2001
From: David Redondo <qt@david-redondo.de>
Date: Wed, 26 May 2021 14:49:40 +0200
Subject: [PATCH 08/51] Hook up queryKeyboardModifers
Subject: [PATCH 08/59] Hook up queryKeyboardModifers
Can be useful when upon enter a modifiers event is received but no key
event so no QKeyEvent is generated.
@ -51,5 +51,5 @@ index ff70ae25..73b80658 100644
QStringList themeNames() const override;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From cedb1d0987486f0162d8a10defb3705f5e3b3a45 Mon Sep 17 00:00:00 2001
From d9d5f69f5619dbaa40ca9b97981721467424947b Mon Sep 17 00:00:00 2001
From: Jan Blackquill <uhhadd@gmail.com>
Date: Tue, 24 Aug 2021 14:36:34 -0400
Subject: [PATCH 09/51] Correctly detect if image format is supported by
Subject: [PATCH 09/59] Correctly detect if image format is supported by
QImageWriter
The code queries potential image formats by stripping a mimetype of its
@ -51,7 +51,7 @@ Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/shared/qwaylandmimehelper.cpp b/src/shared/qwaylandmimehelper.cpp
index a5fdd34d..051a91dc 100644
index c5266ab3..e2fe1928 100644
--- a/src/shared/qwaylandmimehelper.cpp
+++ b/src/shared/qwaylandmimehelper.cpp
@@ -60,7 +60,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString &
@ -64,5 +64,5 @@ index a5fdd34d..051a91dc 100644
fmt = imgFmt;
}
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 39f76fba46ff2a6bd4aca6c2abea501d56bed62e Mon Sep 17 00:00:00 2001
From d2992d985306a8bec6298c5238a85ade1ae0c611 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <gbsneto@gnome.org>
Date: Thu, 27 May 2021 19:55:04 -0300
Subject: [PATCH 10/51] Client: Don't always recreate frame callbacks
Subject: [PATCH 10/59] Client: Don't always recreate frame callbacks
The main QWaylandWindow method that is executed when handling updates is
QWaylandWindow::handleUpdate(). This method always, unconditionally queues
@ -38,10 +38,10 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2 files changed, 6 insertions(+)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index df2dcdaa..23816895 100644
index 5a390434..2dce02f0 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -1192,6 +1192,10 @@ void QWaylandWindow::requestUpdate()
@@ -1196,6 +1196,10 @@ void QWaylandWindow::requestUpdate()
void QWaylandWindow::handleUpdate()
{
qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread();
@ -73,5 +73,5 @@ index 2fdd0a7c..e2593314 100644
void tst_xdgshell::popup()
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From c9cd53f50c71af26278589b1477c8d800c776ac1 Mon Sep 17 00:00:00 2001
From cc3fbf3c1d36d5d997082927f895a88ea6d17474 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <gbsneto@gnome.org>
Date: Thu, 27 May 2021 20:02:53 -0300
Subject: [PATCH 11/51] Client: Always destroy frame callback in the actual
Subject: [PATCH 11/59] Client: Always destroy frame callback in the actual
callback
It's good hygiene to destroy all frame callbacks. Destroy the
@ -23,7 +23,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 23816895..d3f28d68 100644
index 2dce02f0..c532b44a 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -635,9 +635,13 @@ void QWaylandWindow::commit()
@ -41,7 +41,7 @@ index 23816895..d3f28d68 100644
window->handleFrameCallback();
}
};
@@ -1201,11 +1205,6 @@ void QWaylandWindow::handleUpdate()
@@ -1205,11 +1209,6 @@ void QWaylandWindow::handleUpdate()
if (!mSurface)
return;
@ -54,5 +54,5 @@ index 23816895..d3f28d68 100644
struct ::wl_surface *wrappedSurface = reinterpret_cast<struct ::wl_surface *>(wl_proxy_create_wrapper(mSurface->object()));
wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrappedSurface), mFrameQueue.queue);
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 398c131a02d48fc9f538951f08caa93dccd03a1a Mon Sep 17 00:00:00 2001
From 2a68cb54a8a07a59e140fe8acd966ca6bb485afd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A9ven=20Car?= <meven.car@enioka.com>
Date: Wed, 18 Aug 2021 18:28:20 +0200
Subject: [PATCH 12/51] Wayland client: use wl_keyboard to determine active
Subject: [PATCH 12/59] Wayland client: use wl_keyboard to determine active
state
Commit f497a5bb87270174b8e0106b7eca1992d44ff15d made QWaylandDisplay
@ -46,7 +46,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
13 files changed, 39 insertions(+), 66 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 280e63bd..1568052e 100644
index 16f8ca1a..d1ca0274 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -579,14 +579,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic
@ -95,7 +95,7 @@ index 1bad8b67..15104d65 100644
void blockingReadEvents();
void flushRequests();
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index d3f28d68..b363c352 100644
index c532b44a..fdffe584 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -96,7 +96,6 @@ QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display)
@ -115,7 +115,7 @@ index d3f28d68..b363c352 100644
}
QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface)
@@ -1105,10 +1106,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab)
@@ -1109,10 +1110,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab)
return true;
}
@ -234,7 +234,7 @@ index 261f8cbb..c1bcd5c6 100644
private:
QScopedPointer<QWaylandXdgShellV6> m_xdgShell;
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index c3d2d3ea..9a362b74 100644
index 699a75eb..888bab77 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -67,11 +67,6 @@ QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface)
@ -337,5 +337,5 @@ index e2593314..73d1eb9c 100644
const QSize screenSize(640, 480);
const uint maximizedSerial = exec([=] {
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 4cbf15b311fd9b00b28205e474c4b31a92ab819d Mon Sep 17 00:00:00 2001
From 888f3c6eca8e807a3ca870067e080349a76a5703 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Fri, 16 Jul 2021 13:00:03 +0200
Subject: [PATCH 13/51] Client: do not empty clipboard when a new popup/window
Subject: [PATCH 13/59] Client: do not empty clipboard when a new popup/window
is opened
If we open a new popup or a window within the same app we have to avoid
@ -21,7 +21,7 @@ Cherry-pick: 1e57ebd501cfc2255300392cd4565cd034efeed8
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 1568052e..aa8808e9 100644
index d1ca0274..7560bf41 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -601,6 +601,19 @@ void QWaylandDisplay::handleWaylandSync()
@ -45,7 +45,7 @@ index 1568052e..aa8808e9 100644
const wl_callback_listener QWaylandDisplay::syncCallbackListener = {
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index e931d1f5..5d704795 100644
index 08e8adb8..e1111124 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -1304,14 +1304,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed()
@ -64,5 +64,5 @@ index e931d1f5..5d704795 100644
mRepeatTimer.stop();
}
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 52f362f8dfd27a65cdee945ba923ae30521ab922 Mon Sep 17 00:00:00 2001
From 23c698917e0fdac0d9519334b7c375cf226e36c7 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Tue, 16 Feb 2021 09:51:47 +0000
Subject: [PATCH 14/51] Client: Implement DataDeviceV3
Subject: [PATCH 14/59] Client: Implement DataDeviceV3
DataDeviceV2 fixes a leak of DataDevice resources.
@ -36,7 +36,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
12 files changed, 153 insertions(+), 46 deletions(-)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp
index bbd2d568..fbb5aa91 100644
index 0124b890..d154c695 100644
--- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp
@@ -72,6 +72,8 @@ QWaylandDataDevice::QWaylandDataDevice(QWaylandDataDeviceManager *manager, QWayl
@ -340,7 +340,7 @@ index 9cf1483c..6f667398 100644
diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp
index f45122fb..5599cbd4 100644
index 9b17cdfa..9610366d 100644
--- a/src/client/qwaylanddatasource.cpp
+++ b/src/client/qwaylanddatasource.cpp
@@ -101,7 +101,32 @@ void QWaylandDataSource::data_source_send(const QString &mime_type, int32_t fd)
@ -378,10 +378,10 @@ index f45122fb..5599cbd4 100644
}
diff --git a/src/client/qwaylanddatasource_p.h b/src/client/qwaylanddatasource_p.h
index 25afff79..96f07bc3 100644
index 3003da1b..b6a9e06b 100644
--- a/src/client/qwaylanddatasource_p.h
+++ b/src/client/qwaylanddatasource_p.h
@@ -77,17 +77,25 @@ public:
@@ -77,16 +77,24 @@ public:
QMimeData *mimeData() const;
Q_SIGNALS:
@ -401,7 +401,6 @@ index 25afff79..96f07bc3 100644
+ void data_source_action(uint32_t action) override;
private:
QWaylandDisplay *m_display = nullptr;
QMimeData *m_mime_data = nullptr;
+ bool m_accepted = false;
+ Qt::DropAction m_dropAction = Qt::IgnoreAction;
@ -409,7 +408,7 @@ index 25afff79..96f07bc3 100644
}
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index aa8808e9..2d298532 100644
index 7560bf41..7f28d01c 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -356,7 +356,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
@ -509,5 +508,5 @@ index 1568b3b9..067410d0 100644
class DataDeviceCompositor : public DefaultCompositor {
public:
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From b29079669153d7b1894fc13b2cd8c6de1ad5471a Mon Sep 17 00:00:00 2001
From bfc5a684b3f8aa38f28267513872376e04bda8b6 Mon Sep 17 00:00:00 2001
From: Arjen Hiemstra <ahiemstra@heimr.nl>
Date: Thu, 18 Nov 2021 13:05:30 +0100
Subject: [PATCH 15/51] Client: Delay deletion of QDrag object until after
Subject: [PATCH 15/59] Client: Delay deletion of QDrag object until after
we're done with it
In certain cases, most notably when performing drag and drop operations
@ -63,5 +63,5 @@ index 747f0190..46f629ac 100644
private:
QWaylandDisplay *m_display = nullptr;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From fde475c6e235429e7af64a54b9d81e893c618af7 Mon Sep 17 00:00:00 2001
From 4d4eb8e543f688c9d5c9e1083f5e46ddf42b9786 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Sun, 14 Nov 2021 13:54:19 +0000
Subject: [PATCH 16/51] Client: Avoid processing of events when showing windows
Subject: [PATCH 16/59] Client: Avoid processing of events when showing windows
The only time we want to dispatch events from the wayland socket is when
the application is waiting for external events. Doing so at any other
@ -22,7 +22,7 @@ Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org>
1 file changed, 1 deletion(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index b363c352..b98435ed 100644
index fdffe584..83a394c4 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -437,7 +437,6 @@ void QWaylandWindow::setVisible(bool visible)
@ -34,5 +34,5 @@ index b363c352..b98435ed 100644
setGeometry(windowGeometry());
// Don't flush the events here, or else the newly visible window may start drawing, but since
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From f22c2639663d9b9010fd79a5873e11a716106b65 Mon Sep 17 00:00:00 2001
From 359bc440082f7876a51c12a0db4e9399006726f2 Mon Sep 17 00:00:00 2001
From: Elvis Lee <kwangwoong.lee@lge.com>
Date: Thu, 18 Feb 2021 15:45:49 +0900
Subject: [PATCH 17/51] Handle registry_global out of constructor
Subject: [PATCH 17/59] Handle registry_global out of constructor
Factory functions in QWaylandDisplay::registry_global() can be overridden.
Later, other classes instantiated in the registry_global can support
@ -17,7 +17,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 2d298532..97fb8cbe 100644
index 7f28d01c..c2482030 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -160,13 +160,6 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration)
@ -81,5 +81,5 @@ index cd8569b1..8afecb31 100644
mDisplay->ensureScreen();
}
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 192b3af086ecca973109be4e169a601af434239a Mon Sep 17 00:00:00 2001
From 3430f8812afa51b5b6fb139361b45fbfe6cff5d0 Mon Sep 17 00:00:00 2001
From: Elvis Lee <kwangwoong.lee@lge.com>
Date: Wed, 17 Mar 2021 16:31:10 +0900
Subject: [PATCH 18/51] Connect flushRequest after forceRoundTrip
Subject: [PATCH 18/59] Connect flushRequest after forceRoundTrip
If flushRequest is connected with aboutToBlock, the flushRequest
may consumes all events so that processEvents might be blocked in forceRoundTrip.
@ -43,5 +43,5 @@ index 8afecb31..661cea53 100644
mDisplay->ensureScreen();
}
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 965fc31b57176d7d913d90465a857c285abd0a59 Mon Sep 17 00:00:00 2001
From 1fe2895d2e3ccae0ae0abb2760e1714ac296c3ea Mon Sep 17 00:00:00 2001
From: Adrien Faveraux <af@brain-networks.fr>
Date: Fri, 26 Nov 2021 09:18:58 +0100
Subject: [PATCH 19/51] Move the wayland socket polling to a separate event
Subject: [PATCH 19/59] Move the wayland socket polling to a separate event
thread
New event threads is introduced which calls poll() on the wayland fd,
@ -32,7 +32,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
5 files changed, 255 insertions(+), 108 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 97fb8cbe..ebcdbd22 100644
index c2482030..c38f6f82 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -87,10 +87,203 @@
@ -371,13 +371,15 @@ index 97fb8cbe..ebcdbd22 100644
}
QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const
@@ -678,4 +816,6 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p
@@ -678,6 +816,8 @@ QWaylandCursorTheme *QWaylandDisplay::loadCursorTheme(const QString &name, int p
} // namespace QtWaylandClient
+#include "qwaylanddisplay.moc"
+
QT_END_NAMESPACE
#include "moc_qwaylanddisplay_p.cpp"
diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
index 49820255..cf91b924 100644
--- a/src/client/qwaylanddisplay_p.h
@ -458,7 +460,7 @@ index 661cea53..fbf00c6b 100644
// Call after eventDispatcher is fully connected, for QWaylandDisplay::forceRoundTrip()
mDisplay->initialize();
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index b98435ed..292dd023 100644
index 83a394c4..3d9741d2 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr;
@ -506,7 +508,7 @@ index b98435ed..292dd023 100644
if (mWaitingForFrameCallback) {
qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed";
@@ -1179,8 +1182,11 @@ void QWaylandWindow::requestUpdate()
@@ -1183,8 +1186,11 @@ void QWaylandWindow::requestUpdate()
Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA
// If we have a frame callback all is good and will be taken care of there
@ -520,7 +522,7 @@ index b98435ed..292dd023 100644
// If we've already called deliverUpdateRequest(), but haven't seen any attach+commit/swap yet
// This is a somewhat redundant behavior and might indicate a bug in the calling code, so log
@@ -1193,7 +1199,12 @@ void QWaylandWindow::requestUpdate()
@@ -1197,7 +1203,12 @@ void QWaylandWindow::requestUpdate()
// so use invokeMethod to delay the delivery a bit.
QMetaObject::invokeMethod(this, [this] {
// Things might have changed in the meantime
@ -534,7 +536,7 @@ index b98435ed..292dd023 100644
deliverUpdateRequest();
}, Qt::QueuedConnection);
}
@@ -1213,9 +1224,10 @@ void QWaylandWindow::handleUpdate()
@@ -1217,9 +1228,10 @@ void QWaylandWindow::handleUpdate()
if (!mSurface)
return;
@ -547,7 +549,7 @@ index b98435ed..292dd023 100644
mFrameCallback = wl_surface_frame(wrappedSurface);
wl_proxy_wrapper_destroy(wrappedSurface);
wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this);
@@ -1225,6 +1237,8 @@ void QWaylandWindow::handleUpdate()
@@ -1229,6 +1241,8 @@ void QWaylandWindow::handleUpdate()
// Start a timer for handling the case when the compositor stops sending frame callbacks.
if (mFrameCallbackTimeout > 0) {
QMetaObject::invokeMethod(this, [this] {
@ -570,5 +572,5 @@ index fb3ed606..54ac67a9 100644
// True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 39f6f824e660c36b2865bf55f9ea609aaa02697e Mon Sep 17 00:00:00 2001
From fa1d00f0c46d09187c43e9a133a55e8d3f8b3652 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 1 Feb 2022 13:05:36 +0200
Subject: [PATCH 20/51] Client: Remove mWaitingForUpdateDelivery
Subject: [PATCH 20/59] Client: Remove mWaitingForUpdateDelivery
Currently, mWaitingForUpdateDelivery is shared between the main thread
(doHandleFrameCallback()) and the frame callback event thread
@ -23,7 +23,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
2 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 292dd023..de5af1bd 100644
index 3d9741d2..afc9c137 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -651,23 +651,18 @@ void QWaylandWindow::handleFrameCallback()
@ -75,5 +75,5 @@ index 54ac67a9..cf7ce879 100644
QElapsedTimer mFrameCallbackElapsedTimer;
struct ::wl_callback *mFrameCallback = nullptr;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 89b396cbef7c8fb7041d3a13d952d468c5c57e56 Mon Sep 17 00:00:00 2001
From 24228d70a20ddd13f82a798522c397fb2ec65038 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Wed, 9 Feb 2022 17:20:48 +0000
Subject: [PATCH 21/51] client: Simplify round trip behavior
Subject: [PATCH 21/59] client: Simplify round trip behavior
The custom event queue was removed in
302d4ffb8549214eb4028dc3e47ec4ee4e12ffbd (2015) so the comment about not
@ -22,7 +22,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
1 file changed, 1 insertion(+), 42 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index ebcdbd22..d371ffec 100644
index c38f6f82..b8da02b3 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -615,50 +615,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec()
@ -78,5 +78,5 @@ index ebcdbd22..d371ffec 100644
bool QWaylandDisplay::supportsWindowDecoration() const
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 0cf12729a90380d3ef11efebfbfa9458c397d592 Mon Sep 17 00:00:00 2001
From a65677be1d27d82cb4dbc2539731c59e87750d34 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Sat, 19 Feb 2022 17:01:04 +0200
Subject: [PATCH 22/51] Client: Fix opaque region setter
Subject: [PATCH 22/59] Client: Fix opaque region setter
The rect is in the global coordinate system, while the opaque region
must be in the surface local coordinate system.
@ -14,7 +14,7 @@ Reviewed-by: Aleix Pol Gonzalez <aleixpol@kde.org>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index de5af1bd..69319228 100644
index afc9c137..2704e938 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -372,7 +372,7 @@ void QWaylandWindow::setGeometry(const QRect &rect)
@ -27,5 +27,5 @@ index de5af1bd..69319228 100644
void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset)
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 1ab149c13af4806ef950487e2d9db8a937645791 Mon Sep 17 00:00:00 2001
From 74b040b6ab20bdad4e251db621e397e0dbbc8efc Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Fri, 4 Feb 2022 11:07:36 +0100
Subject: [PATCH 23/51] Use proper dependencies in compile tests
Subject: [PATCH 23/59] Use proper dependencies in compile tests
Use the dependencies as found by the "libraries" section instead of relying
on them being available in the default location (e.g. "-ldrm").
@ -122,5 +122,5 @@ index bcfd5215..da95d07b 100644
},
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 16d52e9ad900a25a02ff4eae43cc7d7e43dbad8a Mon Sep 17 00:00:00 2001
From 1e7ae6005c5bacc1b25648c1a920354547b77e23 Mon Sep 17 00:00:00 2001
From: Paul Olav Tvete <paul.tvete@qt.io>
Date: Tue, 15 Mar 2022 15:59:15 +0100
Subject: [PATCH 24/51] Revert "Client: Remove mWaitingForUpdateDelivery"
Subject: [PATCH 24/59] Revert "Client: Remove mWaitingForUpdateDelivery"
The reverted commit introduces a severe performance regression
when a client window is resized while a QtQuick renderthread
@ -18,7 +18,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 69319228..a87e11aa 100644
index 2704e938..ff3690be 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -658,11 +658,17 @@ void QWaylandWindow::handleFrameCallback()
@ -55,5 +55,5 @@ index cf7ce879..54ac67a9 100644
QElapsedTimer mFrameCallbackElapsedTimer;
struct ::wl_callback *mFrameCallback = nullptr;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 2a7884f0d51d4da20e675640b8d987004c9d77c5 Mon Sep 17 00:00:00 2001
From 6c1ce5358f5c2bc06d796300c221f5b78628269b Mon Sep 17 00:00:00 2001
From: Paul Olav Tvete <paul.tvete@qt.io>
Date: Tue, 15 Mar 2022 16:53:04 +0100
Subject: [PATCH 25/51] Fix race condition on mWaitingForUpdateDelivery
Subject: [PATCH 25/59] Fix race condition on mWaitingForUpdateDelivery
Change-Id: I0e91bda73722468b9339fc434fe04420b5e7d3da
Reviewed-by: David Edmundson <davidedmundson@kde.org>
@ -11,7 +11,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
2 files changed, 3 insertions(+), 6 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index a87e11aa..264ca59b 100644
index ff3690be..77f82b37 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -652,24 +652,21 @@ void QWaylandWindow::handleFrameCallback()
@ -55,5 +55,5 @@ index 54ac67a9..c0a76345 100644
QElapsedTimer mFrameCallbackElapsedTimer;
struct ::wl_callback *mFrameCallback = nullptr;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From ddfa956f6c39c53249116b979f679b255ed4a596 Mon Sep 17 00:00:00 2001
From 1b236eb0325235597e8dda0af22c775b207b3fe9 Mon Sep 17 00:00:00 2001
From: Kenneth Topp <ken@bllue.org>
Date: Mon, 4 Apr 2022 09:36:21 -0400
Subject: [PATCH 26/51] use poll(2) when reading from clipboard
Subject: [PATCH 26/59] use poll(2) when reading from clipboard
change clipboard read away from select(2) call which can fail when
an application has large number of open files
@ -44,5 +44,5 @@ index c9e158cc..fe0ea8c9 100644
} else if (ready == 0) {
qWarning("QWaylandDataOffer: timeout reading from pipe");
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From b981fc82eb37700353949c72d3fd6d0887c8c107 Mon Sep 17 00:00:00 2001
From a6fefb960c7f78db7985c4ac159aabe194ac57cd Mon Sep 17 00:00:00 2001
From: Ulf Hermann <ulf.hermann@qt.io>
Date: Tue, 22 Feb 2022 12:31:08 +0100
Subject: [PATCH 27/51] Reduce memory leakage
Subject: [PATCH 27/59] Reduce memory leakage
We need to clean up the event queue when we're done.
@ -13,7 +13,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
1 file changed, 3 insertions(+)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index d371ffec..1b9ec699 100644
index b8da02b3..4a331a4c 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -381,6 +381,9 @@ QWaylandDisplay::~QWaylandDisplay(void)
@ -27,5 +27,5 @@ index d371ffec..1b9ec699 100644
// Steps which is called just after constructor. This separates registry_global() out of the constructor
--
2.40.1
2.41.0

View File

@ -1,32 +0,0 @@
From 91afb601e33f492393f7b27a84aa281b55d26de2 Mon Sep 17 00:00:00 2001
From: Sam James <sam@gentoo.org>
Date: Sat, 18 Jun 2022 17:11:11 +0100
Subject: [PATCH 28/51] Fix build with libcxx (missing array include)
Bug: https://bugs.gentoo.org/833488
Task-number: QTBUG-104435
Change-Id: I06384761a5560b81b675e6c4ae498bb93dcb4f4f
Pick-to: 5.15 6.2 6.3 6.4
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
(cherry picked from commit 5065013b0c2346b5918a2681ae2e58046140e8a7)
---
.../compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h b/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
index 56a710c3..c6a8b6c6 100644
--- a/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
+++ b/src/hardwareintegration/compositor/linux-dmabuf-unstable-v1/linuxdmabuf.h
@@ -41,6 +41,8 @@
#include <QtCore/QTextStream>
#include <QtGui/QOpenGLTexture>
+#include <array>
+
#include <EGL/egl.h>
#include <EGL/eglext.h>
--
2.40.1

View File

@ -1,7 +1,7 @@
From 76a2b1919f04152e77740b2d1601df893b8d79ba Mon Sep 17 00:00:00 2001
From b308ffb47e635b407a1387ec369e5b3af8554122 Mon Sep 17 00:00:00 2001
From: Weng Xuetian <wengxt@gmail.com>
Date: Wed, 20 Jul 2022 15:57:40 -0700
Subject: [PATCH 29/51] Only close popup in the the hierchary
Subject: [PATCH 28/59] Only close popup in the the hierchary
Imagine following event sequences:
1. a tooltip is shown. activePopups = {tooltip}
@ -31,7 +31,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
9 files changed, 136 insertions(+), 30 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 264ca59b..9e82c174 100644
index 77f82b37..096859e8 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -239,6 +239,7 @@ bool QWaylandWindow::shouldCreateSubSurface() const
@ -81,7 +81,7 @@ index 264ca59b..9e82c174 100644
reset();
}
}
@@ -1297,6 +1280,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea)
@@ -1301,6 +1284,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea)
wl_region_destroy(region);
}
@ -209,7 +209,7 @@ index 8c371661..151c78e3 100644
auto *shell = m_xdgSurface->m_shell;
Q_ASSERT(shell->m_topmostGrabbingPopup == this);
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 9a362b74..ead99989 100644
index 888bab77..774c86f8 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -195,12 +195,17 @@ QtWayland::xdg_toplevel::resize_edge QWaylandXdgSurface::Toplevel::convertToResi
@ -397,5 +397,5 @@ index 73d1eb9c..747875b4 100644
void tst_xdgshell::switchPopups()
{
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From b14eb8fdac3bfa2763a83541a3e4764c0eac153e Mon Sep 17 00:00:00 2001
From 7afa1f5d74b0a99c3dcfb4a3be68eee4fa28d7f6 Mon Sep 17 00:00:00 2001
From: Roman Genkhel <roman.genhel@lge.com>
Date: Thu, 12 Nov 2020 12:21:51 +0300
Subject: [PATCH 30/51] Check pointer for null before use in ASSERT
Subject: [PATCH 29/59] Check pointer for null before use in ASSERT
Task-number: QTBUG-85195
Change-Id: I331e54f6e58aa9d536351a55223610c60b3cb414
@ -12,7 +12,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 9e82c174..0a5fc15b 100644
index 096859e8..6d49fdfd 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -536,12 +536,12 @@ void QWaylandWindow::sendRecursiveExposeEvent()
@ -30,5 +30,5 @@ index 9e82c174..0a5fc15b 100644
buffer->setBusy();
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 7daab1d4a36463f0904fdde539894609f8b367c1 Mon Sep 17 00:00:00 2001
From 892892aca2465d3903ea51120e46b40f0924b00d Mon Sep 17 00:00:00 2001
From: Paul Olav Tvete <paul.tvete@qt.io>
Date: Mon, 6 Jul 2020 14:37:35 +0200
Subject: [PATCH 31/51] Use wl_surface.damage_buffer on the client side
Subject: [PATCH 30/59] Use wl_surface.damage_buffer on the client side
Prefer the newer, recommended damage_buffer when the compositor
supports it.
@ -20,7 +20,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
6 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 1b9ec699..6898a881 100644
index 4a331a4c..f23c459d 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -493,7 +493,7 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
@ -33,7 +33,7 @@ index 1b9ec699..6898a881 100644
} else if (interface == QStringLiteral("wl_shm")) {
mShm.reset(new QWaylandShm(this, version, id));
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 0a5fc15b..5b7f9df9 100644
index 6d49fdfd..4e5ca97c 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -563,7 +563,11 @@ void QWaylandWindow::damage(const QRect &rect)
@ -127,5 +127,5 @@ index 949dc23d..d176837e 100644
uint32_t callback) override;
void surface_commit(Resource *resource) override;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 152984fa2347a2f02568ac6cd9baba5bd8e4d56d Mon Sep 17 00:00:00 2001
From aa577f8dc28d606dab2cf5aea57ac33477cd4294 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Fri, 5 Aug 2022 15:00:31 +0100
Subject: [PATCH 32/51] Client: clear focus on touch cancel
Subject: [PATCH 31/59] Client: clear focus on touch cancel
When we get a touch_cancel event all touches should be treated as
lifted.
@ -23,7 +23,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
4 files changed, 39 insertions(+)
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 5d704795..5b880984 100644
index e1111124..4d58e9ab 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -1392,6 +1392,7 @@ void QWaylandInputDevice::Touch::touch_cancel()
@ -112,5 +112,5 @@ index 296dbf47..210d8ddb 100644
Seat *m_seat = nullptr;
};
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 11824dcf4164898a48b0629a072370a195dcc8f1 Mon Sep 17 00:00:00 2001
From ad92da9b721ee6faad78a5fcbbe05904455b27ab Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Thu, 3 Feb 2022 19:42:33 +0000
Subject: [PATCH 33/51] Guard mResizeDirty by the correctMutex
Subject: [PATCH 32/59] Guard mResizeDirty by the correctMutex
mResizeDirty is used in the GUI thread in setCanResize which can be
called from the GUI thread. It is queried and set whilst the resizeLock
@ -15,7 +15,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 5b7f9df9..117e3383 100644
index 4e5ca97c..f8c71d9c 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -358,11 +358,12 @@ void QWaylandWindow::setGeometry(const QRect &rect)
@ -35,5 +35,5 @@ index 5b7f9df9..117e3383 100644
}
QRect exposeGeometry(QPoint(), geometry().size());
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 8e2f1b74e780b998ab682d9abbd53feeceaa819e Mon Sep 17 00:00:00 2001
From 1c9db5444951c613ad4866b282ddeb6de5820e7d Mon Sep 17 00:00:00 2001
From: Albert Astals Cid <aacid@kde.org>
Date: Fri, 9 Sep 2022 15:37:49 +0200
Subject: [PATCH 34/51] Fix compile tests
Subject: [PATCH 33/59] Fix compile tests
Broken in c618467da4c06528537026e2b78f92265bce446f
---
@ -25,5 +25,5 @@ index b063e0d9..2ea382f1 100644
{
auto e = window.m_events.takeFirst();
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 3f0371cb22e117020e57255858e02f9237210a3b Mon Sep 17 00:00:00 2001
From c31476115b3f2f34ffef4ce139640d0619fd274d Mon Sep 17 00:00:00 2001
From: Fushan Wen <qydwhotmail@gmail.com>
Date: Sun, 18 Sep 2022 18:17:18 +0800
Subject: [PATCH 37/51] Call `finishDrag()` in
Subject: [PATCH 34/59] Call `finishDrag()` in
`QWaylandDataDevice::dragSourceCancelled()`
Drags can either get finished or cancelled. If a drag is finished
@ -22,7 +22,7 @@ BUG: 446111
1 file changed, 1 insertion(+)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp
index fbb5aa91..e3e60ed5 100644
index d154c695..9b3c18ac 100644
--- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp
@@ -296,6 +296,7 @@ void QWaylandDataDevice::selectionSourceCancelled()
@ -34,5 +34,5 @@ index fbb5aa91..e3e60ed5 100644
}
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 20bef824f4b78598fbffa5ada8271e22b658f635 Mon Sep 17 00:00:00 2001
From de7fbc797929fee6604ed404aefc6ed452beeda1 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Mon, 12 Sep 2022 13:28:08 +0100
Subject: [PATCH 38/51] Hold surface read lock throughout
Subject: [PATCH 35/59] Hold surface read lock throughout
QWaylandEglWindow::updateSurface
QWaylandEGLWindow::updateSurface is called from both the main and render
@ -50,7 +50,7 @@ index 2be87bc0..ea3d1995 100644
};
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
index 13dd747a..872a6237 100644
index 64f7caeb..dbe2845a 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
@@ -40,6 +40,7 @@
@ -81,5 +81,5 @@ index 13dd747a..872a6237 100644
}
--
2.40.1
2.41.0

View File

@ -1,40 +0,0 @@
From a7c3f946175a78df45b1eb3301cf16a05a542d58 Mon Sep 17 00:00:00 2001
From: Alexandros Frantzis <alexandros.frantzis@collabora.com>
Date: Wed, 11 May 2022 17:12:52 +0300
Subject: [PATCH 35/51] Use CRLF line delimiter for text/uri-list data
According to RFC 2483, which describes text/uri-list, the line delimiter
must be CRLF (instead of the currently used LF). Some applications
strictly expect the CRLF delimiter and fail to properly parse the
uri-list otherwise (e.g., WineX11/XWayland).
https://datatracker.ietf.org/doc/html/rfc2483
5. The text/uri-list Internet Media Type
The format of text/uri-list resources is:
3) As for all text/* formats, lines are terminated with a CRLF pair.
Pick-to: 6.4 6.3 6.2 5.15
Change-Id: I7c062224a9060028ab6293fdf172692ade28cca5
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit bd5b0a804b91b9fbd0ce44d5d6765e07d0a50b4f)
---
src/shared/qwaylandmimehelper.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/shared/qwaylandmimehelper.cpp b/src/shared/qwaylandmimehelper.cpp
index 051a91dc..e2fe1928 100644
--- a/src/shared/qwaylandmimehelper.cpp
+++ b/src/shared/qwaylandmimehelper.cpp
@@ -74,7 +74,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString &
QList<QUrl> urls = mimeData->urls();
for (int i = 0; i < urls.count(); ++i) {
content.append(urls.at(i).toEncoded());
- content.append('\n');
+ content.append("\r\n");
}
} else {
content = mimeData->data(mimeType);
--
2.40.1

View File

@ -1,43 +0,0 @@
From 36522a8ed9f43cd49100e06040711de9c2c0c163 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Mon, 8 Aug 2022 12:14:01 +0200
Subject: [PATCH 36/51] Avoid calling requestUpdate from wrong thread
In certain circumstances, we can get to createDecoration()
from the render thread (from QWaylandGLContext::makeCurrent)
Calling requestUpdate() from this secondary thread would
cause an assert, so we queue the call on the appropriate
thread instead.
This amends af7b60ade5c4be81cbc58eb18307c017d5594071.
Pick-to: 5.15 6.2 6.3 6.3.2 6.4
Fixes: QTBUG-105308
Change-Id: I4805265f39e24eb1464897532be2025bc3c27728
Reviewed-by: Inho Lee <inho.lee@qt.io>
(cherry picked from commit a0c0b5b42335808c2222cbf72c1758e955731ed9)
---
src/client/qwaylandwindow.cpp | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 117e3383..4ddf9fbe 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -873,7 +873,11 @@ bool QWaylandWindow::createDecoration()
// size and are not redrawn, leaving the new buffer empty. As a simple
// work-around, we trigger a full extra update whenever the client-side
// window decorations are toggled while the window is showing.
- window()->requestUpdate();
+ // Note: createDecoration() is sometimes called from the render thread
+ // of Qt Quick. This is essentially wrong and could potentially cause problems,
+ // but until the underlying issue has been fixed, we have to use invokeMethod()
+ // here to avoid asserts.
+ QMetaObject::invokeMethod(window(), &QWindow::requestUpdate);
}
return mWindowDecoration;
--
2.40.1

View File

@ -1,7 +1,7 @@
From 6481efa9a8fe88043d931648d72dceeeb91af64d Mon Sep 17 00:00:00 2001
From dbde248fea508102f656c863c23c09e544f3fd82 Mon Sep 17 00:00:00 2001
From: David Redondo <qt@david-redondo.de>
Date: Wed, 8 Jun 2022 11:25:59 +0200
Subject: [PATCH 39/51] Keep toplevel windows in the top left corner of the
Subject: [PATCH 36/59] Keep toplevel windows in the top left corner of the
screen
We can't know the actual position of a window on the screen. This causes
@ -39,7 +39,7 @@ index fbf00c6b..54861600 100644
QWaylandIntegration::~QWaylandIntegration()
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 4ddf9fbe..f322a8d6 100644
index f8c71d9c..7c7e49ac 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -350,8 +350,13 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect)
@ -86,5 +86,5 @@ index ea3d1995..487a91a6 100644
virtual void ensureSize();
WId winId() const override;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 3b29b796f98721cb52c89a56e28ff8f9b830ebc5 Mon Sep 17 00:00:00 2001
From e79050b5c2ebbb34a9a6c76739b5b824b4819a35 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Thu, 17 Nov 2022 15:25:37 +0200
Subject: [PATCH 40/51] Client: Add F_SEAL_SHRINK seal to shm backing file
Subject: [PATCH 37/59] Client: Add F_SEAL_SHRINK seal to shm backing file
This lets libwayland-server avoid installing a SIGBUS handler when it
wants to mmap() the backing file and access the contents of shared
@ -49,5 +49,5 @@ index dc7ff670..98acd42d 100644
QScopedPointer<QFile> filePointer;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 36a9d60c3ed05e2ec8faf7e81946becfaeb2f1d5 Mon Sep 17 00:00:00 2001
From 50803a2025bad39adb6e0ac969bba60929d593d4 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Mon, 21 Nov 2022 18:39:40 +0200
Subject: [PATCH 41/51] Client: Call wl_output_release() upon QWaylandScreen
Subject: [PATCH 38/59] Client: Call wl_output_release() upon QWaylandScreen
destruction
It ensures that the proxy gets destroyed.
@ -27,5 +27,5 @@ index 7c2d9be3..64ae4fe7 100644
uint QWaylandScreen::requiredEvents() const
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 4293409e97c6ecfaec49b87818f9b439010187c9 Mon Sep 17 00:00:00 2001
From 5a0e6102fa153daa0e50859f66654e48033bc0fe Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 22 Nov 2022 12:33:41 +0200
Subject: [PATCH 42/51] Client: Bump wl_output version
Subject: [PATCH 39/59] Client: Bump wl_output version
wl_output_release is available starting with wl_output v3.
@ -26,5 +26,5 @@ index 64ae4fe7..5537dafd 100644
, mWaylandDisplay(waylandDisplay)
, mOutputName(QStringLiteral("Screen%1").arg(id))
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 7c43759079528c33c30c4a823de7fb2dff6acd27 Mon Sep 17 00:00:00 2001
From b55964ec30a055ac199e4d6b463afd67b651381c Mon Sep 17 00:00:00 2001
From: Weng Xuetian <wengxt@gmail.com>
Date: Sun, 27 Nov 2022 12:44:40 -0800
Subject: [PATCH 43/51] Fix frame sync related to unprotected multithread
Subject: [PATCH 40/59] Fix frame sync related to unprotected multithread
access
There is a few crashes happens in real life that frame callback is
@ -21,7 +21,7 @@ Change-Id: Ie01d08d07a2f10f70606ed1935caac09cb4f0382
2 files changed, 43 insertions(+), 32 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index f322a8d6..6337db00 100644
index 7c7e49ac..2e445340 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -252,13 +252,16 @@ void QWaylandWindow::reset()
@ -162,5 +162,5 @@ index 487a91a6..2f219d8c 100644
static QWaylandWindow *mMouseGrab;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 817655fa798fc2d640b4db006df229c335e02c3b Mon Sep 17 00:00:00 2001
From a2808e43ff20ab164dfcc9a570da8c28bcfe8334 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 27 Sep 2022 22:05:07 +0300
Subject: [PATCH 44/51] Client: Handle zwp_primary_selection_device_manager_v1
Subject: [PATCH 41/59] Client: Handle zwp_primary_selection_device_manager_v1
global removal
The zwp_primary_selection_device_manager_v1 global can be withdrawn if
@ -19,7 +19,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index 6898a881..27f55965 100644
index f23c459d..cc321497 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -519,6 +519,8 @@ void QWaylandDisplay::registry_global(uint32_t id, const QString &interface, uin
@ -46,7 +46,7 @@ index 6898a881..27f55965 100644
break;
}
diff --git a/src/client/qwaylandprimaryselectionv1.cpp b/src/client/qwaylandprimaryselectionv1.cpp
index 832f9678..ea508771 100644
index 78b1de13..cf3b4b22 100644
--- a/src/client/qwaylandprimaryselectionv1.cpp
+++ b/src/client/qwaylandprimaryselectionv1.cpp
@@ -54,11 +54,6 @@ QWaylandPrimarySelectionDeviceManagerV1::QWaylandPrimarySelectionDeviceManagerV1
@ -62,5 +62,5 @@ index 832f9678..ea508771 100644
QWaylandPrimarySelectionDeviceV1 *QWaylandPrimarySelectionDeviceManagerV1::createDevice(QWaylandInputDevice *seat)
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 9e03f149e70896d92b51d9c25af681ddc2b5acfb Mon Sep 17 00:00:00 2001
From fa2a6997d29efea85323237cd3ca8555d091f2d8 Mon Sep 17 00:00:00 2001
From: Aleix Pol <aleixpol@kde.org>
Date: Mon, 19 Dec 2022 15:31:03 +0100
Subject: [PATCH 45/51] Fixes the build on CentOS
Subject: [PATCH 42/59] Fixes the build on CentOS
Change-Id: I3c21972e7681be99b0f45c3ea3a57be285e4ff8e
---
@ -22,5 +22,5 @@ index 98acd42d..41cffdf7 100644
if (fd >= 0)
fcntl(fd, F_ADD_SEALS, F_SEAL_SHRINK | F_SEAL_SEAL);
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 5028633b140c013b14a487889eeef992233d4edf Mon Sep 17 00:00:00 2001
From 4a6222595cc45d57471d5f89959ec2963877fb47 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Mon, 23 May 2022 09:47:24 +0200
Subject: [PATCH 46/51] client: Avoid protocol error with invalid min/max size
Subject: [PATCH 43/59] client: Avoid protocol error with invalid min/max size
If the application sets an invalid minimum and maximum size
(where the minimum is higher than the maximum), then we
@ -35,7 +35,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index ead99989..ad666129 100644
index 774c86f8..696eaf77 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -384,10 +384,10 @@ void QWaylandXdgSurface::setSizeHints()
@ -52,5 +52,5 @@ index ead99989..ad666129 100644
maxHeight = 0;
m_toplevel->set_max_size(maxWidth, maxHeight);
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From aeb7bf67a99fecf5f4e49ba7c49edf9c8b9db2b6 Mon Sep 17 00:00:00 2001
From 4b4bfbb61b7f232061e0b8e0d4be6487596a3521 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 22 Nov 2022 23:27:34 +0200
Subject: [PATCH 47/51] Client: Fix handling of Qt::BlankCursor
Subject: [PATCH 44/59] Client: Fix handling of Qt::BlankCursor
The cursor may not be properly set when a window has Qt::BlankCursor and
it's shown. In that case, the cursor surface may not be present and
@ -20,7 +20,7 @@ Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 5b880984..9a0fe49d 100644
index 4d58e9ab..132c5345 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -310,8 +310,7 @@ void QWaylandInputDevice::Pointer::updateCursor()
@ -34,5 +34,5 @@ index 5b880984..9a0fe49d 100644
}
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 2e4c35db38a55243bc2458dc87cc9ff6afb81586 Mon Sep 17 00:00:00 2001
From 58664797ea7f63baf8e4a22e5ca2906363bf4539 Mon Sep 17 00:00:00 2001
From: Marco Martin <notmart@gmail.com>
Date: Fri, 24 Feb 2023 17:40:48 +0100
Subject: [PATCH 48/51] client: Force a roundtrip when an XdgOutput is not
Subject: [PATCH 45/59] client: Force a roundtrip when an XdgOutput is not
ready yet
Is possible that the server sends a surface_enter before
@ -21,7 +21,7 @@ Reviewed-by: David Edmundson <davidedmundson@kde.org>
4 files changed, 42 insertions(+)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 6337db00..3b700002 100644
index 2e445340..9bf5b150 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -1042,6 +1042,8 @@ void QWaylandWindow::handleScreensChanged()
@ -113,5 +113,5 @@ index 80429608..68e8d77a 100644
QCOMPOSITOR_TEST_MAIN(tst_xdgoutput)
#include "tst_xdgoutput.moc"
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From dd8640794264449cb978765029fc4713f3fb31b9 Mon Sep 17 00:00:00 2001
From 091f3dad76007774e103ed8c81adcbf0eca89977 Mon Sep 17 00:00:00 2001
From: Tang Haixiang <tanghaixiang@uniontech.com>
Date: Thu, 22 Dec 2022 15:19:53 +0800
Subject: [PATCH 49/51] Client: Manage QMimeData lifecycle
Subject: [PATCH 46/59] Client: Manage QMimeData lifecycle
QMimeData is created by user, it is not taken care of in qtwayland,
which will cause memory leak.
@ -105,7 +105,7 @@ index ce14e124..bb52683d 100644
}
diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp
index 5599cbd4..e085152c 100644
index 9610366d..1a6b9835 100644
--- a/src/client/qwaylanddatasource.cpp
+++ b/src/client/qwaylanddatasource.cpp
@@ -71,11 +71,6 @@ QWaylandDataSource::~QWaylandDataSource()
@ -121,7 +121,7 @@ index 5599cbd4..e085152c 100644
{
Q_EMIT cancelled();
diff --git a/src/client/qwaylanddatasource_p.h b/src/client/qwaylanddatasource_p.h
index 96f07bc3..14d1542d 100644
index b6a9e06b..089c5485 100644
--- a/src/client/qwaylanddatasource_p.h
+++ b/src/client/qwaylanddatasource_p.h
@@ -74,8 +74,6 @@ public:
@ -134,5 +134,5 @@ index 96f07bc3..14d1542d 100644
void cancelled();
void finished();
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From 346cebf39b90f7fe012f57e66d493634aba20f89 Mon Sep 17 00:00:00 2001
From aae875167fb67df735f922677104f815463b9f1c Mon Sep 17 00:00:00 2001
From: Aleix Pol <aleixpol@kde.org>
Date: Mon, 6 Mar 2023 01:11:45 +0100
Subject: [PATCH 50/51] client: Do not cast placeholder screens to
Subject: [PATCH 47/59] client: Do not cast placeholder screens to
QWaylandScreen
It's wrong to C-cast an object to a class that isn't theirs. Check if it
@ -30,5 +30,5 @@ index bf54a1a0..9763c312 100644
return nullptr;
--
2.40.1
2.41.0

View File

@ -1,7 +1,7 @@
From aabaa4efd1d284f07c3cb5b8a7d62a9143701bc4 Mon Sep 17 00:00:00 2001
From 53ee577e86f88abbbdbba26c593d03d87994b757 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Thu, 12 Jan 2023 14:49:25 +0200
Subject: [PATCH 51/51] Client: Remove flip popup constraints
Subject: [PATCH 48/59] Client: Remove flip popup constraints
xdg_positioner doesn't have good anchor rect and other needed
information so the compositor can properly flip popups. In some windows
@ -22,7 +22,7 @@ Reviewed-by: Liang Qi <liang.qi@qt.io>
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index ad666129..822b385c 100644
index 696eaf77..2cc36510 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -425,9 +425,7 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent)
@ -37,5 +37,5 @@ index ad666129..822b385c 100644
positioner->destroy();
--
2.40.1
2.41.0

View File

@ -0,0 +1,38 @@
From c64fb8989dcde2a00381d8ff75e7cf63dfc94b90 Mon Sep 17 00:00:00 2001
From: David Redondo <qt@david-redondo.de>
Date: Tue, 11 Apr 2023 14:27:27 +0200
Subject: [PATCH 49/59] Destroy frame queue before display
wl_event_queue_destroy accesses the display.
Found by running a test under valgrind.
Pick-to: 6.5
Change-Id: Ic89cbd3b6e98b4fc9561b0e63b5fab4886a1ec50
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit a76bf824fcd1cc3789f0d3454a0423c0241d9718)
---
src/client/qwaylanddisplay.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp
index cc321497..737b539d 100644
--- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp
@@ -379,11 +379,12 @@ QWaylandDisplay::~QWaylandDisplay(void)
#if QT_CONFIG(cursor)
qDeleteAll(mCursorThemes);
#endif
- if (mDisplay)
- wl_display_disconnect(mDisplay);
if (m_frameEventQueue)
wl_event_queue_destroy(m_frameEventQueue);
+
+ if (mDisplay)
+ wl_display_disconnect(mDisplay);
}
// Steps which is called just after constructor. This separates registry_global() out of the constructor
--
2.41.0

View File

@ -0,0 +1,42 @@
From 2dabdd8227088d01a6d375e25226b1805769021d Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Wed, 7 Jun 2023 22:12:15 +0100
Subject: [PATCH 50/59] client: Fix crash on dnd updates after client facing
drag ends
A platform drag and a application-facing drag have two different
lifespans.
The platform drag lasts until all mimedata is transferred and the client
receiving the drops marks it as finished.
The application facing QDrag lasts until the client deletes it. We can
get a crash if we get updates during this time.
The drop event is guarded, but not the action negotiation.
Pick-to: 6.6
Change-Id: Ib9c047f04d65883105d4cd3f169637d0e038a63f
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit 22daca49b807fefba58113a06b86df4274e49f62)
---
src/client/qwaylanddatadevice.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp
index 9b3c18ac..9c3308d5 100644
--- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp
@@ -132,6 +132,9 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, Qt::DropActions supporte
connect(m_dragSource.data(), &QWaylandDataSource::cancelled, this, &QWaylandDataDevice::dragSourceCancelled);
connect(m_dragSource.data(), &QWaylandDataSource::dndResponseUpdated, this, [this](bool accepted, Qt::DropAction action) {
auto drag = static_cast<QWaylandDrag *>(QGuiApplicationPrivate::platformIntegration()->drag());
+ if (!drag->currentDrag()) {
+ return;
+ }
// in old versions drop action is not set, so we guess
if (wl_data_source_get_version(m_dragSource->object()) < 3) {
drag->setResponse(accepted);
--
2.41.0

View File

@ -0,0 +1,66 @@
From e14bd7626bf8dd24c8de325656371383a434e345 Mon Sep 17 00:00:00 2001
From: Michael Weghorn <m.weghorn@posteo.de>
Date: Mon, 20 Feb 2023 14:02:23 +0100
Subject: [PATCH 51/59] Convert cursor bitmap to supported format
The 1-bit image formats QImage::Format_Mono and
QImage::Format_MonoLSB used by cursor bitmaps don't have
a corresponding wl_shm_format.
Therefore, convert to a supported image format as necessary
to make such bitmap cursors work on Wayland as well.
Fixes: QTBUG-95434
Change-Id: I402fd870b301ddc01075251b66f2cf7cc1923133
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit 45ec1362f8fcb5ade92f4d2d4985b1c24e78c8ba)
Backport changes: Use Qt::ReturnByValue version for QCursor::mask() and QCursor::bitmap()
---
src/client/qwaylandcursor.cpp | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/client/qwaylandcursor.cpp b/src/client/qwaylandcursor.cpp
index e4eca9d4..ba76ba2d 100644
--- a/src/client/qwaylandcursor.cpp
+++ b/src/client/qwaylandcursor.cpp
@@ -44,6 +44,7 @@
#include "qwaylandshmbackingstore_p.h"
#include <QtGui/QImageReader>
+#include <QBitmap>
#include <QDebug>
#include <wayland-cursor.h>
@@ -250,7 +251,27 @@ QWaylandCursor::QWaylandCursor(QWaylandDisplay *display)
QSharedPointer<QWaylandBuffer> QWaylandCursor::cursorBitmapBuffer(QWaylandDisplay *display, const QCursor *cursor)
{
Q_ASSERT(cursor->shape() == Qt::BitmapCursor);
- const QImage &img = cursor->pixmap().toImage();
+
+ const QBitmap mask = cursor->mask(Qt::ReturnByValue);
+ QImage img;
+ if (cursor->pixmap().isNull())
+ img = cursor->bitmap(Qt::ReturnByValue).toImage();
+ else
+ img = cursor->pixmap().toImage();
+
+ // convert to supported format if necessary
+ if (!display->shm()->formatSupported(img.format())) {
+ if (mask.isNull()) {
+ img.convertTo(QImage::Format_RGB32);
+ } else {
+ // preserve mask
+ img.convertTo(QImage::Format_ARGB32);
+ QPixmap pixmap = QPixmap::fromImage(img);
+ pixmap.setMask(mask);
+ img = pixmap.toImage();
+ }
+ }
+
QSharedPointer<QWaylandShmBuffer> buffer(new QWaylandShmBuffer(display, img.size(), img.format()));
memcpy(buffer->image()->bits(), img.bits(), size_t(img.sizeInBytes()));
return buffer;
--
2.41.0

View File

@ -0,0 +1,169 @@
From 53e02e2ccf64ce1459fd46a71c88d069d8d5e478 Mon Sep 17 00:00:00 2001
From: Jungi Byun <jungi.byun@lge.com>
Date: Wed, 27 Jan 2021 08:24:23 +0900
Subject: [PATCH 52/59] Replace scale with devicePixelRatio for non-integer
scaling
The 'scale' event from wayland cannot support non-integer scaling
which was originally supported in Qt.
As default, devicePixelRatio follows the 'scale' so that the high DPI
still works as the mechanism in Wayland. But if non-integer scaling
factor such as 150% is needed, it can be supported to override the
devicePixelRatio.
Change-Id: I63a04db27bd521264b6d0904e1ddd05a572dc970
Reviewed-by: Elvis Lee <kwangwoong.lee@lge.com>
Reviewed-by: Jungi Byun <jungi.byun@lge.com>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit cf98abbc6ae9ba9373803ffe193f839324e0c80b)
---
src/client/qwaylandabstractdecoration.cpp | 2 +-
src/client/qwaylandshmbackingstore.cpp | 6 +++---
src/client/qwaylandshmbackingstore_p.h | 2 +-
src/client/qwaylandwindow.cpp | 16 ++++++++--------
src/client/qwaylandwindow_p.h | 2 +-
.../client/wayland-egl/qwaylandglcontext.cpp | 2 +-
6 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/src/client/qwaylandabstractdecoration.cpp b/src/client/qwaylandabstractdecoration.cpp
index b628930d..d15a7f9f 100644
--- a/src/client/qwaylandabstractdecoration.cpp
+++ b/src/client/qwaylandabstractdecoration.cpp
@@ -122,7 +122,7 @@ const QImage &QWaylandAbstractDecoration::contentImage()
if (d->m_isDirty) {
// Update the decoration backingstore
- const int bufferScale = waylandWindow()->scale();
+ const qreal bufferScale = waylandWindow()->scale();
const QSize imageSize = waylandWindow()->surfaceSize() * bufferScale;
d->m_decorationContentImage = QImage(imageSize, QImage::Format_ARGB32_Premultiplied);
// Only scale by buffer scale, not QT_SCALE_FACTOR etc.
diff --git a/src/client/qwaylandshmbackingstore.cpp b/src/client/qwaylandshmbackingstore.cpp
index 41cffdf7..90e37e95 100644
--- a/src/client/qwaylandshmbackingstore.cpp
+++ b/src/client/qwaylandshmbackingstore.cpp
@@ -72,7 +72,7 @@ QT_BEGIN_NAMESPACE
namespace QtWaylandClient {
QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display,
- const QSize &size, QImage::Format format, int scale)
+ const QSize &size, QImage::Format format, qreal scale)
{
int stride = size.width() * 4;
int alloc = stride * size.height();
@@ -114,7 +114,7 @@ QWaylandShmBuffer::QWaylandShmBuffer(QWaylandDisplay *display,
QWaylandShm* shm = display->shm();
wl_shm_format wl_format = shm->formatFrom(format);
mImage = QImage(data, size.width(), size.height(), stride, format);
- mImage.setDevicePixelRatio(qreal(scale));
+ mImage.setDevicePixelRatio(scale);
mShmPool = wl_shm_create_pool(shm->object(), fd, alloc);
init(wl_shm_pool_create_buffer(mShmPool,0, size.width(), size.height(),
@@ -277,7 +277,7 @@ QWaylandShmBuffer *QWaylandShmBackingStore::getBuffer(const QSize &size)
void QWaylandShmBackingStore::resize(const QSize &size)
{
QMargins margins = windowDecorationMargins();
- int scale = waylandWindow()->scale();
+ qreal scale = waylandWindow()->scale();
QSize sizeWithMargins = (size + QSize(margins.left()+margins.right(),margins.top()+margins.bottom())) * scale;
// We look for a free buffer to draw into. If the buffer is not the last buffer we used,
diff --git a/src/client/qwaylandshmbackingstore_p.h b/src/client/qwaylandshmbackingstore_p.h
index e01632da..f3fae438 100644
--- a/src/client/qwaylandshmbackingstore_p.h
+++ b/src/client/qwaylandshmbackingstore_p.h
@@ -71,7 +71,7 @@ class QWaylandWindow;
class Q_WAYLAND_CLIENT_EXPORT QWaylandShmBuffer : public QWaylandBuffer {
public:
QWaylandShmBuffer(QWaylandDisplay *display,
- const QSize &size, QImage::Format format, int scale = 1);
+ const QSize &size, QImage::Format format, qreal scale = 1);
~QWaylandShmBuffer() override;
QSize size() const override { return mImage.size(); }
int scale() const override { return int(mImage.devicePixelRatio()); }
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 9bf5b150..92eeba53 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -185,7 +185,7 @@ void QWaylandWindow::initWindow()
// typically be integer 1 (normal-dpi) or 2 (high-dpi). Call set_buffer_scale()
// to inform the compositor that high-resolution buffers will be provided.
if (mDisplay->compositorVersion() >= 3)
- mSurface->set_buffer_scale(scale());
+ mSurface->set_buffer_scale(mScale);
if (QScreen *s = window()->screen())
setOrientationMask(s->orientationUpdateMask());
@@ -572,9 +572,9 @@ void QWaylandWindow::damage(const QRect &rect)
if (mSurface == nullptr)
return;
- const int s = scale();
+ const qreal s = scale();
if (mDisplay->compositorVersion() >= 4)
- mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height());
+ mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height()));
else
mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
}
@@ -613,9 +613,9 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
attachOffset(buffer);
if (mDisplay->compositorVersion() >= 4) {
- const int s = scale();
+ const qreal s = scale();
for (const QRect &rect: damage)
- mSurface->damage_buffer(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height());
+ mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height()));
} else {
for (const QRect &rect: damage)
mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
@@ -1103,14 +1103,14 @@ bool QWaylandWindow::isActive() const
return mDisplay->isWindowActivated(this);
}
-int QWaylandWindow::scale() const
+qreal QWaylandWindow::scale() const
{
- return mScale;
+ return devicePixelRatio();
}
qreal QWaylandWindow::devicePixelRatio() const
{
- return mScale;
+ return qreal(mScale);
}
bool QWaylandWindow::setMouseGrabEnabled(bool grab)
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index 2f219d8c..741f9e5c 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -158,7 +158,7 @@ public:
void setMask(const QRegion &region) override;
- int scale() const;
+ qreal scale() const;
qreal devicePixelRatio() const override;
void requestActivateWindow() override;
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
index c1f45fa6..bbc63444 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
@@ -195,7 +195,7 @@ public:
QOpenGLTextureCache *cache = QOpenGLTextureCache::cacheForContext(m_context->context());
QSize surfaceSize = window->surfaceSize();
- int scale = window->scale() ;
+ qreal scale = window->scale() ;
glViewport(0, 0, surfaceSize.width() * scale, surfaceSize.height() * scale);
//Draw Decoration
--
2.41.0

View File

@ -0,0 +1,71 @@
From b42a0b7a97545859cc1a83556491f90a3d408790 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Thu, 3 Aug 2023 12:28:44 +0300
Subject: [PATCH 53/59] Client: Fix buffer damage
If the specified damage rectangle has fractional coordinates in the buffer
local coordinate space, the buffer damage needs to be expanded, i.e.
- bufferRect.left = floor(rect.left * scale)
- bufferRect.right = ceil(rect.right * scale) = ceil((rect.x + rect.width) * scale)
Flooring the coordinates and ceiling the size is not enough. It can
produce incorrect results.
For example, consider that a rectangle with logical coordinates of
QRect(0, 23, 179, 46) has been damaged in a window with scale 1.5. When
flooring the coordinates and ceiling the size, the following buffer
damage rect will be produced: QRect(0, 34, 269, 69). Its height is off by
1, the expected height is 70 (ceil((23 + 46) * 1.5) - floor(23 * 1.5) =
ceil(103.5) - floor(34.5) = 104 - 34 = 70).
Pick-to: 5.15 6.5 6.6
Change-Id: I927e75a2224bb58b4634125011d1305dbdfbb3aa
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit d79db699866b37bd3e3358ca18a210dfc5c0b4b9)
---
src/client/qwaylandwindow.cpp | 20 +++++++++++++++-----
1 file changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 92eeba53..e2e513af 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -573,10 +573,15 @@ void QWaylandWindow::damage(const QRect &rect)
return;
const qreal s = scale();
- if (mDisplay->compositorVersion() >= 4)
- mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height()));
- else
+ if (mDisplay->compositorVersion() >= 4) {
+ const QRect bufferRect =
+ QRectF(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height())
+ .toAlignedRect();
+ mSurface->damage_buffer(bufferRect.x(), bufferRect.y(), bufferRect.width(),
+ bufferRect.height());
+ } else {
mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
+ }
}
void QWaylandWindow::safeCommit(QWaylandBuffer *buffer, const QRegion &damage)
@@ -614,8 +619,13 @@ void QWaylandWindow::commit(QWaylandBuffer *buffer, const QRegion &damage)
attachOffset(buffer);
if (mDisplay->compositorVersion() >= 4) {
const qreal s = scale();
- for (const QRect &rect: damage)
- mSurface->damage_buffer(qFloor(s * rect.x()), qFloor(s * rect.y()), qCeil(s * rect.width()), qCeil(s * rect.height()));
+ for (const QRect &rect : damage) {
+ const QRect bufferRect =
+ QRectF(s * rect.x(), s * rect.y(), s * rect.width(), s * rect.height())
+ .toAlignedRect();
+ mSurface->damage_buffer(bufferRect.x(), bufferRect.y(), bufferRect.width(),
+ bufferRect.height());
+ }
} else {
for (const QRect &rect: damage)
mSurface->damage(rect.x(), rect.y(), rect.width(), rect.height());
--
2.41.0

View File

@ -0,0 +1,63 @@
From 959738880c1c2ba6b496657d6bcd8b67d1e326ae Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Thu, 12 Jan 2023 14:56:18 +0100
Subject: [PATCH 54/59] client: Fix infinite recursion with text-input-v2
It was possible to get into an infinite recursion when
double-clicking an entry in an item view to edit it.
What would happen is that the editor takes focus, and we call
commit on the input method commit in case the previous focused
widget has pending input that needs to be committed. The
subsequent method event then causes the QAbstractItemView to
set focus, and since we have not yet updated the focus in the
previous call, we end up in an infinite recursion, eventually
crashing when the stack overflows.
As a guard for this, we only send an input method event when there
is actually pre-edit text to commit, and we reset the pre-edit
text immediately so that any subsequent call will just exit.
[ChangeLog][QtWaylandClient] Fixed a possible crash when editing
a field in an item view.
Pick-to: 5.15 6.2 6.4 6.5
Fixes: QTBUG-109302
Change-Id: I45237c80e53b1386705279899e19319180d78fa1
Reviewed-by: Liang Qi <liang.qi@qt.io>
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Reviewed-by: Inho Lee <inho.lee@qt.io>
(cherry picked from commit db4afd9caf037cfff7aca8b130d326c340b7fed0)
* asturmlechner 2023-08-14: Resolve conflict with dev branch commit
af8f8c33ea885f472682f98e0699721f50b1f020 - change applied in
qwaylandinputcontext.cpp instead.
---
src/client/qwaylandinputcontext.cpp | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/client/qwaylandinputcontext.cpp b/src/client/qwaylandinputcontext.cpp
index 47696a6a..9435e961 100644
--- a/src/client/qwaylandinputcontext.cpp
+++ b/src/client/qwaylandinputcontext.cpp
@@ -93,9 +93,14 @@ void QWaylandTextInput::reset()
void QWaylandTextInput::commit()
{
if (QObject *o = QGuiApplication::focusObject()) {
- QInputMethodEvent event;
- event.setCommitString(m_preeditCommit);
- QCoreApplication::sendEvent(o, &event);
+ if (!m_preeditCommit.isEmpty()) {
+
+ QInputMethodEvent event;
+ event.setCommitString(m_preeditCommit);
+ m_preeditCommit = QString();
+
+ QCoreApplication::sendEvent(o, &event);
+ }
}
reset();
--
2.41.0

View File

@ -0,0 +1,38 @@
From b792de4b59ab80e14c21a953f4e026f6f342b609 Mon Sep 17 00:00:00 2001
From: Ilya Fedin <fedin-ilja2010@ya.ru>
Date: Sun, 19 Mar 2023 10:20:11 +0400
Subject: [PATCH 55/59] Client: Fix the mouse being stuck in pressed state
after DnD
I can still reproduce the problem using QtWidgets applications
on KDE Plasma 5.27. Both Windows and macOS QPA have a similar quirk
and they both send a MouseButtonRelease event rather than a MouseMove
event.
Amends f7a386eeaec8e6314c1be7de5e14e9fe3847f9ba
Task-number: QTBUG-97037
Pick-to: 6.5 6.2 5.15
Change-Id: I864a1cb68b3660d858623f943b3958f7cafbf955
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit e3c74961b1c7415fd94678802ad7f8173d0be4c1)
---
src/client/qwaylandinputdevice.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 132c5345..34c185a3 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -845,7 +845,7 @@ void QWaylandInputDevice::Pointer::releaseButtons()
mButtons = Qt::NoButton;
if (auto *window = focusWindow()) {
- MotionEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mParent->modifiers());
+ ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers());
window->handleMouse(mParent, e);
}
}
--
2.41.0

View File

@ -0,0 +1,37 @@
From 63914e595d5de7bd64e221b2d63efbe27432fa40 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Fri, 25 Aug 2023 10:19:07 +0300
Subject: [PATCH 56/59] Client: Commit the initial surface state explicitly
QWaylandWindow lacks an explicit step to finish initializing the shell
surface by committing the surface. So far it used to work because of
hidden surface commits in
QWaylandWindow::handleContentOrientationChange(),
QWaylandWindow::setMask() and so on.
This change adds an explicit step to commit the initial surface state to
make the shell surface initialization robust.
Change-Id: Ibc38a4e0dbea689a727451c25a61af0270c7e548
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 225432c2294bdfbf24856b2f155cd274b24543b2)
---
src/client/qwaylandwindow.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index e2e513af..cf2a03fe 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -200,6 +200,8 @@ void QWaylandWindow::initWindow()
mShellSurface->requestWindowStates(window()->windowStates());
handleContentOrientationChange(window()->contentOrientation());
mFlags = window()->flags();
+
+ mSurface->commit();
}
void QWaylandWindow::initializeWlSurface()
--
2.41.0

View File

@ -0,0 +1,35 @@
From 0091a19ae0d73ec6390d86823fd6a8c4fc9f7f3b Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Fri, 15 Sep 2023 10:06:32 +0300
Subject: [PATCH 57/59] tests: Fix tst_xdgshell::minMaxSize()
Amends e8cff6fb39c0fd01548bce18542820a6612dbe49.
The new size hints will be committed when the surface is committed.
Change-Id: I94e944fee7dac63d5e9ac86fb348b5d24d54abfc
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit d8d3d6097afeac62f1b0285e3d5365c7cb580547)
---
tests/auto/client/xdgshell/tst_xdgshell.cpp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp
index 747875b4..afbeef53 100644
--- a/tests/auto/client/xdgshell/tst_xdgshell.cpp
+++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp
@@ -604,9 +604,11 @@ void tst_xdgshell::minMaxSize()
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000));
window.setMaximumSize(QSize(500, 400));
+ window.update();
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(500, 400));
window.setMinimumSize(QSize(50, 40));
+ window.update();
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(50, 40));
}
--
2.41.0

View File

@ -0,0 +1,62 @@
From 035f5d4526d155b45f7d3efddc6505f9e186ae06 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Fri, 25 Aug 2023 10:15:29 +0300
Subject: [PATCH 58/59] Client: Remove some surface commits
The buffer transform, input and opaque regions are double buffered
state. They will be applied on the next surface commit.
But the issue with them is that the relevant code makes surface commits
too. It's undesired as it can lead to qtwayland committing partial
state, for example it can break xdg surface window geometry.
This change removes hidden surface commits. The relevant properties will
be applied on the next frame.
Change-Id: I1c40c9a5430fb6b91d7643b20d628f8a9a9d501a
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit e8cff6fb39c0fd01548bce18542820a6612dbe49)
---
src/client/qwaylandwindow.cpp | 4 ----
src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp | 3 ---
2 files changed, 7 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index cf2a03fe..d3958d46 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -478,8 +478,6 @@ void QWaylandWindow::setMask(const QRegion &mask)
if (isOpaque())
setOpaqueArea(mMask);
}
-
- mSurface->commit();
}
void QWaylandWindow::applyConfigureWhenPossible()
@@ -794,8 +792,6 @@ void QWaylandWindow::handleContentOrientationChange(Qt::ScreenOrientation orient
Q_UNREACHABLE();
}
mSurface->set_buffer_transform(transform);
- // set_buffer_transform is double buffered, we need to commit.
- mSurface->commit();
}
void QWaylandWindow::setOrientationMask(Qt::ScreenOrientations mask)
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 2cc36510..535c3398 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -367,9 +367,6 @@ bool QWaylandXdgSurface::wantsDecorations() const
void QWaylandXdgSurface::propagateSizeHints()
{
setSizeHints();
-
- if (m_toplevel && m_window)
- m_window->commit();
}
void QWaylandXdgSurface::setWindowGeometry(const QRect &rect)
--
2.41.0

View File

@ -0,0 +1,69 @@
From 4de268cbaf6ff3b633429577f06d3d746a3b202a Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Wed, 30 Aug 2023 09:49:41 +0300
Subject: [PATCH 59/59] Client: Avoid locking resizing in
QWaylandShmBackingStore
QWaylandWindow::setCanResize(false) will block applying configure
events. QWaylandWindow::setCanResize(true) will unblock configure events
and potentially apply a scheduled configure event if there's one.
QWaylandWindow::setCanResize(true) has to be called **after** committing
the surface to ensure that the xdg window geometry matches the buffer.
We don't want the xdg window geometry change when painting.
Unfortunately, setCanResize(true) can be called before the surface is
committed when using a RasterSurface, for example
- QWaylandShmBackingStore::beginPaint(): calls setCanResize(false)
- QWaylandShmBackingStore::endPaint(): calls setCanResize(true)
- QWaylandWindow::setCanResize(true): applies pending configure event
- QWaylandShmBackingStore::flush(): commits the surface, but the xdg
window geometry is wrong now
As is, beginPaint() and endPaint() are not entirely correct functions
where configure events can be blocked. We need functions that wrap both
painting and flushing, which are not feasible with the current backing
store design.
On the other hand, it's worth noting that blocking configure events in
the backing store is not necessary because painting happens on the main
thread unlike OpenGL or Vulkan code paths.
Given the lack of synchronization points and the fact that rendering
happens on the main thread, this change removes blocking configure
events in QWaylandShmBackingStore. It fixes dolphin and various other
applications that use QtWidgets jumping while being interactively
resized.
Change-Id: I156e4fd5e04a6bba7e8d48171510d5ab0ec89713
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 8828452bcf2ecf4e02a64380a1697d148c4366b0)
---
src/client/qwaylandshmbackingstore.cpp | 3 ---
1 file changed, 3 deletions(-)
diff --git a/src/client/qwaylandshmbackingstore.cpp b/src/client/qwaylandshmbackingstore.cpp
index 90e37e95..145f933b 100644
--- a/src/client/qwaylandshmbackingstore.cpp
+++ b/src/client/qwaylandshmbackingstore.cpp
@@ -186,8 +186,6 @@ void QWaylandShmBackingStore::beginPaint(const QRegion &region)
mPainting = true;
ensureSize();
- waylandWindow()->setCanResize(false);
-
if (mBackBuffer->image()->hasAlphaChannel()) {
QPainter p(paintDevice());
p.setCompositionMode(QPainter::CompositionMode_Source);
@@ -202,7 +200,6 @@ void QWaylandShmBackingStore::endPaint()
mPainting = false;
if (mPendingFlush)
flush(window(), mPendingRegion, QPoint());
- waylandWindow()->setCanResize(true);
}
void QWaylandShmBackingStore::ensureSize()
--
2.41.0

View File

@ -2,8 +2,8 @@
Summary: Qt5 - Wayland platform support and QtCompositor module
Name: qt5-%{qt_module}
Version: 5.15.10
Release: 4%{?dist}
Version: 5.15.11
Release: 1%{?dist}
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
Url: http://www.qt.io
@ -13,7 +13,7 @@ Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submod
## Upstream patches
## repo: https://invent.kde.org/qt/qt/qtwayland
## branch: kde/5.15
## git format-patch v5.15.8-lts-lgpl
## git format-patch v5.15.11-lts-lgpl
Patch1: 0001-Client-Announce-an-output-after-receiving-more-compl.patch
Patch2: 0002-Fix-issue-with-repeated-window-size-changes.patch
Patch3: 0003-Client-Connect-drags-being-accepted-to-updating-the-.patch
@ -41,30 +41,38 @@ Patch24: 0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch
Patch25: 0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch
Patch26: 0026-use-poll-2-when-reading-from-clipboard.patch
Patch27: 0027-Reduce-memory-leakage.patch
Patch28: 0028-Fix-build-with-libcxx-missing-array-include.patch
Patch29: 0029-Only-close-popup-in-the-the-hierchary.patch
Patch30: 0030-Check-pointer-for-null-before-use-in-ASSERT.patch
Patch31: 0031-Use-wl_surface.damage_buffer-on-the-client-side.patch
Patch32: 0032-Client-clear-focus-on-touch-cancel.patch
Patch33: 0033-Guard-mResizeDirty-by-the-correctMutex.patch
Patch34: 0034-Fix-compile-tests.patch
Patch35: 0035-Use-CRLF-line-delimiter-for-text-uri-list-data.patch
Patch36: 0036-Avoid-calling-requestUpdate-from-wrong-thread.patch
Patch37: 0037-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch
Patch38: 0038-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch
Patch39: 0039-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch
Patch40: 0040-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch
Patch41: 0041-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch
Patch42: 0042-Client-Bump-wl_output-version.patch
Patch43: 0043-Fix-frame-sync-related-to-unprotected-multithread-ac.patch
Patch44: 0044-Client-Handle-zwp_primary_selection_device_manager_v.patch
Patch45: 0045-Fixes-the-build-on-CentOS.patch
Patch46: 0046-client-Avoid-protocol-error-with-invalid-min-max-siz.patch
Patch47: 0047-Client-Fix-handling-of-Qt-BlankCursor.patch
Patch48: 0048-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch
Patch49: 0049-Client-Manage-QMimeData-lifecycle.patch
Patch50: 0050-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch
Patch51: 0051-Client-Remove-flip-popup-constraints.patch
Patch28: 0028-Only-close-popup-in-the-the-hierchary.patch
Patch29: 0029-Check-pointer-for-null-before-use-in-ASSERT.patch
Patch30: 0030-Use-wl_surface.damage_buffer-on-the-client-side.patch
Patch31: 0031-Client-clear-focus-on-touch-cancel.patch
Patch32: 0032-Guard-mResizeDirty-by-the-correctMutex.patch
Patch33: 0033-Fix-compile-tests.patch
Patch34: 0034-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch
Patch35: 0035-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch
Patch36: 0036-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch
Patch37: 0037-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch
Patch38: 0038-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch
Patch39: 0039-Client-Bump-wl_output-version.patch
Patch40: 0040-Fix-frame-sync-related-to-unprotected-multithread-ac.patch
Patch41: 0041-Client-Handle-zwp_primary_selection_device_manager_v.patch
Patch42: 0042-Fixes-the-build-on-CentOS.patch
Patch43: 0043-client-Avoid-protocol-error-with-invalid-min-max-siz.patch
Patch44: 0044-Client-Fix-handling-of-Qt-BlankCursor.patch
Patch45: 0045-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch
Patch46: 0046-Client-Manage-QMimeData-lifecycle.patch
Patch47: 0047-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch
Patch48: 0048-Client-Remove-flip-popup-constraints.patch
Patch49: 0049-Destroy-frame-queue-before-display.patch
Patch50: 0050-client-Fix-crash-on-dnd-updates-after-client-facing-.patch
Patch51: 0051-Convert-cursor-bitmap-to-supported-format.patch
Patch52: 0052-Replace-scale-with-devicePixelRatio-for-non-integer-.patch
Patch53: 0053-Client-Fix-buffer-damage.patch
Patch54: 0054-client-Fix-infinite-recursion-with-text-input-v2.patch
Patch55: 0055-Client-Fix-the-mouse-being-stuck-in-pressed-state-af.patch
Patch56: 0056-Client-Commit-the-initial-surface-state-explicitly.patch
Patch57: 0057-tests-Fix-tst_xdgshell-minMaxSize.patch
Patch58: 0058-Client-Remove-some-surface-commits.patch
Patch59: 0059-Client-Avoid-locking-resizing-in-QWaylandShmBackingS.patch
# Use QAdwaitaDecorations by default
Patch100: qtwayland-use-adwaita-decorations-by-default.patch
@ -178,6 +186,9 @@ popd
%changelog
* Fri Oct 06 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.11-1
- 5.15.11
* Tue Aug 22 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.10-4
- Rebuild (qtbase)

View File

@ -1 +1 @@
SHA512 (qtwayland-everywhere-opensource-src-5.15.10.tar.xz) = 214b1fec7dfd815d148a7485f7811e623b06d172e58e4ee3167264a4e4b8f4aeec11474e574f91652a0bd3a48476a6747cad468f1e5035c49a55a96fc1400899
SHA512 (qtwayland-everywhere-opensource-src-5.15.11.tar.xz) = b47a3358bc37f52dde0839940431e8049abfaa827722e6d57362b07547c35fe9fb422d28fd28c69a13f5773c24efc3eeea1e584372737a0151ed94bf4c5b9980