import qt5-qtwayland-5.15.15-1.el10

i10ce changed/i10ce/qt5-qtwayland-5.15.15-1.el10
Arkady L. Shane 1 month ago
parent f217e468e9
commit 03d7577cc0
Signed by: tigro
GPG Key ID: 1EC08A25C9DB2503

2
.gitignore vendored

@ -1 +1 @@
SOURCES/qtwayland-everywhere-opensource-src-5.15.9.tar.xz SOURCES/qtwayland-everywhere-opensource-src-5.15.15.tar.xz

@ -1 +1 @@
dcaac92b52d681c9d13330e78fcd745005269fdc SOURCES/qtwayland-everywhere-opensource-src-5.15.9.tar.xz 171583a180bd291a0f21021dfc721b96e1d5a9f1 SOURCES/qtwayland-everywhere-opensource-src-5.15.15.tar.xz

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

@ -1,7 +1,7 @@
From a9bcc5dc553b5a307a5bdcb6e1d92058e0257c7c Mon Sep 17 00:00:00 2001 From 9202e23a12f9be24f275e88d385f91534bfe3c33 Mon Sep 17 00:00:00 2001
From: Jaeyoon Jung <jaeyoon.jung@lge.com> From: Jaeyoon Jung <jaeyoon.jung@lge.com>
Date: Mon, 15 Feb 2021 08:31:06 +0900 Date: Mon, 15 Feb 2021 08:31:06 +0900
Subject: [PATCH 02/55] 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 Check if the new window size is different from the size requested
previously before calling wl_egl_window_resize. It addresses the issue 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(-) 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 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 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
@@ -122,14 +122,16 @@ void QWaylandEglWindow::updateSurface(bool create) @@ -122,14 +122,16 @@ void QWaylandEglWindow::updateSurface(bool create)
@ -42,10 +42,10 @@ index 57d4eb6b..13dd747a 100644
if (!m_eglSurface && m_waylandEglWindow && create) { if (!m_eglSurface && m_waylandEglWindow && create) {
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h 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 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.h
+++ b/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; mutable QOpenGLFramebufferObject *m_contentFBO = nullptr;
QSurfaceFormat m_format; QSurfaceFormat m_format;
@ -54,5 +54,5 @@ index 6c8f04ec..94c56325 100644
} }
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From eb8e933841d66f0ebe071a170a9af995c2b07b0d Mon Sep 17 00:00:00 2001 From 2e2a8d2b20c36134db66e50f66b518e75f5a5f7f Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Tue, 9 Feb 2021 16:09:21 +0000 Date: Tue, 9 Feb 2021 16:09:21 +0000
Subject: [PATCH 03/55] Client: Connect drags being accepted to updating the Subject: [PATCH 03/59] Client: Connect drags being accepted to updating the
source drag icon source drag icon
Currently in a multi-process drag and drop when the other client accepts 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(+) 1 file changed, 1 insertion(+)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp 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 --- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp +++ b/src/client/qwaylanddatadevice.cpp
@@ -124,6 +124,7 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, QWaylandWindow *icon) @@ -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()); start_drag(m_dragSource->object(), origin->wlSurface(), icon->wlSurface(), m_display->currentInputDevice()->serial());
return true; return true;
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 9d16197f5e888b68cdf98165f46dcc9ac4dd9820 Mon Sep 17 00:00:00 2001 From bd961fbbb11e00dff46b2dd08aba255fcc2b5068 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Fri, 14 May 2021 13:23:24 +0100 Date: Fri, 14 May 2021 13:23:24 +0100
Subject: [PATCH 04/55] 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 If a display outlives a QWaylandClientExtension and a new global is
announced we end up delivering an event to a now deleted extension which 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(+) 2 files changed, 8 insertions(+)
diff --git a/src/client/global/qwaylandclientextension.cpp b/src/client/global/qwaylandclientextension.cpp 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 --- a/src/client/global/qwaylandclientextension.cpp
+++ b/src/client/global/qwaylandclientextension.cpp +++ b/src/client/global/qwaylandclientextension.cpp
@@ -88,6 +88,13 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver) @@ -88,6 +88,13 @@ QWaylandClientExtension::QWaylandClientExtension(const int ver)
@ -45,5 +45,5 @@ index 98272e57..5bd28398 100644
QtWaylandClient::QWaylandIntegration *integration() const; QtWaylandClient::QWaylandIntegration *integration() const;
int version() const; int version() const;
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 8256c6d8bb0f456ad27031bad1cce916c0c29740 Mon Sep 17 00:00:00 2001 From 16074a6a5da33b12bd16d3630b6cd98ea3d6df6d Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Mon, 3 May 2021 23:01:53 +0100 Date: Mon, 3 May 2021 23:01:53 +0100
Subject: [PATCH 05/55] 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 propagateSizeHints is only called in QWindow we have platform window and
minimumSizeHint is then sent. We also need to send existing hints when 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(-) 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 diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index f50e1c0e..1f51562b 100644 index 49e9d953..a4811b08 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -105,8 +105,6 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() @@ -105,8 +105,6 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
@ -32,7 +32,7 @@ index f50e1c0e..1f51562b 100644
m_applied = m_pending; m_applied = m_pending;
qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states; qCDebug(lcQpaWayland) << "Applied pending xdg_toplevel configure event:" << m_applied.size << m_applied.states;
} }
@@ -257,6 +255,7 @@ QWaylandXdgSurface::QWaylandXdgSurface(QWaylandXdgShell *shell, ::xdg_surface *s @@ -267,6 +265,7 @@ QWaylandXdgSurface::QWaylandXdgSurface(QWaylandXdgShell *shell, ::xdg_surface *s
m_toplevel->set_parent(parentXdgSurface->m_toplevel->object()); m_toplevel->set_parent(parentXdgSurface->m_toplevel->object());
} }
} }
@ -41,7 +41,7 @@ index f50e1c0e..1f51562b 100644
QWaylandXdgSurface::~QWaylandXdgSurface() QWaylandXdgSurface::~QWaylandXdgSurface()
diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp
index 2277bbb8..2fdd0a7c 100644 index 1c23728b..1423d647 100644
--- a/tests/auto/client/xdgshell/tst_xdgshell.cpp --- a/tests/auto/client/xdgshell/tst_xdgshell.cpp
+++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp +++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp
@@ -505,7 +505,7 @@ void tst_xdgshell::minMaxSize() @@ -505,7 +505,7 @@ void tst_xdgshell::minMaxSize()
@ -54,5 +54,5 @@ index 2277bbb8..2fdd0a7c 100644
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100)); QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.minSize, QSize(100, 100));
QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000)); QCOMPOSITOR_TRY_COMPARE(xdgToplevel()->m_committed.maxSize, QSize(1000, 1000));
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From bea02a7b4bce8cc3b2a7bce10c53fccc9aedef1e Mon Sep 17 00:00:00 2001 From 5362f7651857857294cc3882bda6c043699fc9bb Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Mon, 14 Jun 2021 12:45:37 +0100 Date: Mon, 14 Jun 2021 12:45:37 +0100
Subject: [PATCH 06/55] Fix build Subject: [PATCH 06/59] Fix build
1b5e43a593e917610e6245f7a272ac081c508ba4 relied on a patch that we can't 1b5e43a593e917610e6245f7a272ac081c508ba4 relied on a patch that we can't
backport. backport.
@ -14,7 +14,7 @@ d6ac8cf6.
2 files changed, 5 insertions(+), 1 deletion(-) 2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/client/global/qwaylandclientextension.cpp b/src/client/global/qwaylandclientextension.cpp 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 --- a/src/client/global/qwaylandclientextension.cpp
+++ b/src/client/global/qwaylandclientextension.cpp +++ b/src/client/global/qwaylandclientextension.cpp
@@ -74,7 +74,10 @@ void QWaylandClientExtensionPrivate::handleRegistryGlobal(void *data, ::wl_regis @@ -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 class Q_WAYLAND_CLIENT_EXPORT QWaylandClientExtensionTemplatePrivate : public QWaylandClientExtensionPrivate
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 418580420c34c1a81fd5a4d872e41dc467c124d0 Mon Sep 17 00:00:00 2001 From 6ab275a36f59f885d8e388d85f319efbf451d02f Mon Sep 17 00:00:00 2001
From: Zhang Liang <zhanglianga@uniontech.com> From: Zhang Liang <zhanglianga@uniontech.com>
Date: Mon, 1 Feb 2021 19:29:43 +0800 Date: Mon, 1 Feb 2021 19:29:43 +0800
Subject: [PATCH 07/55] Fix: remove listener Subject: [PATCH 07/59] Fix: remove listener
Add the operation for removing the listener form listener list 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(-) 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -456,9 +456,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data) @@ -456,9 +456,10 @@ void QWaylandDisplay::addRegistryListener(RegistryListener listener, void *data)
@ -29,5 +29,5 @@ index 78e387bc..280e63bd 100644
uint32_t QWaylandDisplay::currentTimeMillisec() uint32_t QWaylandDisplay::currentTimeMillisec()
-- --
2.40.0 2.46.0

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

@ -1,7 +1,7 @@
From 046a799372b78ab843b26c2312bb563c0d50adcb Mon Sep 17 00:00:00 2001 From c3ea1a07fda2579ab7285532679eed4fb346265d Mon Sep 17 00:00:00 2001
From: Jan Blackquill <uhhadd@gmail.com> From: Jan Blackquill <uhhadd@gmail.com>
Date: Tue, 24 Aug 2021 14:36:34 -0400 Date: Tue, 24 Aug 2021 14:36:34 -0400
Subject: [PATCH 09/55] Correctly detect if image format is supported by Subject: [PATCH 09/59] Correctly detect if image format is supported by
QImageWriter QImageWriter
The code queries potential image formats by stripping a mimetype of its 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(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/shared/qwaylandmimehelper.cpp b/src/shared/qwaylandmimehelper.cpp 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 --- a/src/shared/qwaylandmimehelper.cpp
+++ b/src/shared/qwaylandmimehelper.cpp +++ b/src/shared/qwaylandmimehelper.cpp
@@ -60,7 +60,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString & @@ -60,7 +60,7 @@ QByteArray QWaylandMimeHelper::getByteArray(QMimeData *mimeData, const QString &
@ -64,5 +64,5 @@ index a5fdd34d..051a91dc 100644
fmt = imgFmt; fmt = imgFmt;
} }
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 3bb880d6b828f934f69608af958963c9eedc4e74 Mon Sep 17 00:00:00 2001 From 8bb1b5e9a95a0013bf5ab3fb3192d7917c7e6a65 Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <gbsneto@gnome.org> From: Georges Basile Stavracas Neto <gbsneto@gnome.org>
Date: Thu, 27 May 2021 19:55:04 -0300 Date: Thu, 27 May 2021 19:55:04 -0300
Subject: [PATCH 10/55] 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 The main QWaylandWindow method that is executed when handling updates is
QWaylandWindow::handleUpdate(). This method always, unconditionally queues 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(+) 2 files changed, 6 insertions(+)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index df2dcdaa..23816895 100644 index d57094a7..9de284de 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -1192,6 +1192,10 @@ void QWaylandWindow::requestUpdate() @@ -1199,6 +1199,10 @@ void QWaylandWindow::requestUpdate()
void QWaylandWindow::handleUpdate() void QWaylandWindow::handleUpdate()
{ {
qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread(); qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread();
@ -53,7 +53,7 @@ index df2dcdaa..23816895 100644
QReadLocker lock(&mSurfaceLock); QReadLocker lock(&mSurfaceLock);
if (!mSurface) if (!mSurface)
diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp
index 2fdd0a7c..e2593314 100644 index 1423d647..46f07c0a 100644
--- a/tests/auto/client/xdgshell/tst_xdgshell.cpp --- a/tests/auto/client/xdgshell/tst_xdgshell.cpp
+++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp +++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp
@@ -138,6 +138,7 @@ void tst_xdgshell::configureSize() @@ -138,6 +138,7 @@ void tst_xdgshell::configureSize()
@ -73,5 +73,5 @@ index 2fdd0a7c..e2593314 100644
void tst_xdgshell::popup() void tst_xdgshell::popup()
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From a0ab21120ae0d0976d1c554aa72f00d4b3d35de9 Mon Sep 17 00:00:00 2001 From 32a53f406df6b324516b3244ba9966559c9f10ac Mon Sep 17 00:00:00 2001
From: Georges Basile Stavracas Neto <gbsneto@gnome.org> From: Georges Basile Stavracas Neto <gbsneto@gnome.org>
Date: Thu, 27 May 2021 20:02:53 -0300 Date: Thu, 27 May 2021 20:02:53 -0300
Subject: [PATCH 11/55] Client: Always destroy frame callback in the actual Subject: [PATCH 11/59] Client: Always destroy frame callback in the actual
callback callback
It's good hygiene to destroy all frame callbacks. Destroy the 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(-) 1 file changed, 5 insertions(+), 6 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 23816895..d3f28d68 100644 index 9de284de..e0093013 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -635,9 +635,13 @@ void QWaylandWindow::commit() @@ -635,9 +635,13 @@ void QWaylandWindow::commit()
@ -41,7 +41,7 @@ index 23816895..d3f28d68 100644
window->handleFrameCallback(); window->handleFrameCallback();
} }
}; };
@@ -1201,11 +1205,6 @@ void QWaylandWindow::handleUpdate() @@ -1208,11 +1212,6 @@ void QWaylandWindow::handleUpdate()
if (!mSurface) if (!mSurface)
return; return;
@ -54,5 +54,5 @@ index 23816895..d3f28d68 100644
struct ::wl_surface *wrappedSurface = reinterpret_cast<struct ::wl_surface *>(wl_proxy_create_wrapper(mSurface->object())); 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); wl_proxy_set_queue(reinterpret_cast<wl_proxy *>(wrappedSurface), mFrameQueue.queue);
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From d40acfcc33ae9f8d105f196d1af03a640a02db0b Mon Sep 17 00:00:00 2001 From 274dfaca7697308a1189fb980627bef10701ce72 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A9ven=20Car?= <meven.car@enioka.com> From: =?UTF-8?q?M=C3=A9ven=20Car?= <meven.car@enioka.com>
Date: Wed, 18 Aug 2021 18:28:20 +0200 Date: Wed, 18 Aug 2021 18:28:20 +0200
Subject: [PATCH 12/55] Wayland client: use wl_keyboard to determine active Subject: [PATCH 12/59] Wayland client: use wl_keyboard to determine active
state state
Commit f497a5bb87270174b8e0106b7eca1992d44ff15d made QWaylandDisplay 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(-) 13 files changed, 39 insertions(+), 66 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -579,14 +579,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic @@ -579,14 +579,10 @@ void QWaylandDisplay::handleKeyboardFocusChanged(QWaylandInputDevice *inputDevic
@ -95,7 +95,7 @@ index 1bad8b67..15104d65 100644
void blockingReadEvents(); void blockingReadEvents();
void flushRequests(); void flushRequests();
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index d3f28d68..b363c352 100644 index e0093013..bba43a54 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -96,7 +96,6 @@ QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display) @@ -96,7 +96,6 @@ QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display)
@ -115,7 +115,7 @@ index d3f28d68..b363c352 100644
} }
QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface) QWaylandWindow *QWaylandWindow::fromWlSurface(::wl_surface *surface)
@@ -1105,10 +1106,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab) @@ -1112,10 +1113,18 @@ bool QWaylandWindow::setMouseGrabEnabled(bool grab)
return true; return true;
} }
@ -234,7 +234,7 @@ index 261f8cbb..c1bcd5c6 100644
private: private:
QScopedPointer<QWaylandXdgShellV6> m_xdgShell; QScopedPointer<QWaylandXdgShellV6> m_xdgShell;
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 1f51562b..b7383e19 100644 index a4811b08..b57b2c35 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -67,11 +67,6 @@ QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface) @@ -67,11 +67,6 @@ QWaylandXdgSurface::Toplevel::Toplevel(QWaylandXdgSurface *xdgSurface)
@ -309,7 +309,7 @@ index b6caa6c9..2f929f98 100644
private: private:
QScopedPointer<QWaylandXdgShell> m_xdgShell; QScopedPointer<QWaylandXdgShell> m_xdgShell;
diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp
index e2593314..73d1eb9c 100644 index 46f07c0a..1da70ff2 100644
--- a/tests/auto/client/xdgshell/tst_xdgshell.cpp --- a/tests/auto/client/xdgshell/tst_xdgshell.cpp
+++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp +++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp
@@ -31,6 +31,7 @@ @@ -31,6 +31,7 @@
@ -335,7 +335,7 @@ index e2593314..73d1eb9c 100644
+ Qt::WindowActive)); // Just make sure it eventually get's set correctly + Qt::WindowActive)); // Just make sure it eventually get's set correctly
const QSize screenSize(640, 480); const QSize screenSize(640, 480);
const uint maximizedSerial = exec([=] { const uint maximizedSerial = exec([&] {
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 23327bb4cdc00b47e0f96efca2fe494540f01601 Mon Sep 17 00:00:00 2001 From 21104e57db0aece854f59da13579186e6b52711a Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Fri, 16 Jul 2021 13:00:03 +0200 Date: Fri, 16 Jul 2021 13:00:03 +0200
Subject: [PATCH 13/55] 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 is opened
If we open a new popup or a window within the same app we have to avoid 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(-) 2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -601,6 +601,19 @@ void QWaylandDisplay::handleWaylandSync() @@ -601,6 +601,19 @@ void QWaylandDisplay::handleWaylandSync()
@ -45,10 +45,10 @@ index 1568052e..aa8808e9 100644
const wl_callback_listener QWaylandDisplay::syncCallbackListener = { const wl_callback_listener QWaylandDisplay::syncCallbackListener = {
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index e931d1f5..5d704795 100644 index 5bd51385..988d51af 100644
--- a/src/client/qwaylandinputdevice.cpp --- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp
@@ -1304,14 +1304,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed() @@ -1309,14 +1309,6 @@ void QWaylandInputDevice::Keyboard::handleFocusDestroyed()
void QWaylandInputDevice::Keyboard::handleFocusLost() void QWaylandInputDevice::Keyboard::handleFocusLost()
{ {
mFocus = nullptr; mFocus = nullptr;
@ -64,5 +64,5 @@ index e931d1f5..5d704795 100644
mRepeatTimer.stop(); mRepeatTimer.stop();
} }
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From e0e004c77140da5e454dadf4d6809c1603b5735d Mon Sep 17 00:00:00 2001 From e0f612dcae95df15c60e4b4684f6dbcd8095152c Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Tue, 16 Feb 2021 09:51:47 +0000 Date: Tue, 16 Feb 2021 09:51:47 +0000
Subject: [PATCH 14/55] Client: Implement DataDeviceV3 Subject: [PATCH 14/59] Client: Implement DataDeviceV3
DataDeviceV2 fixes a leak of DataDevice resources. 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(-) 12 files changed, 153 insertions(+), 46 deletions(-)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp 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 --- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp +++ b/src/client/qwaylanddatadevice.cpp
@@ -72,6 +72,8 @@ QWaylandDataDevice::QWaylandDataDevice(QWaylandDataDeviceManager *manager, QWayl @@ -72,6 +72,8 @@ QWaylandDataDevice::QWaylandDataDevice(QWaylandDataDeviceManager *manager, QWayl
@ -340,10 +340,10 @@ index 9cf1483c..6f667398 100644
diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp diff --git a/src/client/qwaylanddatasource.cpp b/src/client/qwaylanddatasource.cpp
index f45122fb..5599cbd4 100644 index c86c1416..321170a6 100644
--- a/src/client/qwaylanddatasource.cpp --- a/src/client/qwaylanddatasource.cpp
+++ b/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) @@ -105,7 +105,32 @@ void QWaylandDataSource::data_source_send(const QString &mime_type, int32_t fd)
void QWaylandDataSource::data_source_target(const QString &mime_type) void QWaylandDataSource::data_source_target(const QString &mime_type)
{ {
@ -378,11 +378,11 @@ index f45122fb..5599cbd4 100644
} }
diff --git a/src/client/qwaylanddatasource_p.h b/src/client/qwaylanddatasource_p.h diff --git a/src/client/qwaylanddatasource_p.h b/src/client/qwaylanddatasource_p.h
index 25afff79..96f07bc3 100644 index 520b3165..089c5485 100644
--- a/src/client/qwaylanddatasource_p.h --- a/src/client/qwaylanddatasource_p.h
+++ b/src/client/qwaylanddatasource_p.h +++ b/src/client/qwaylanddatasource_p.h
@@ -77,17 +77,25 @@ public: @@ -75,16 +75,24 @@ public:
QMimeData *mimeData() const; ~QWaylandDataSource() override;
Q_SIGNALS: Q_SIGNALS:
- void targetChanged(const QString &mime_type); - void targetChanged(const QString &mime_type);
@ -401,7 +401,6 @@ index 25afff79..96f07bc3 100644
+ void data_source_action(uint32_t action) override; + void data_source_action(uint32_t action) override;
private: private:
QWaylandDisplay *m_display = nullptr;
QMimeData *m_mime_data = nullptr; QMimeData *m_mime_data = nullptr;
+ bool m_accepted = false; + bool m_accepted = false;
+ Qt::DropAction m_dropAction = Qt::IgnoreAction; + 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 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -356,7 +356,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
@ -509,5 +508,5 @@ index 1568b3b9..067410d0 100644
class DataDeviceCompositor : public DefaultCompositor { class DataDeviceCompositor : public DefaultCompositor {
public: public:
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From f3900786ebe46aefbecbb2a37cb175846ca0dfc2 Mon Sep 17 00:00:00 2001 From f3c9926d5c0735fe9514240b3eb6be781b4bacd0 Mon Sep 17 00:00:00 2001
From: Arjen Hiemstra <ahiemstra@heimr.nl> From: Arjen Hiemstra <ahiemstra@heimr.nl>
Date: Thu, 18 Nov 2021 13:05:30 +0100 Date: Thu, 18 Nov 2021 13:05:30 +0100
Subject: [PATCH 15/55] 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 we're done with it
In certain cases, most notably when performing drag and drop operations In certain cases, most notably when performing drag and drop operations
@ -63,5 +63,5 @@ index 747f0190..46f629ac 100644
private: private:
QWaylandDisplay *m_display = nullptr; QWaylandDisplay *m_display = nullptr;
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 9edd2a05c79a1c40867440826c830c76136152da Mon Sep 17 00:00:00 2001 From 9cafe8145f1d1750a4c06c802266c8bbf9dba049 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Sun, 14 Nov 2021 13:54:19 +0000 Date: Sun, 14 Nov 2021 13:54:19 +0000
Subject: [PATCH 16/55] 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 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 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(-) 1 file changed, 1 deletion(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index b363c352..b98435ed 100644 index bba43a54..41e56d24 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -437,7 +437,6 @@ void QWaylandWindow::setVisible(bool visible) @@ -437,7 +437,6 @@ void QWaylandWindow::setVisible(bool visible)
@ -34,5 +34,5 @@ index b363c352..b98435ed 100644
setGeometry(windowGeometry()); setGeometry(windowGeometry());
// Don't flush the events here, or else the newly visible window may start drawing, but since // Don't flush the events here, or else the newly visible window may start drawing, but since
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 5889bb845d951a7877201bca97ffe4bb2491d966 Mon Sep 17 00:00:00 2001 From ce109ee9807512825f568a8c480c2334ffd2a8e0 Mon Sep 17 00:00:00 2001
From: Elvis Lee <kwangwoong.lee@lge.com> From: Elvis Lee <kwangwoong.lee@lge.com>
Date: Thu, 18 Feb 2021 15:45:49 +0900 Date: Thu, 18 Feb 2021 15:45:49 +0900
Subject: [PATCH 17/55] 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. Factory functions in QWaylandDisplay::registry_global() can be overridden.
Later, other classes instantiated in the registry_global can support 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(-) 3 files changed, 17 insertions(+), 7 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -160,13 +160,6 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration) @@ -160,13 +160,6 @@ QWaylandDisplay::QWaylandDisplay(QWaylandIntegration *waylandIntegration)
@ -81,5 +81,5 @@ index cd8569b1..8afecb31 100644
mDisplay->ensureScreen(); mDisplay->ensureScreen();
} }
-- --
2.40.0 2.46.0

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

@ -1,7 +1,7 @@
From d89cc9deab3f61cacfad71e8aa32d83d421d49da Mon Sep 17 00:00:00 2001 From 2e579f2d19d81bcfc01a1f8e9fa90cadec3c67f6 Mon Sep 17 00:00:00 2001
From: Adrien Faveraux <af@brain-networks.fr> From: Adrien Faveraux <af@brain-networks.fr>
Date: Fri, 26 Nov 2021 09:18:58 +0100 Date: Fri, 26 Nov 2021 09:18:58 +0100
Subject: [PATCH 19/55] Move the wayland socket polling to a separate event Subject: [PATCH 19/59] Move the wayland socket polling to a separate event
thread thread
New event threads is introduced which calls poll() on the wayland fd, 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(-) 5 files changed, 255 insertions(+), 108 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -87,10 +87,203 @@ @@ -87,10 +87,203 @@
@ -371,13 +371,15 @@ index 97fb8cbe..ebcdbd22 100644
} }
QWaylandScreen *QWaylandDisplay::screenForOutput(struct wl_output *output) const 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 } // namespace QtWaylandClient
+#include "qwaylanddisplay.moc" +#include "qwaylanddisplay.moc"
+ +
QT_END_NAMESPACE QT_END_NAMESPACE
#include "moc_qwaylanddisplay_p.cpp"
diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h diff --git a/src/client/qwaylanddisplay_p.h b/src/client/qwaylanddisplay_p.h
index 49820255..cf91b924 100644 index 49820255..cf91b924 100644
--- a/src/client/qwaylanddisplay_p.h --- a/src/client/qwaylanddisplay_p.h
@ -458,7 +460,7 @@ index 661cea53..fbf00c6b 100644
// Call after eventDispatcher is fully connected, for QWaylandDisplay::forceRoundTrip() // Call after eventDispatcher is fully connected, for QWaylandDisplay::forceRoundTrip()
mDisplay->initialize(); mDisplay->initialize();
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index b98435ed..292dd023 100644 index 41e56d24..a38f7d55 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr; @@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr;
@ -506,7 +508,7 @@ index b98435ed..292dd023 100644
if (mWaitingForFrameCallback) { if (mWaitingForFrameCallback) {
qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed"; qCDebug(lcWaylandBackingstore) << "Didn't receive frame callback in time, window should now be inexposed";
@@ -1179,8 +1182,11 @@ void QWaylandWindow::requestUpdate() @@ -1186,8 +1189,11 @@ void QWaylandWindow::requestUpdate()
Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA Q_ASSERT(hasPendingUpdateRequest()); // should be set by QPA
// If we have a frame callback all is good and will be taken care of there // 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 // 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 // This is a somewhat redundant behavior and might indicate a bug in the calling code, so log
@@ -1193,7 +1199,12 @@ void QWaylandWindow::requestUpdate() @@ -1200,7 +1206,12 @@ void QWaylandWindow::requestUpdate()
// so use invokeMethod to delay the delivery a bit. // so use invokeMethod to delay the delivery a bit.
QMetaObject::invokeMethod(this, [this] { QMetaObject::invokeMethod(this, [this] {
// Things might have changed in the meantime // Things might have changed in the meantime
@ -534,7 +536,7 @@ index b98435ed..292dd023 100644
deliverUpdateRequest(); deliverUpdateRequest();
}, Qt::QueuedConnection); }, Qt::QueuedConnection);
} }
@@ -1213,9 +1224,10 @@ void QWaylandWindow::handleUpdate() @@ -1220,9 +1231,10 @@ void QWaylandWindow::handleUpdate()
if (!mSurface) if (!mSurface)
return; return;
@ -547,7 +549,7 @@ index b98435ed..292dd023 100644
mFrameCallback = wl_surface_frame(wrappedSurface); mFrameCallback = wl_surface_frame(wrappedSurface);
wl_proxy_wrapper_destroy(wrappedSurface); wl_proxy_wrapper_destroy(wrappedSurface);
wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this); wl_callback_add_listener(mFrameCallback, &QWaylandWindow::callbackListener, this);
@@ -1225,6 +1237,8 @@ void QWaylandWindow::handleUpdate() @@ -1232,6 +1244,8 @@ void QWaylandWindow::handleUpdate()
// Start a timer for handling the case when the compositor stops sending frame callbacks. // Start a timer for handling the case when the compositor stops sending frame callbacks.
if (mFrameCallbackTimeout > 0) { if (mFrameCallbackTimeout > 0) {
QMetaObject::invokeMethod(this, [this] { 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 // True when we have called deliverRequestUpdate, but the client has not yet attached a new buffer
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 58c67c6e8f2d94cef7f8eec072ebad031769e144 Mon Sep 17 00:00:00 2001 From 6f85585ae2850bfbe8c995e22dee42d02b619b81 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org> From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 1 Feb 2022 13:05:36 +0200 Date: Tue, 1 Feb 2022 13:05:36 +0200
Subject: [PATCH 20/55] Client: Remove mWaitingForUpdateDelivery Subject: [PATCH 20/59] Client: Remove mWaitingForUpdateDelivery
Currently, mWaitingForUpdateDelivery is shared between the main thread Currently, mWaitingForUpdateDelivery is shared between the main thread
(doHandleFrameCallback()) and the frame callback event 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(-) 2 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 292dd023..de5af1bd 100644 index a38f7d55..6bf0fc4b 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -651,23 +651,18 @@ void QWaylandWindow::handleFrameCallback() @@ -651,23 +651,18 @@ void QWaylandWindow::handleFrameCallback()
@ -75,5 +75,5 @@ index 54ac67a9..cf7ce879 100644
QElapsedTimer mFrameCallbackElapsedTimer; QElapsedTimer mFrameCallbackElapsedTimer;
struct ::wl_callback *mFrameCallback = nullptr; struct ::wl_callback *mFrameCallback = nullptr;
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 71a1a9791df20307dd4eb688b0957d0f695823c5 Mon Sep 17 00:00:00 2001 From 8e83212c000dfa139da3fb0fa97cb639eee4a4ae Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Wed, 9 Feb 2022 17:20:48 +0000 Date: Wed, 9 Feb 2022 17:20:48 +0000
Subject: [PATCH 21/55] client: Simplify round trip behavior Subject: [PATCH 21/59] client: Simplify round trip behavior
The custom event queue was removed in The custom event queue was removed in
302d4ffb8549214eb4028dc3e47ec4ee4e12ffbd (2015) so the comment about not 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(-) 1 file changed, 1 insertion(+), 42 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -615,50 +615,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec() @@ -615,50 +615,9 @@ uint32_t QWaylandDisplay::currentTimeMillisec()
@ -78,5 +78,5 @@ index ebcdbd22..d371ffec 100644
bool QWaylandDisplay::supportsWindowDecoration() const bool QWaylandDisplay::supportsWindowDecoration() const
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From f584a8350503e349669744a1587634431ac0dc82 Mon Sep 17 00:00:00 2001 From c2fb3ac8ef48bcc508beb30e6d5869d7fd69ea44 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org> From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Sat, 19 Feb 2022 17:01:04 +0200 Date: Sat, 19 Feb 2022 17:01:04 +0200
Subject: [PATCH 22/55] 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 The rect is in the global coordinate system, while the opaque region
must be in the surface local coordinate system. 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(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index de5af1bd..69319228 100644 index 6bf0fc4b..9cc8cb12 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -372,7 +372,7 @@ void QWaylandWindow::setGeometry(const QRect &rect) @@ -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) void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset)
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From a9831916ac5463682b7a27db3ffcadfe0ea07ab9 Mon Sep 17 00:00:00 2001 From 0c93e66a04306e8029302aa9d1e9ca453ef6f184 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <fabian@ritter-vogt.de> From: Fabian Vogt <fabian@ritter-vogt.de>
Date: Fri, 4 Feb 2022 11:07:36 +0100 Date: Fri, 4 Feb 2022 11:07:36 +0100
Subject: [PATCH 23/55] 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 Use the dependencies as found by the "libraries" section instead of relying
on them being available in the default location (e.g. "-ldrm"). on them being available in the default location (e.g. "-ldrm").
@ -18,25 +18,15 @@ different patch and not a cherry-pick of 5fc2e1915c3a
Fixes: QTBUG-100475 Fixes: QTBUG-100475
--- ---
src/client/configure.json | 8 ++++---- src/client/configure.json | 5 +++--
src/compositor/configure.json | 34 +++++++++++++++++++++++++++++----- src/compositor/configure.json | 28 +++++++++++++++++++++++++++-
2 files changed, 33 insertions(+), 9 deletions(-) 2 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/src/client/configure.json b/src/client/configure.json diff --git a/src/client/configure.json b/src/client/configure.json
index 2f424580..29222357 100644 index 73f23362..6247f85e 100644
--- a/src/client/configure.json --- a/src/client/configure.json
+++ b/src/client/configure.json +++ b/src/client/configure.json
@@ -149,8 +149,7 @@ @@ -167,7 +167,8 @@
"#endif"
]
},
- "libs": "-ldrm",
- "use": "egl"
+ "use": "drm egl"
},
"vulkan-server-buffer": {
"label": "Vulkan Buffer Sharing",
@@ -168,7 +167,8 @@
"exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;", "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;",
"return 0;" "return 0;"
] ]
@ -46,7 +36,7 @@ index 2f424580..29222357 100644
}, },
"egl_1_5-wayland": { "egl_1_5-wayland": {
"label": "EGL 1.5 with Wayland Platform", "label": "EGL 1.5 with Wayland Platform",
@@ -183,7 +183,7 @@ @@ -182,7 +183,7 @@
"eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);" "eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND_EXT, (struct wl_display *)(nullptr), nullptr);"
] ]
}, },
@ -56,7 +46,7 @@ index 2f424580..29222357 100644
}, },
diff --git a/src/compositor/configure.json b/src/compositor/configure.json diff --git a/src/compositor/configure.json b/src/compositor/configure.json
index bcfd5215..da95d07b 100644 index c5b0f03e..031e4cc3 100644
--- a/src/compositor/configure.json --- a/src/compositor/configure.json
+++ b/src/compositor/configure.json +++ b/src/compositor/configure.json
@@ -7,6 +7,31 @@ @@ -7,6 +7,31 @@
@ -91,27 +81,7 @@ index bcfd5215..da95d07b 100644
"wayland-server": { "wayland-server": {
"label": "wayland-server", "label": "wayland-server",
"headers": "wayland-version.h", "headers": "wayland-version.h",
@@ -151,8 +176,7 @@ @@ -193,7 +218,8 @@
"#endif"
]
},
- "libs": "-ldrm",
- "use": "egl"
+ "use": "drm egl"
},
"dmabuf-client-buffer": {
"label": "Linux Client dma-buf Buffer Sharing",
@@ -176,8 +200,7 @@
"return 0;"
]
},
- "libs": "-ldrm",
- "use": "egl"
+ "use": "drm egl"
},
"vulkan-server-buffer": {
"label": "Vulkan Buffer Sharing",
@@ -195,7 +218,8 @@
"exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;", "exportAllocInfo.handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR;",
"return 0;" "return 0;"
] ]
@ -122,5 +92,5 @@ index bcfd5215..da95d07b 100644
}, },
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From c6639e225f45564def8f6729c83887ab73495e59 Mon Sep 17 00:00:00 2001 From 6c5560860a7df5195a305469592a961b0037cfba Mon Sep 17 00:00:00 2001
From: Paul Olav Tvete <paul.tvete@qt.io> From: Paul Olav Tvete <paul.tvete@qt.io>
Date: Tue, 15 Mar 2022 15:59:15 +0100 Date: Tue, 15 Mar 2022 15:59:15 +0100
Subject: [PATCH 24/55] Revert "Client: Remove mWaitingForUpdateDelivery" Subject: [PATCH 24/59] Revert "Client: Remove mWaitingForUpdateDelivery"
The reverted commit introduces a severe performance regression The reverted commit introduces a severe performance regression
when a client window is resized while a QtQuick renderthread 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(-) 2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 69319228..a87e11aa 100644 index 9cc8cb12..3d1be31c 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -658,11 +658,17 @@ void QWaylandWindow::handleFrameCallback() @@ -658,11 +658,17 @@ void QWaylandWindow::handleFrameCallback()
@ -55,5 +55,5 @@ index cf7ce879..54ac67a9 100644
QElapsedTimer mFrameCallbackElapsedTimer; QElapsedTimer mFrameCallbackElapsedTimer;
struct ::wl_callback *mFrameCallback = nullptr; struct ::wl_callback *mFrameCallback = nullptr;
-- --
2.40.0 2.46.0

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

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

@ -1,7 +1,7 @@
From 2197557879ae1e3459e715dbc20b21e8652cb972 Mon Sep 17 00:00:00 2001 From 264c9a77b8f277860a85f76b75864ee627133017 Mon Sep 17 00:00:00 2001
From: Ulf Hermann <ulf.hermann@qt.io> From: Ulf Hermann <ulf.hermann@qt.io>
Date: Tue, 22 Feb 2022 12:31:08 +0100 Date: Tue, 22 Feb 2022 12:31:08 +0100
Subject: [PATCH 27/55] Reduce memory leakage Subject: [PATCH 27/59] Reduce memory leakage
We need to clean up the event queue when we're done. 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(+) 1 file changed, 3 insertions(+)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -381,6 +381,9 @@ QWaylandDisplay::~QWaylandDisplay(void) @@ -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 // Steps which is called just after constructor. This separates registry_global() out of the constructor
-- --
2.40.0 2.46.0

@ -1,32 +0,0 @@
From d9b04ba05ed479b577579e6a34d97fb906791f69 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/55] 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.0

@ -1,7 +1,7 @@
From 9265dae0d87eaf2a0dfc8a67c46f6c11bd14d2ab Mon Sep 17 00:00:00 2001 From a91e358bcfaa8195dfadd94b5ccd0a5faad9a82b Mon Sep 17 00:00:00 2001
From: Weng Xuetian <wengxt@gmail.com> From: Weng Xuetian <wengxt@gmail.com>
Date: Wed, 20 Jul 2022 15:57:40 -0700 Date: Wed, 20 Jul 2022 15:57:40 -0700
Subject: [PATCH 29/55] Only close popup in the the hierchary Subject: [PATCH 28/59] Only close popup in the the hierchary
Imagine following event sequences: Imagine following event sequences:
1. a tooltip is shown. activePopups = {tooltip} 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(-) 9 files changed, 136 insertions(+), 30 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 264ca59b..9e82c174 100644 index 014e2d87..1e916ca1 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -239,6 +239,7 @@ bool QWaylandWindow::shouldCreateSubSurface() const @@ -239,6 +239,7 @@ bool QWaylandWindow::shouldCreateSubSurface() const
@ -81,7 +81,7 @@ index 264ca59b..9e82c174 100644
reset(); reset();
} }
} }
@@ -1297,6 +1280,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea) @@ -1304,6 +1287,20 @@ void QWaylandWindow::setOpaqueArea(const QRegion &opaqueArea)
wl_region_destroy(region); wl_region_destroy(region);
} }
@ -209,7 +209,7 @@ index 8c371661..151c78e3 100644
auto *shell = m_xdgSurface->m_shell; auto *shell = m_xdgSurface->m_shell;
Q_ASSERT(shell->m_topmostGrabbingPopup == this); Q_ASSERT(shell->m_topmostGrabbingPopup == this);
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index b7383e19..962001b3 100644 index b57b2c35..bca8ad83 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/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 @@ -195,12 +195,17 @@ QtWayland::xdg_toplevel::resize_edge QWaylandXdgSurface::Toplevel::convertToResi
@ -246,10 +246,10 @@ index b7383e19..962001b3 100644
Q_ASSERT(shell->m_topmostGrabbingPopup == this); Q_ASSERT(shell->m_topmostGrabbingPopup == this);
- shell->m_topmostGrabbingPopup = m_parent->m_popup; - shell->m_topmostGrabbingPopup = m_parent->m_popup;
+ shell->m_topmostGrabbingPopup = m_parentXdgSurface ? m_parentXdgSurface->m_popup : nullptr; + shell->m_topmostGrabbingPopup = m_parentXdgSurface ? m_parentXdgSurface->m_popup : nullptr;
} m_grabbing = false;
}
@@ -393,8 +402,6 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) // Synthesize Qt enter/leave events for popup
@@ -403,8 +412,6 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent)
{ {
Q_ASSERT(!m_toplevel && !m_popup); Q_ASSERT(!m_toplevel && !m_popup);
@ -258,10 +258,10 @@ index b7383e19..962001b3 100644
auto positioner = new QtWayland::xdg_positioner(m_shell->create_positioner()); auto positioner = new QtWayland::xdg_positioner(m_shell->create_positioner());
// set_popup expects a position relative to the parent // set_popup expects a position relative to the parent
QPoint transientPos = m_window->geometry().topLeft(); // this is absolute QPoint transientPos = m_window->geometry().topLeft(); // this is absolute
@@ -411,8 +418,9 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent) @@ -419,8 +426,9 @@ void QWaylandXdgSurface::setPopup(QWaylandWindow *parent)
| QtWayland::xdg_positioner::constraint_adjustment_slide_y positioner->set_size(m_window->geometry().width(), m_window->geometry().height());
| QtWayland::xdg_positioner::constraint_adjustment_flip_x positioner->set_constraint_adjustment(QtWayland::xdg_positioner::constraint_adjustment_slide_x
| QtWayland::xdg_positioner::constraint_adjustment_flip_y); | QtWayland::xdg_positioner::constraint_adjustment_slide_y);
- m_popup = new Popup(this, parentXdgSurface, positioner); - m_popup = new Popup(this, parentXdgSurface, positioner);
+ m_popup = new Popup(this, parent, positioner); + m_popup = new Popup(this, parent, positioner);
positioner->destroy(); positioner->destroy();
@ -292,7 +292,7 @@ index 96785205..4b518f0a 100644
}; };
diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp diff --git a/tests/auto/client/xdgshell/tst_xdgshell.cpp b/tests/auto/client/xdgshell/tst_xdgshell.cpp
index 73d1eb9c..747875b4 100644 index 1da70ff2..c5271f63 100644
--- a/tests/auto/client/xdgshell/tst_xdgshell.cpp --- a/tests/auto/client/xdgshell/tst_xdgshell.cpp
+++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp +++ b/tests/auto/client/xdgshell/tst_xdgshell.cpp
@@ -46,6 +46,7 @@ private slots: @@ -46,6 +46,7 @@ private slots:
@ -397,5 +397,5 @@ index 73d1eb9c..747875b4 100644
void tst_xdgshell::switchPopups() void tst_xdgshell::switchPopups()
{ {
-- --
2.40.0 2.46.0

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

@ -1,28 +0,0 @@
From 08ce7a21017e1f9553cd0f4af1316e38709d5553 Mon Sep 17 00:00:00 2001
From: Ville Voutilainen <ville.voutilainen@qt.io>
Date: Mon, 18 Jan 2021 12:31:31 +0200
Subject: [PATCH 30/55] Build fixes for GCC 11
Task-number: QTBUG-89977
Change-Id: I7e3d0964087865e8062f539f851a61f3df017dae
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 1aa6ec2c778504d96543f6cdc2b9199a7b066fc1)
---
tests/auto/client/shared/corecompositor.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/tests/auto/client/shared/corecompositor.cpp b/tests/auto/client/shared/corecompositor.cpp
index 5c6c83ba..fa9b7662 100644
--- a/tests/auto/client/shared/corecompositor.cpp
+++ b/tests/auto/client/shared/corecompositor.cpp
@@ -27,6 +27,7 @@
****************************************************************************/
#include "corecompositor.h"
+#include <thread>
namespace MockCompositor {
--
2.40.0

@ -1,7 +1,7 @@
From 2d3d929c86c5aab6dd30e02ade25697d49617335 Mon Sep 17 00:00:00 2001 From fa3f3172fd12b10c25fc56cce1f85fbd17fa3a5c Mon Sep 17 00:00:00 2001
From: Paul Olav Tvete <paul.tvete@qt.io> From: Paul Olav Tvete <paul.tvete@qt.io>
Date: Mon, 6 Jul 2020 14:37:35 +0200 Date: Mon, 6 Jul 2020 14:37:35 +0200
Subject: [PATCH 32/55] 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 Prefer the newer, recommended damage_buffer when the compositor
supports it. supports it.
@ -20,7 +20,7 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
6 files changed, 28 insertions(+), 6 deletions(-) 6 files changed, 28 insertions(+), 6 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -493,7 +493,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
@ -33,7 +33,7 @@ index 1b9ec699..6898a881 100644
} else if (interface == QStringLiteral("wl_shm")) { } else if (interface == QStringLiteral("wl_shm")) {
mShm.reset(new QWaylandShm(this, version, id)); mShm.reset(new QWaylandShm(this, version, id));
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 0a5fc15b..5b7f9df9 100644 index d98a70e4..60665394 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -563,7 +563,11 @@ void QWaylandWindow::damage(const QRect &rect) @@ -563,7 +563,11 @@ void QWaylandWindow::damage(const QRect &rect)
@ -127,5 +127,5 @@ index 949dc23d..d176837e 100644
uint32_t callback) override; uint32_t callback) override;
void surface_commit(Resource *resource) override; void surface_commit(Resource *resource) override;
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From bdf04e01153aeda2c2bafa059dd21dc377eb82e1 Mon Sep 17 00:00:00 2001 From 6fde7db552af605bfe5884c3525bbc1da951791f Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Fri, 5 Aug 2022 15:00:31 +0100 Date: Fri, 5 Aug 2022 15:00:31 +0100
Subject: [PATCH 33/55] 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 When we get a touch_cancel event all touches should be treated as
lifted. lifted.
@ -23,10 +23,10 @@ Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
4 files changed, 39 insertions(+) 4 files changed, 39 insertions(+)
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 5d704795..5b880984 100644 index 988d51af..3b30b853 100644
--- a/src/client/qwaylandinputdevice.cpp --- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp
@@ -1392,6 +1392,7 @@ void QWaylandInputDevice::Touch::touch_cancel() @@ -1397,6 +1397,7 @@ void QWaylandInputDevice::Touch::touch_cancel()
if (touchExt) if (touchExt)
touchExt->touchCanceled(); touchExt->touchCanceled();
@ -112,5 +112,5 @@ index 296dbf47..210d8ddb 100644
Seat *m_seat = nullptr; Seat *m_seat = nullptr;
}; };
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From e920173ee9cef08d10ad8a7e21ae7a5a2c2d7530 Mon Sep 17 00:00:00 2001 From c3299f5f31f9639b9c6e25359213fe44b6f09a7f Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Thu, 3 Feb 2022 19:42:33 +0000 Date: Thu, 3 Feb 2022 19:42:33 +0000
Subject: [PATCH 34/55] 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 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 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(-) 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 5b7f9df9..117e3383 100644 index 60665394..e5d1a97d 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -358,11 +358,12 @@ void QWaylandWindow::setGeometry(const QRect &rect) @@ -358,11 +358,12 @@ void QWaylandWindow::setGeometry(const QRect &rect)
@ -35,5 +35,5 @@ index 5b7f9df9..117e3383 100644
} }
QRect exposeGeometry(QPoint(), geometry().size()); QRect exposeGeometry(QPoint(), geometry().size());
-- --
2.40.0 2.46.0

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

@ -1,7 +1,7 @@
From 35c03e72007630040659188b2bc7f47b1df82577 Mon Sep 17 00:00:00 2001 From d3a39dcd13600f00593aef62f12f771f92394d54 Mon Sep 17 00:00:00 2001
From: Fushan Wen <qydwhotmail@gmail.com> From: Fushan Wen <qydwhotmail@gmail.com>
Date: Sun, 18 Sep 2022 18:17:18 +0800 Date: Sun, 18 Sep 2022 18:17:18 +0800
Subject: [PATCH 39/55] Call `finishDrag()` in Subject: [PATCH 34/59] Call `finishDrag()` in
`QWaylandDataDevice::dragSourceCancelled()` `QWaylandDataDevice::dragSourceCancelled()`
Drags can either get finished or cancelled. If a drag is finished Drags can either get finished or cancelled. If a drag is finished
@ -22,7 +22,7 @@ BUG: 446111
1 file changed, 1 insertion(+) 1 file changed, 1 insertion(+)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp 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 --- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp +++ b/src/client/qwaylanddatadevice.cpp
@@ -296,6 +296,7 @@ void QWaylandDataDevice::selectionSourceCancelled() @@ -296,6 +296,7 @@ void QWaylandDataDevice::selectionSourceCancelled()
@ -34,5 +34,5 @@ index fbb5aa91..e3e60ed5 100644
} }
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 37ad4aeaa6dce748f5f6bcc5030be187e6320ec0 Mon Sep 17 00:00:00 2001 From 8e854aa7c6d6ba8d79e307b2922d8c8fd50609e4 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org> From: David Edmundson <davidedmundson@kde.org>
Date: Mon, 12 Sep 2022 13:28:08 +0100 Date: Mon, 12 Sep 2022 13:28:08 +0100
Subject: [PATCH 40/55] Hold surface read lock throughout Subject: [PATCH 35/59] Hold surface read lock throughout
QWaylandEglWindow::updateSurface QWaylandEglWindow::updateSurface
QWaylandEGLWindow::updateSurface is called from both the main and render 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 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 --- a/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp +++ b/src/hardwareintegration/client/wayland-egl/qwaylandeglwindow.cpp
@@ -40,6 +40,7 @@ @@ -40,6 +40,7 @@
@ -81,5 +81,5 @@ index 13dd747a..872a6237 100644
} }
-- --
2.40.0 2.46.0

@ -1,72 +0,0 @@
From 1ff4219d8c58f8356d9d12824948013cdfde6ac5 Mon Sep 17 00:00:00 2001
From: Liang Qi <liang.qi@qt.io>
Date: Fri, 11 Mar 2022 09:17:25 +0100
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
Content-Transfer-Encoding: 8bit
Fixes: QTBUG-100148
Pick-to: 6.3 6.2 5.15
Change-Id: I45e3156d7942cff9968674c0b253d15be7235921
Reviewed-by: Tang Haixiang <tanghaixiang@uniontech.com>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit 73d35d3117722cef8e94f0d2036c56ad0a5ddae9)
* asturmlechner 2022-09-08: Resolve conflict with dev branch commits
b6a3a938abd4a7fdb7ea96a38485b53f394fba17 and
f8e3257e9b1e22d52e9c221c62b8d9b6dd1151a3
---
.../xdg-shell/qwaylandxdgshell.cpp | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
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()
auto *shell = m_xdgSurface->m_shell;
Q_ASSERT(shell->m_topmostGrabbingPopup == this);
shell->m_topmostGrabbingPopup = m_parentXdgSurface ? m_parentXdgSurface->m_popup : nullptr;
+ m_grabbing = false;
+
+ // Synthesize Qt enter/leave events for popup
+ QWindow *leave = nullptr;
+ if (m_xdgSurface && m_xdgSurface->window())
+ leave = m_xdgSurface->window()->window();
+ QWindowSystemInterface::handleLeaveEvent(leave);
+
+ if (QWindow *enter = QGuiApplication::topLevelAt(QCursor::pos()))
+ QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos());
}
}
@@ -442,6 +452,23 @@ void QWaylandXdgSurface::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevic
}
setPopup(parent);
m_popup->grab(device, serial);
+
+ // Synthesize Qt enter/leave events for popup
+ if (!parent)
+ return;
+ QWindow *current = QGuiApplication::topLevelAt(QCursor::pos());
+ QWindow *leave = parent->window();
+ if (current != leave)
+ return;
+
+ QWindowSystemInterface::handleLeaveEvent(leave);
+
+ QWindow *enter = nullptr;
+ if (m_popup && m_popup->m_xdgSurface && m_popup->m_xdgSurface->window())
+ enter = m_popup->m_xdgSurface->window()->window();
+
+ if (enter)
+ QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos());
}
void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
--
2.40.0

@ -1,7 +1,7 @@
From 61fccee064cd8cea698a530c76113f8487d11d68 Mon Sep 17 00:00:00 2001 From 0c7dc84573f85d464ddfe13f3352b284f445ba4e Mon Sep 17 00:00:00 2001
From: David Redondo <qt@david-redondo.de> From: David Redondo <qt@david-redondo.de>
Date: Wed, 8 Jun 2022 11:25:59 +0200 Date: Wed, 8 Jun 2022 11:25:59 +0200
Subject: [PATCH 42/55] 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 screen
We can't know the actual position of a window on the screen. This causes We can't know the actual position of a window on the screen. This causes
@ -39,10 +39,10 @@ index fbf00c6b..54861600 100644
QWaylandIntegration::~QWaylandIntegration() QWaylandIntegration::~QWaylandIntegration()
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 1f2d56b5..d3459168 100644 index e5d1a97d..464441b1 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -361,8 +361,13 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect) @@ -350,8 +350,13 @@ void QWaylandWindow::setGeometry_helper(const QRect &rect)
} }
} }
@ -57,7 +57,7 @@ index 1f2d56b5..d3459168 100644
setGeometry_helper(rect); setGeometry_helper(rect);
if (window()->isVisible() && rect.isValid()) { if (window()->isVisible() && rect.isValid()) {
@@ -1044,6 +1049,13 @@ void QWaylandWindow::handleScreensChanged() @@ -1033,6 +1038,13 @@ void QWaylandWindow::handleScreensChanged()
QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen()); QWindowSystemInterface::handleWindowScreenChanged(window(), newScreen->QPlatformScreen::screen());
mLastReportedScreen = newScreen; mLastReportedScreen = newScreen;
@ -72,7 +72,7 @@ index 1f2d56b5..d3459168 100644
int scale = newScreen->isPlaceholder() ? 1 : static_cast<QWaylandScreen *>(newScreen)->scale(); int scale = newScreen->isPlaceholder() ? 1 : static_cast<QWaylandScreen *>(newScreen)->scale();
if (scale != mScale) { if (scale != mScale) {
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index e18609d9..a8ee2696 100644 index ea3d1995..487a91a6 100644
--- a/src/client/qwaylandwindow_p.h --- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h +++ b/src/client/qwaylandwindow_p.h
@@ -98,6 +98,9 @@ public: @@ -98,6 +98,9 @@ public:
@ -86,5 +86,5 @@ index e18609d9..a8ee2696 100644
virtual void ensureSize(); virtual void ensureSize();
WId winId() const override; WId winId() const override;
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From dd605d5fec6921a7befbfe2c40c2ae87935aa9c4 Mon Sep 17 00:00:00 2001 From d177cf9520a415ff46ca9351c4ddbf72d52b460f Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org> From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Thu, 17 Nov 2022 15:25:37 +0200 Date: Thu, 17 Nov 2022 15:25:37 +0200
Subject: [PATCH 44/55] 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 This lets libwayland-server avoid installing a SIGBUS handler when it
wants to mmap() the backing file and access the contents of shared wants to mmap() the backing file and access the contents of shared
@ -49,5 +49,5 @@ index dc7ff670..98acd42d 100644
QScopedPointer<QFile> filePointer; QScopedPointer<QFile> filePointer;
-- --
2.40.0 2.46.0

@ -1,40 +0,0 @@
From 137958eec28cb8209069f9a3a3ab778202773ff6 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 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
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.0

@ -1,43 +0,0 @@
From 0064749af275016ae3b4b09964d8d31d756d3468 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 38/55] 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.0

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

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

@ -1,7 +1,7 @@
From ef5b1f40b684927f73bc04ab84c396be074cb61e Mon Sep 17 00:00:00 2001 From 085ca8ffe2e74ba8ba217ab32d1b84024cdd2802 Mon Sep 17 00:00:00 2001
From: Weng Xuetian <wengxt@gmail.com> From: Weng Xuetian <wengxt@gmail.com>
Date: Sun, 27 Nov 2022 12:44:40 -0800 Date: Sun, 27 Nov 2022 12:44:40 -0800
Subject: [PATCH 47/55] Fix frame sync related to unprotected multithread Subject: [PATCH 40/59] Fix frame sync related to unprotected multithread
access access
There is a few crashes happens in real life that frame callback is 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(-) 2 files changed, 43 insertions(+), 32 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index f322a8d6..6337db00 100644 index 464441b1..96de798b 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -252,13 +252,16 @@ void QWaylandWindow::reset() @@ -252,13 +252,16 @@ void QWaylandWindow::reset()
@ -76,7 +76,7 @@ index f322a8d6..6337db00 100644
mWaitingForFrameCallback = false; mWaitingForFrameCallback = false;
mFrameCallbackElapsedTimer.invalidate(); mFrameCallbackElapsedTimer.invalidate();
@@ -1169,19 +1175,24 @@ void QWaylandWindow::timerEvent(QTimerEvent *event) @@ -1172,19 +1178,24 @@ void QWaylandWindow::timerEvent(QTimerEvent *event)
if (event->timerId() != mFrameCallbackCheckIntervalTimerId) if (event->timerId() != mFrameCallbackCheckIntervalTimerId)
return; return;
@ -112,7 +112,7 @@ index f322a8d6..6337db00 100644
} }
void QWaylandWindow::requestUpdate() void QWaylandWindow::requestUpdate()
@@ -1224,15 +1235,14 @@ void QWaylandWindow::handleUpdate() @@ -1227,15 +1238,14 @@ void QWaylandWindow::handleUpdate()
{ {
qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread(); qCDebug(lcWaylandBackingstore) << "handleUpdate" << QThread::currentThread();
@ -162,5 +162,5 @@ index 487a91a6..2f219d8c 100644
static QWaylandWindow *mMouseGrab; static QWaylandWindow *mMouseGrab;
-- --
2.40.0 2.46.0

@ -1,109 +0,0 @@
From 1012f1d4b5753ad63da3cca1226fb034e297ae6d Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 8 Nov 2022 16:10:18 +0200
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.
That can end up in eglSwapBuffers() using defunct wl_surface, which will
eventually lead to a crash due to the compositor posting an error.
This is partially cherry-pick of dff579147b07cd15888a47c303e36684e9930f9f
Change-Id: I044f40dd64e6672027a833379b57ccd9973d8305
---
src/client/qwaylandwindow.cpp | 13 ++++++++++++-
src/client/qwaylandwindow_p.h | 3 +++
.../client/wayland-egl/qwaylandglcontext.cpp | 6 +++++-
3 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 4ddf9fbe..1f2d56b5 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -76,6 +76,7 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr;
QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display)
: QPlatformWindow(window)
, mDisplay(display)
+ , mSurfaceLock(QReadWriteLock::Recursive)
, mResizeAfterSwap(qEnvironmentVariableIsSet("QT_WAYLAND_RESIZE_AFTER_SWAP"))
{
{
@@ -237,6 +238,16 @@ bool QWaylandWindow::shouldCreateSubSurface() const
return QPlatformWindow::parent() != nullptr;
}
+void QWaylandWindow::beginFrame()
+{
+ mSurfaceLock.lockForRead();
+}
+
+void QWaylandWindow::endFrame()
+{
+ mSurfaceLock.unlock();
+}
+
void QWaylandWindow::reset()
{
closeChildPopups();
@@ -245,10 +256,10 @@ void QWaylandWindow::reset()
delete mSubSurfaceWindow;
mSubSurfaceWindow = nullptr;
- invalidateSurface();
if (mSurface) {
emit wlSurfaceDestroyed();
QWriteLocker lock(&mSurfaceLock);
+ invalidateSurface();
mSurface.reset();
}
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index ea3d1995..e18609d9 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -207,6 +207,9 @@ public:
void handleUpdate();
void deliverUpdateRequest() override;
+ void beginFrame();
+ void endFrame();
+
void addChildPopup(QWaylandWindow* child);
void removeChildPopup(QWaylandWindow* child);
void closeChildPopups();
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
index c1f45fa6..5d6fb2bf 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
@@ -432,8 +432,10 @@ bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface)
return true;
}
- if (window->isExposed())
+ if (window->isExposed()) {
+ window->beginFrame();
window->setCanResize(false);
+ }
if (m_decorationsContext != EGL_NO_CONTEXT && !window->decoration())
window->createDecoration();
@@ -449,6 +451,7 @@ bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface)
if (!eglMakeCurrent(m_eglDisplay, eglSurface, eglSurface, m_context)) {
qWarning("QWaylandGLContext::makeCurrent: eglError: %x, this: %p \n", eglGetError(), this);
window->setCanResize(true);
+ window->endFrame();
return false;
}
@@ -502,6 +505,7 @@ void QWaylandGLContext::swapBuffers(QPlatformSurface *surface)
eglSwapBuffers(m_eglDisplay, eglSurface);
window->setCanResize(true);
+ window->endFrame();
}
GLuint QWaylandGLContext::defaultFramebufferObject(QPlatformSurface *surface) const
--
2.40.0

@ -1,7 +1,7 @@
From 21e354e7b1878a243d29466b19084083df3d0db9 Mon Sep 17 00:00:00 2001 From 01a9aef0a5630382039ba08d20427c69d43dc91e Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org> From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 27 Sep 2022 22:05:07 +0300 Date: Tue, 27 Sep 2022 22:05:07 +0300
Subject: [PATCH 48/55] Client: Handle zwp_primary_selection_device_manager_v1 Subject: [PATCH 41/59] Client: Handle zwp_primary_selection_device_manager_v1
global removal global removal
The zwp_primary_selection_device_manager_v1 global can be withdrawn if 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(-) 2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/src/client/qwaylanddisplay.cpp b/src/client/qwaylanddisplay.cpp 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 --- a/src/client/qwaylanddisplay.cpp
+++ b/src/client/qwaylanddisplay.cpp +++ b/src/client/qwaylanddisplay.cpp
@@ -519,6 +519,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
@ -46,7 +46,7 @@ index 6898a881..27f55965 100644
break; break;
} }
diff --git a/src/client/qwaylandprimaryselectionv1.cpp b/src/client/qwaylandprimaryselectionv1.cpp diff --git a/src/client/qwaylandprimaryselectionv1.cpp b/src/client/qwaylandprimaryselectionv1.cpp
index 832f9678..ea508771 100644 index 7805dd73..dac532b2 100644
--- a/src/client/qwaylandprimaryselectionv1.cpp --- a/src/client/qwaylandprimaryselectionv1.cpp
+++ b/src/client/qwaylandprimaryselectionv1.cpp +++ b/src/client/qwaylandprimaryselectionv1.cpp
@@ -54,11 +54,6 @@ QWaylandPrimarySelectionDeviceManagerV1::QWaylandPrimarySelectionDeviceManagerV1 @@ -54,11 +54,6 @@ QWaylandPrimarySelectionDeviceManagerV1::QWaylandPrimarySelectionDeviceManagerV1
@ -62,5 +62,5 @@ index 832f9678..ea508771 100644
QWaylandPrimarySelectionDeviceV1 *QWaylandPrimarySelectionDeviceManagerV1::createDevice(QWaylandInputDevice *seat) QWaylandPrimarySelectionDeviceV1 *QWaylandPrimarySelectionDeviceManagerV1::createDevice(QWaylandInputDevice *seat)
-- --
2.40.0 2.46.0

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

@ -1,103 +0,0 @@
From 3813da4b6d88320b42a7d91ae100e1567113ee72 Mon Sep 17 00:00:00 2001
From: David Edmundson <kde@davidedmundson.co.uk>
Date: Mon, 14 Nov 2022 10:43:25 +0000
Subject: [PATCH 43/55] Revert "Client: Ensure that wl_surface lives as long as
qtquick render thread needs it"
This reverts commit 81a7702a87f386a60a0ac8c902e203daae044d81
---
src/client/qwaylandwindow.cpp | 13 +------------
src/client/qwaylandwindow_p.h | 3 ---
.../client/wayland-egl/qwaylandglcontext.cpp | 6 +-----
3 files changed, 2 insertions(+), 20 deletions(-)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index d3459168..f322a8d6 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -76,7 +76,6 @@ QWaylandWindow *QWaylandWindow::mMouseGrab = nullptr;
QWaylandWindow::QWaylandWindow(QWindow *window, QWaylandDisplay *display)
: QPlatformWindow(window)
, mDisplay(display)
- , mSurfaceLock(QReadWriteLock::Recursive)
, mResizeAfterSwap(qEnvironmentVariableIsSet("QT_WAYLAND_RESIZE_AFTER_SWAP"))
{
{
@@ -238,16 +237,6 @@ bool QWaylandWindow::shouldCreateSubSurface() const
return QPlatformWindow::parent() != nullptr;
}
-void QWaylandWindow::beginFrame()
-{
- mSurfaceLock.lockForRead();
-}
-
-void QWaylandWindow::endFrame()
-{
- mSurfaceLock.unlock();
-}
-
void QWaylandWindow::reset()
{
closeChildPopups();
@@ -256,10 +245,10 @@ void QWaylandWindow::reset()
delete mSubSurfaceWindow;
mSubSurfaceWindow = nullptr;
+ invalidateSurface();
if (mSurface) {
emit wlSurfaceDestroyed();
QWriteLocker lock(&mSurfaceLock);
- invalidateSurface();
mSurface.reset();
}
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index a8ee2696..487a91a6 100644
--- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h
@@ -210,9 +210,6 @@ public:
void handleUpdate();
void deliverUpdateRequest() override;
- void beginFrame();
- void endFrame();
-
void addChildPopup(QWaylandWindow* child);
void removeChildPopup(QWaylandWindow* child);
void closeChildPopups();
diff --git a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
index 5d6fb2bf..c1f45fa6 100644
--- a/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
+++ b/src/hardwareintegration/client/wayland-egl/qwaylandglcontext.cpp
@@ -432,10 +432,8 @@ bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface)
return true;
}
- if (window->isExposed()) {
- window->beginFrame();
+ if (window->isExposed())
window->setCanResize(false);
- }
if (m_decorationsContext != EGL_NO_CONTEXT && !window->decoration())
window->createDecoration();
@@ -451,7 +449,6 @@ bool QWaylandGLContext::makeCurrent(QPlatformSurface *surface)
if (!eglMakeCurrent(m_eglDisplay, eglSurface, eglSurface, m_context)) {
qWarning("QWaylandGLContext::makeCurrent: eglError: %x, this: %p \n", eglGetError(), this);
window->setCanResize(true);
- window->endFrame();
return false;
}
@@ -505,7 +502,6 @@ void QWaylandGLContext::swapBuffers(QPlatformSurface *surface)
eglSwapBuffers(m_eglDisplay, eglSurface);
window->setCanResize(true);
- window->endFrame();
}
GLuint QWaylandGLContext::defaultFramebufferObject(QPlatformSurface *surface) const
--
2.40.0

@ -1,7 +1,7 @@
From d04d4c7fe2e00285e7d70da42094f213e13c6ed8 Mon Sep 17 00:00:00 2001 From 1ec26fd1271843760f52f19bae78b9f4acd0d260 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io> From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Mon, 23 May 2022 09:47:24 +0200 Date: Mon, 23 May 2022 09:47:24 +0200
Subject: [PATCH 50/55] 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 If the application sets an invalid minimum and maximum size
(where the minimum is higher than the maximum), then we (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(-) 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 diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index ead99989..ad666129 100644 index bca8ad83..2cc36510 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -384,10 +384,10 @@ void QWaylandXdgSurface::setSizeHints() @@ -384,10 +384,10 @@ void QWaylandXdgSurface::setSizeHints()
@ -52,5 +52,5 @@ index ead99989..ad666129 100644
maxHeight = 0; maxHeight = 0;
m_toplevel->set_max_size(maxWidth, maxHeight); m_toplevel->set_max_size(maxWidth, maxHeight);
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From fbb9d65cf158bcf63440e9839acae9238ad4e0a7 Mon Sep 17 00:00:00 2001 From 51d678d70d5665a40a64347f4c3e1709519944e1 Mon Sep 17 00:00:00 2001
From: Vlad Zahorodnii <vlad.zahorodnii@kde.org> From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Date: Tue, 22 Nov 2022 23:27:34 +0200 Date: Tue, 22 Nov 2022 23:27:34 +0200
Subject: [PATCH 51/55] 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 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 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(-) 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 5b880984..9a0fe49d 100644 index 3b30b853..74f16b70 100644
--- a/src/client/qwaylandinputdevice.cpp --- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp +++ b/src/client/qwaylandinputdevice.cpp
@@ -310,8 +310,7 @@ void QWaylandInputDevice::Pointer::updateCursor() @@ -310,8 +310,7 @@ void QWaylandInputDevice::Pointer::updateCursor()
@ -34,5 +34,5 @@ index 5b880984..9a0fe49d 100644
} }
-- --
2.40.0 2.46.0

@ -1,7 +1,7 @@
From 6897f62f603df049135347cf402a7a4037092263 Mon Sep 17 00:00:00 2001 From ce279afce294af1d175c7e500be0a77cfbba7f34 Mon Sep 17 00:00:00 2001
From: Marco Martin <notmart@gmail.com> From: Marco Martin <notmart@gmail.com>
Date: Fri, 24 Feb 2023 17:40:48 +0100 Date: Fri, 24 Feb 2023 17:40:48 +0100
Subject: [PATCH 52/55] client: Force a roundtrip when an XdgOutput is not Subject: [PATCH 45/59] client: Force a roundtrip when an XdgOutput is not
ready yet ready yet
Is possible that the server sends a surface_enter before 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(+) 4 files changed, 42 insertions(+)
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 6337db00..3b700002 100644 index 96de798b..5280a9f7 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -1042,6 +1042,8 @@ void QWaylandWindow::handleScreensChanged() @@ -1042,6 +1042,8 @@ void QWaylandWindow::handleScreensChanged()
@ -61,7 +61,7 @@ index 210d8ddb..00c439e1 100644
void output_bind_resource(Resource *resource) override; 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 diff --git a/tests/auto/client/xdgoutput/tst_xdgoutput.cpp b/tests/auto/client/xdgoutput/tst_xdgoutput.cpp
index 80429608..68e8d77a 100644 index 20f762e0..2a0cad1d 100644
--- a/tests/auto/client/xdgoutput/tst_xdgoutput.cpp --- a/tests/auto/client/xdgoutput/tst_xdgoutput.cpp
+++ b/tests/auto/client/xdgoutput/tst_xdgoutput.cpp +++ b/tests/auto/client/xdgoutput/tst_xdgoutput.cpp
@@ -55,6 +55,7 @@ private slots: @@ -55,6 +55,7 @@ private slots:
@ -73,7 +73,7 @@ index 80429608..68e8d77a 100644
void tst_xdgoutput::cleanup() void tst_xdgoutput::cleanup()
@@ -134,5 +135,39 @@ void tst_xdgoutput::changeGeometry() @@ -134,5 +135,39 @@ void tst_xdgoutput::changeGeometry()
exec([=] { remove(output(1)); }); exec([&] { remove(output(1)); });
} }
+void tst_xdgoutput::outputCreateEnterRace() +void tst_xdgoutput::outputCreateEnterRace()
@ -113,5 +113,5 @@ index 80429608..68e8d77a 100644
QCOMPOSITOR_TEST_MAIN(tst_xdgoutput) QCOMPOSITOR_TEST_MAIN(tst_xdgoutput)
#include "tst_xdgoutput.moc" #include "tst_xdgoutput.moc"
-- --
2.40.0 2.46.0

@ -0,0 +1,38 @@
From 173336beae7ec1007fd8d57b11e6855f4d249d37 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 46/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.46.0

@ -0,0 +1,42 @@
From fa30cef910a9a57fbe2f90422789882834fdac9b Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Wed, 7 Jun 2023 22:12:15 +0100
Subject: [PATCH 47/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.46.0

@ -0,0 +1,66 @@
From 31979df9078cad1519e8e37929fc84a9ed8f711c 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 48/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.46.0

@ -0,0 +1,169 @@
From 6b87344bf9eab15be34ed6a86c83b19b6eb0dde2 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 49/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 5280a9f7..38b10269 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());
@@ -1106,14 +1106,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.46.0

@ -0,0 +1,71 @@
From 94a8ee2ce3a471753f96ede7751528f8f7f83719 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 50/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 38b10269..5d01507d 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.46.0

@ -0,0 +1,37 @@
From 967e6ceca9e16cf5a5e92d63958057f84a1b54fd 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 51/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 5d01507d..5eee0414 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.46.0

@ -0,0 +1,35 @@
From aa865b7cc8f38bd8ad4a5a0cb75effa1e7dbc9ed 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 52/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 c5271f63..f2181fd6 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.46.0

@ -1,138 +0,0 @@
From 31eab11d3b6697a76cc7802d02e525c1152a42c2 Mon Sep 17 00:00:00 2001
From: Tang Haixiang <tanghaixiang@uniontech.com>
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 <davidedmundson@kde.org>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
(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

@ -0,0 +1,62 @@
From 39defe8fdbaed15868bd3fdbf4a1ae638b770753 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 53/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 5eee0414..7a9bccc1 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.46.0

@ -0,0 +1,69 @@
From 14a03df4e97188a4401e6e0cf335b13e7591ed30 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 54/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.46.0

@ -1,34 +0,0 @@
From 18c2bcec31f68aafd66d7ec503ec6511ca804d07 Mon Sep 17 00:00:00 2001
From: Aleix Pol <aleixpol@kde.org>
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 <eskil.abrahamsen-blomfeldt@qt.io>
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(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

@ -0,0 +1,52 @@
From b036434381a3e8d543f4e9de8c28fb0a8770cfec Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Wed, 17 May 2023 09:06:03 +0300
Subject: [PATCH 55/59] Client: Always populate mimedata in drags
It's possible for clients to perform a drag and drop operation within
their own client without any mimeData. A user can directly access the
original drag.
On wayland without any mimedata it's impossible for a client to accept a
drag as the mechansim involved is to either select a given mimedata
entry or an empty string. Within Qt we always accept the first format if
we accept a drag.
When dragging within our own window we also start a wayland drag so will
receive a cancel event from the compositor if the compositor doesn't
believe the client has accepted the drag.
This patch provides a dummy mimedata entry so that something can be
accepted.
Fixes: QTBUG-112161
Pick-to: 6.6 6.5 6.2 5.15
Change-Id: I6309d82e20545e10ebdb9dafde7e13a5e3be5ff2
Reviewed-by: Liang Qi <liang.qi@qt.io>
(cherry picked from commit 32fedb6fa6579711b6cb192a2e3cfb7ad1264546)
* asturmlechner 2023-10-24: Backported L1 literal as QString::fromLatin1
---
src/client/qwaylanddatadevice.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/client/qwaylanddatadevice.cpp b/src/client/qwaylanddatadevice.cpp
index 9c3308d5..07b18ab0 100644
--- a/src/client/qwaylanddatadevice.cpp
+++ b/src/client/qwaylanddatadevice.cpp
@@ -124,6 +124,12 @@ bool QWaylandDataDevice::startDrag(QMimeData *mimeData, Qt::DropActions supporte
return false;
}
+ // dragging data without mimetypes is a legal operation in Qt terms
+ // but Wayland uses a mimetype to determine if a drag is accepted or not
+ // In this rare case, insert a placeholder
+ if (mimeData->formats().isEmpty())
+ mimeData->setData(QString::fromLatin1("application/x-qt-avoid-empty-placeholder"), QByteArray("1"));
+
m_dragSource.reset(new QWaylandDataSource(m_display->dndSelectionHandler(), mimeData));
if (wl_data_device_get_version(object()) >= 3)
--
2.46.0

@ -1,41 +0,0 @@
From c4c3fc69250c01cb35aaae5ea1ea2bcc8236dff0 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 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 <liang.qi@qt.io>
(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

@ -0,0 +1,60 @@
From 7d288c916311a70b16c3a310b7a36862ce4c2268 Mon Sep 17 00:00:00 2001
From: Ilya Fedin <fedin-ilja2010@ya.ru>
Date: Sun, 3 Dec 2023 19:12:03 +0400
Subject: [PATCH 56/59] Client: Fix enter event cursor position with xdg-popup
and QHighDpiScaling
QWindowSystemInterface::handleEnterEvent accepts device-dependent
position while QCursor::pos provides device-independent position.
Use QWaylandCursor::pos instead.
Pick-to: 6.6 6.5 6.2 5.15
Change-Id: I70d2997610f7a34c6763bd4f10f20a65c3debdbe
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 8e57e8b51b2b701c5520f37b7d78de5b3c488500)
---
.../shellintegration/xdg-shell/qwaylandxdgshell.cpp | 13 +++++++++----
1 file changed, 9 insertions(+), 4 deletions(-)
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index 535c3398..9c6cbb81 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -44,6 +44,7 @@
#include <QtWaylandClient/private/qwaylandwindow_p.h>
#include <QtWaylandClient/private/qwaylandinputdevice_p.h>
#include <QtWaylandClient/private/qwaylandscreen_p.h>
+#include <QtWaylandClient/private/qwaylandcursor_p.h>
#include <QtWaylandClient/private/qwaylandabstractdecoration_p.h>
#include <QtGui/private/qwindow_p.h>
@@ -229,8 +230,10 @@ QWaylandXdgSurface::Popup::~Popup()
leave = m_xdgSurface->window()->window();
QWindowSystemInterface::handleLeaveEvent(leave);
- if (QWindow *enter = QGuiApplication::topLevelAt(QCursor::pos()))
- QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos());
+ if (QWindow *enter = QGuiApplication::topLevelAt(QCursor::pos())) {
+ const auto pos = m_xdgSurface->window()->display()->waylandCursor()->pos();
+ QWindowSystemInterface::handleEnterEvent(enter, enter->handle()->mapFromGlobal(pos), pos);
+ }
}
}
@@ -462,8 +465,10 @@ void QWaylandXdgSurface::setGrabPopup(QWaylandWindow *parent, QWaylandInputDevic
if (m_popup && m_popup->m_xdgSurface && m_popup->m_xdgSurface->window())
enter = m_popup->m_xdgSurface->window()->window();
- if (enter)
- QWindowSystemInterface::handleEnterEvent(enter, enter->mapFromGlobal(QCursor::pos()), QCursor::pos());
+ if (enter) {
+ const auto pos = m_popup->m_xdgSurface->window()->display()->waylandCursor()->pos();
+ QWindowSystemInterface::handleEnterEvent(enter, enter->handle()->mapFromGlobal(pos), pos);
+ }
}
void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
--
2.46.0

@ -0,0 +1,47 @@
From 7007e9aa55fbb292a225fee83ef647c1b37509be Mon Sep 17 00:00:00 2001
From: Liang Qi <liang.qi@qt.io>
Date: Wed, 13 Mar 2024 11:53:58 +0100
Subject: [PATCH 57/59] client: don't cache one type in QWaylandMimeData
"application/vnd.portal.filetransfer", which is only valid for one
time use.
Fixes: QTBUG-107858
Pick-to: 6.7 6.6 6.5 6.2 5.15
Change-Id: I094de22ea0bb9b3577572e6c57ebe42cdc8c7b41
Reviewed-by: David Edmundson <davidedmundson@kde.org>
(cherry picked from commit 19758eb4093e8d60c69f75174afb7457490e2332)
---
src/client/qwaylanddataoffer.cpp | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/client/qwaylanddataoffer.cpp b/src/client/qwaylanddataoffer.cpp
index fe0ea8c9..0241a1df 100644
--- a/src/client/qwaylanddataoffer.cpp
+++ b/src/client/qwaylanddataoffer.cpp
@@ -56,6 +56,11 @@ static QString utf8Text()
return QStringLiteral("text/plain;charset=utf-8");
}
+static QString portalFileTransfer()
+{
+ return QStringLiteral("application/vnd.portal.filetransfer");
+}
+
QWaylandDataOffer::QWaylandDataOffer(QWaylandDisplay *display, struct ::wl_data_offer *offer)
: QtWayland::wl_data_offer(offer)
, m_display(display)
@@ -182,7 +187,9 @@ QVariant QWaylandMimeData::retrieveData_sys(const QString &mimeType, QVariant::T
}
close(pipefd[0]);
- m_data.insert(mimeType, content);
+ if (mimeType != portalFileTransfer())
+ m_data.insert(mimeType, content);
+
return content;
}
--
2.46.0

@ -0,0 +1,76 @@
From e1a146806873879c380486f084a990936c5fa537 Mon Sep 17 00:00:00 2001
From: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Date: Fri, 10 May 2024 13:20:30 +0200
Subject: [PATCH 58/59] Fix race condition in drag and drop
The data source may be deleted by libwayland while we hold a
reference to it. This could cause crashes when dragging
and dropping repeatedly and very rapidly between two
components.
Tapping into sourceDestroyed() for this as well allows us to
recover more gracefully.
This also required adding some null pointer checks to the code,
since it wasn't really prepared for the data source
disappearing.
Pick-to: 5.15 6.2 6.5 6.7 6.8
Fixes: QTBUG-124502
Change-Id: Ic3df8bf70176c5424ac5c693f8456f61e7b2762b
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
(cherry picked from commit 792bd8510e3bc6b47bcaedfb1386390ce3a10a3a)
---
src/compositor/wayland_wrapper/qwldatadevice.cpp | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/src/compositor/wayland_wrapper/qwldatadevice.cpp b/src/compositor/wayland_wrapper/qwldatadevice.cpp
index a3a795f9..f301678e 100644
--- a/src/compositor/wayland_wrapper/qwldatadevice.cpp
+++ b/src/compositor/wayland_wrapper/qwldatadevice.cpp
@@ -76,6 +76,9 @@ void DataDevice::sourceDestroyed(DataSource *source)
{
if (m_selectionSource == source)
m_selectionSource = nullptr;
+
+ if (m_dragDataSource == source)
+ m_dragDataSource = nullptr;
}
#if QT_CONFIG(draganddrop)
@@ -105,9 +108,11 @@ void DataDevice::setDragFocus(QWaylandSurface *focus, const QPointF &localPositi
if (m_dragDataSource && !offer)
return;
- send_enter(resource->handle, serial, focus->resource(),
- wl_fixed_from_double(localPosition.x()), wl_fixed_from_double(localPosition.y()),
- offer->resource()->handle);
+ if (offer) {
+ send_enter(resource->handle, serial, focus->resource(),
+ wl_fixed_from_double(localPosition.x()), wl_fixed_from_double(localPosition.y()),
+ offer->resource()->handle);
+ }
m_dragFocus = focus;
m_dragFocusResource = resource;
@@ -139,7 +144,7 @@ void DataDevice::drop()
if (m_dragFocusResource) {
send_drop(m_dragFocusResource->handle);
setDragFocus(nullptr, QPoint());
- } else {
+ } else if (m_dragDataSource) {
m_dragDataSource->cancel();
}
m_dragOrigin = nullptr;
@@ -155,6 +160,8 @@ void DataDevice::data_device_start_drag(Resource *resource, struct ::wl_resource
{
m_dragClient = resource->client();
m_dragDataSource = source ? DataSource::fromResource(source) : nullptr;
+ if (m_dragDataSource)
+ m_dragDataSource->setDevice(this);
m_dragOrigin = QWaylandSurface::fromResource(origin);
QWaylandDrag *drag = m_seat->drag();
setDragIcon(icon ? QWaylandSurface::fromResource(icon) : nullptr);
--
2.46.0

@ -0,0 +1,75 @@
From 6b1ba1cd0e1389d13e59b94e65da8f20a89ba03f Mon Sep 17 00:00:00 2001
From: Liang Qi <liang.qi@qt.io>
Date: Wed, 6 Sep 2023 11:04:02 +0200
Subject: [PATCH 59/59] Revert "Client: Send release button event on pointer
leave"
This reverts commit 8235fa65fe033a94e7a44322d3502f25940092ec.
It makes tests/manual/examples/widgets/draganddrop/puzzle not work,
which does drag and drop in same app.
Pick-to: 6.6 6.5 6.2 5.15
Fixes: QTBUG-115757
Task-number: QTBUG-97037
Change-Id: I738769fde96f7da91f5bc4dc7a70ed49596dcd61
Reviewed-by: Liang Qi <liang.qi@qt.io>
(cherry picked from commit 60647fa069ef4143642ae4c1b529ad2a7a7f2fd9)
---
src/client/qwaylandinputdevice.cpp | 9 ++-------
src/client/qwaylandinputdevice_p.h | 1 -
2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/src/client/qwaylandinputdevice.cpp b/src/client/qwaylandinputdevice.cpp
index 74f16b70..ab978d3f 100644
--- a/src/client/qwaylandinputdevice.cpp
+++ b/src/client/qwaylandinputdevice.cpp
@@ -688,8 +688,8 @@ public:
void QWaylandInputDevice::Pointer::pointer_leave(uint32_t time, struct wl_surface *surface)
{
- releaseButtons();
invalidateFocus();
+ mButtons = Qt::NoButton;
mParent->mTime = time;
@@ -804,8 +804,6 @@ void QWaylandInputDevice::Pointer::pointer_button(uint32_t serial, uint32_t time
default: return; // invalid button number (as far as Qt is concerned)
}
- mLastButton = qt_button;
-
if (state)
mButtons |= qt_button;
else
@@ -844,13 +842,10 @@ void QWaylandInputDevice::Pointer::invalidateFocus()
void QWaylandInputDevice::Pointer::releaseButtons()
{
- if (mButtons == Qt::NoButton)
- return;
-
mButtons = Qt::NoButton;
if (auto *window = focusWindow()) {
- ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, mLastButton, mParent->modifiers());
+ ReleaseEvent e(focusWindow(), mParent->mTime, mSurfacePos, mGlobalPos, mButtons, Qt::NoButton, mParent->modifiers());
window->handleMouse(mParent, e);
}
}
diff --git a/src/client/qwaylandinputdevice_p.h b/src/client/qwaylandinputdevice_p.h
index bafe3db2..5795f138 100644
--- a/src/client/qwaylandinputdevice_p.h
+++ b/src/client/qwaylandinputdevice_p.h
@@ -346,7 +346,6 @@ public:
QPointF mSurfacePos;
QPointF mGlobalPos;
Qt::MouseButtons mButtons = Qt::NoButton;
- Qt::MouseButton mLastButton = Qt::NoButton;
#if QT_CONFIG(cursor)
wl_buffer *mCursorBuffer = nullptr;
Qt::CursorShape mCursorShape = Qt::BitmapCursor;
--
2.46.0

@ -0,0 +1,29 @@
From e6634936ab661a9b6303d1318392ea109a17dad4 Mon Sep 17 00:00:00 2001
From: Rob Hall <robxnanocode@outlook.com>
Date: Sun, 24 Dec 2023 21:46:48 +0000
Subject: [PATCH] client: Fix window margin calculation
Don't subtract the size of the window frame margin from the content
area. Fixes an issue where an area of the window is unclickable when
client-side decorations are in use.
Fixes: QTBUG-120392
Pick-to: 6.7 6.6 6.5
Change-Id: I6a89b2d463be084233ea3448cacfbbd09d66b96e
---
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index 610cc9e..bb71638 100644
--- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp
@@ -1360,8 +1360,8 @@
QMargins marg = frameMargins();
QRect windowRect(0 + marg.left(),
0 + marg.top(),
- geometry().size().width() - marg.right(),
- geometry().size().height() - marg.bottom());
+ geometry().size().width(),
+ geometry().size().height());
if (windowRect.contains(e.local.toPoint()) || mMousePressedInContentArea != Qt::NoButton) {
const QPointF localTranslated = mapFromWlSurface(e.local);
QPointF globalTranslated = e.global;

@ -1,30 +1,66 @@
From d533901938a996367d7b6f87b0214f5a17098aed Mon Sep 17 00:00:00 2001 diff --git a/src/client/qwaylandabstractdecoration_p.h b/src/client/qwaylandabstractdecoration_p.h
From: Jan Grulich <jgrulich@redhat.com> index 81c8e17..61cbde7 100644
Date: Tue, 23 Mar 2021 16:03:22 +0100 --- a/src/client/qwaylandabstractdecoration_p.h
Subject: [PATCH] Client: expose toplevel window state +++ b/src/client/qwaylandabstractdecoration_p.h
@@ -82,6 +82,12 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandAbstractDecoration : public QObject
QWaylandWindow has only basic information about window state, like if Q_OBJECT
it's active or maximized, but it has no information about tiling, which Q_DECLARE_PRIVATE(QWaylandAbstractDecoration)
can be useful for client-side decorations. We also need to bump version public:
of xdg-shell protocol we support, because additional states are not in + enum MarginsType {
the version currently supported by QtWayland. It shouldn't be a problem + Full,
to increase the version as the new version adds just these additional + ShadowsExcluded,
window states. + ShadowsOnly
+ };
Change-Id: I4c46516d9c7296c69ea51a022b3bdb4ca06bef8d +
Reviewed-by: David Edmundson <davidedmundson@kde.org> QWaylandAbstractDecoration();
--- ~QWaylandAbstractDecoration() override;
src/client/qwaylandwindow.cpp | 15 +++++++++++++++
src/client/qwaylandwindow_p.h | 16 ++++++++++++++++ @@ -91,7 +97,8 @@ public:
.../xdg-shell/qwaylandxdgshell.cpp | 16 +++++++++++++++- void update();
.../xdg-shell/qwaylandxdgshell_p.h | 3 ++- bool isDirty() const;
4 files changed, 48 insertions(+), 2 deletions(-)
- virtual QMargins margins() const = 0;
+ virtual QMargins margins(MarginsType marginsType = Full) const = 0;
+
QWindow *window() const;
const QImage &contentImage();
diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp diff --git a/src/client/qwaylandwindow.cpp b/src/client/qwaylandwindow.cpp
index ba881cb..a1e891d 100644 index ec232cd..54b27f1 100644
--- a/src/client/qwaylandwindow.cpp --- a/src/client/qwaylandwindow.cpp
+++ b/src/client/qwaylandwindow.cpp +++ b/src/client/qwaylandwindow.cpp
@@ -1089,6 +1089,16 @@ Qt::WindowStates QWaylandWindow::windowStates() const @@ -383,6 +383,16 @@ void QWaylandWindow::setGeometry(const QRect &r)
void QWaylandWindow::resizeFromApplyConfigure(const QSize &sizeWithMargins, const QPoint &offset)
{
QMargins margins = frameMargins();
+
+ // Exclude shadows from margins once they are excluded from window geometry
+ // 1) First resizeFromApplyConfigure() call will have sizeWithMargins equal to surfaceSize()
+ // which has full margins (shadows included).
+ // 2) Following resizeFromApplyConfigure() calls should have sizeWithMargins equal to
+ // windowContentGeometry() which excludes shadows, therefore in this case we have to
+ // exclude them too in order not to accidentally apply smaller size to the window.
+ if (mWindowDecoration && (sizeWithMargins != surfaceSize()))
+ margins = mWindowDecoration->margins(QWaylandAbstractDecoration::ShadowsExcluded);
+
int widthWithoutMargins = qMax(sizeWithMargins.width() - (margins.left() + margins.right()), 1);
int heightWithoutMargins = qMax(sizeWithMargins.height() - (margins.top() + margins.bottom()), 1);
QRect geometry(windowGeometry().topLeft(), QSize(widthWithoutMargins, heightWithoutMargins));
@@ -710,7 +720,12 @@ QSize QWaylandWindow::surfaceSize() const
*/
QRect QWaylandWindow::windowContentGeometry() const
{
- return QRect(QPoint(), surfaceSize());
+ QMargins shadowMargins;
+
+ if (mWindowDecoration)
+ shadowMargins = mWindowDecoration->margins(QWaylandAbstractDecoration::ShadowsOnly);
+
+ return QRect(QPoint(shadowMargins.left(), shadowMargins.top()), surfaceSize().shrunkBy(shadowMargins));
}
/*!
@@ -1111,6 +1126,16 @@ Qt::WindowStates QWaylandWindow::windowStates() const
return mLastReportedWindowStates; return mLastReportedWindowStates;
} }
@ -42,7 +78,7 @@ index ba881cb..a1e891d 100644
{ {
createDecoration(); createDecoration();
diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h diff --git a/src/client/qwaylandwindow_p.h b/src/client/qwaylandwindow_p.h
index e068796..f4e5d3d 100644 index 1907f10..33a3b83 100644
--- a/src/client/qwaylandwindow_p.h --- a/src/client/qwaylandwindow_p.h
+++ b/src/client/qwaylandwindow_p.h +++ b/src/client/qwaylandwindow_p.h
@@ -95,6 +95,15 @@ public: @@ -95,6 +95,15 @@ public:
@ -61,7 +97,7 @@ index e068796..f4e5d3d 100644
QWaylandWindow(QWindow *window, QWaylandDisplay *display); QWaylandWindow(QWindow *window, QWaylandDisplay *display);
~QWaylandWindow() override; ~QWaylandWindow() override;
@@ -145,6 +154,9 @@ public: @@ -148,6 +157,9 @@ public:
void handleContentOrientationChange(Qt::ScreenOrientation orientation) override; void handleContentOrientationChange(Qt::ScreenOrientation orientation) override;
void setOrientationMask(Qt::ScreenOrientations mask); void setOrientationMask(Qt::ScreenOrientations mask);
@ -71,7 +107,7 @@ index e068796..f4e5d3d 100644
void setWindowState(Qt::WindowStates states) override; void setWindowState(Qt::WindowStates states) override;
void setWindowFlags(Qt::WindowFlags flags) override; void setWindowFlags(Qt::WindowFlags flags) override;
void handleWindowStatesChanged(Qt::WindowStates states); void handleWindowStatesChanged(Qt::WindowStates states);
@@ -257,6 +269,7 @@ protected: @@ -260,6 +272,7 @@ protected:
QRegion mMask; QRegion mMask;
QRegion mOpaqueArea; QRegion mOpaqueArea;
Qt::WindowStates mLastReportedWindowStates = Qt::WindowNoState; Qt::WindowStates mLastReportedWindowStates = Qt::WindowNoState;
@ -79,7 +115,7 @@ index e068796..f4e5d3d 100644
QWaylandShmBackingStore *mBackingStore = nullptr; QWaylandShmBackingStore *mBackingStore = nullptr;
QWaylandBuffer *mQueuedBuffer = nullptr; QWaylandBuffer *mQueuedBuffer = nullptr;
@@ -293,6 +306,8 @@ private: @@ -296,6 +309,8 @@ private:
friend class QWaylandSubSurface; friend class QWaylandSubSurface;
}; };
@ -88,8 +124,34 @@ index e068796..f4e5d3d 100644
inline QIcon QWaylandWindow::windowIcon() const inline QIcon QWaylandWindow::windowIcon() const
{ {
return mWindowIcon; return mWindowIcon;
diff --git a/src/plugins/decorations/bradient/main.cpp b/src/plugins/decorations/bradient/main.cpp
index e75fda3..72dda67 100644
--- a/src/plugins/decorations/bradient/main.cpp
+++ b/src/plugins/decorations/bradient/main.cpp
@@ -72,7 +72,7 @@ class Q_WAYLAND_CLIENT_EXPORT QWaylandBradientDecoration : public QWaylandAbstra
public:
QWaylandBradientDecoration();
protected:
- QMargins margins() const override;
+ QMargins margins(MarginsType marginsType = Full) const override;
void paint(QPaintDevice *device) override;
bool handleMouse(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global,Qt::MouseButtons b,Qt::KeyboardModifiers mods) override;
bool handleTouch(QWaylandInputDevice *inputDevice, const QPointF &local, const QPointF &global, Qt::TouchPointState state, Qt::KeyboardModifiers mods) override;
@@ -129,8 +129,11 @@ QRectF QWaylandBradientDecoration::minimizeButtonRect() const
(margins().top() - BUTTON_WIDTH) / 2, BUTTON_WIDTH, BUTTON_WIDTH);
}
-QMargins QWaylandBradientDecoration::margins() const
+QMargins QWaylandBradientDecoration::margins(MarginsType marginsType) const
{
+ if (marginsType == ShadowsOnly)
+ return QMargins();
+
return QMargins(3, 30, 3, 3);
}
diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp diff --git a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
index d7d0ddf..2c6e84b 100644 index 2666df2..8d8ac85 100644
--- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp --- a/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
+++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp +++ b/src/plugins/shellintegration/xdg-shell/qwaylandxdgshell.cpp
@@ -88,6 +88,7 @@ void QWaylandXdgSurface::Toplevel::applyConfigure() @@ -88,6 +88,7 @@ void QWaylandXdgSurface::Toplevel::applyConfigure()
@ -127,7 +189,7 @@ index d7d0ddf..2c6e84b 100644
default: default:
break; break;
} }
@@ -451,7 +465,7 @@ void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial) @@ -458,7 +472,7 @@ void QWaylandXdgSurface::xdg_surface_configure(uint32_t serial)
} }
QWaylandXdgShell::QWaylandXdgShell(QWaylandDisplay *display, uint32_t id, uint32_t availableVersion) QWaylandXdgShell::QWaylandXdgShell(QWaylandDisplay *display, uint32_t id, uint32_t availableVersion)

@ -0,0 +1,14 @@
diff --git a/src/client/qwaylandintegration.cpp b/src/client/qwaylandintegration.cpp
index 13bacc9b..7c35003d 100644
--- a/src/client/qwaylandintegration.cpp
+++ b/src/client/qwaylandintegration.cpp
@@ -88,6 +88,9 @@ QWaylandIntegration::QWaylandIntegration()
QWaylandWindow::fixedToplevelPositions =
!qEnvironmentVariableIsSet("QT_WAYLAND_DISABLE_FIXED_POSITIONS");
+
+ if (!qEnvironmentVariableIsSet("QT_WAYLAND_DECORATION"))
+ qputenv("QT_WAYLAND_DECORATION", "adwaita");
}
QWaylandIntegration::~QWaylandIntegration()

@ -1,13 +1,11 @@
%global qt_module qtwayland %global qt_module qtwayland
%global build_tests 1
Summary: Qt5 - Wayland platform support and QtCompositor module Summary: Qt5 - Wayland platform support and QtCompositor module
Name: qt5-%{qt_module} Name: qt5-%{qt_module}
Version: 5.15.9 Version: 5.15.15
Release: 1%{?dist} Release: 1%{?dist}
License: LGPLv3 License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
Url: http://www.qt.io Url: http://www.qt.io
%global majmin %(echo %{version} | cut -d. -f1-2) %global majmin %(echo %{version} | cut -d. -f1-2)
Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-opensource-src-%{version}.tar.xz Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submodules/%{qt_module}-everywhere-opensource-src-%{version}.tar.xz
@ -15,7 +13,7 @@ Source0: https://download.qt.io/official_releases/qt/%{majmin}/%{version}/submod
## Upstream patches ## Upstream patches
## repo: https://invent.kde.org/qt/qt/qtwayland ## repo: https://invent.kde.org/qt/qt/qtwayland
## branch: kde/5.15 ## branch: kde/5.15
## git format-patch v5.15.8-lts-lgpl ## git format-patch v5.15.15-lts-lgpl
Patch1: 0001-Client-Announce-an-output-after-receiving-more-compl.patch Patch1: 0001-Client-Announce-an-output-after-receiving-more-compl.patch
Patch2: 0002-Fix-issue-with-repeated-window-size-changes.patch Patch2: 0002-Fix-issue-with-repeated-window-size-changes.patch
Patch3: 0003-Client-Connect-drags-being-accepted-to-updating-the-.patch Patch3: 0003-Client-Connect-drags-being-accepted-to-updating-the-.patch
@ -25,56 +23,64 @@ Patch6: 0006-Fix-build.patch
Patch7: 0007-Fix-remove-listener.patch Patch7: 0007-Fix-remove-listener.patch
Patch8: 0008-Hook-up-queryKeyboardModifers.patch Patch8: 0008-Hook-up-queryKeyboardModifers.patch
Patch9: 0009-Correctly-detect-if-image-format-is-supported-by-QIm.patch Patch9: 0009-Correctly-detect-if-image-format-is-supported-by-QIm.patch
Patch10: 0010-Client-Don-t-always-recreate-frame-callbacks.patch Patch10: 0010-Client-Don-t-always-recreate-frame-callbacks.patch
Patch11: 0011-Client-Always-destroy-frame-callback-in-the-actual-c.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 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 Patch13: 0013-Client-do-not-empty-clipboard-when-a-new-popup-windo.patch
Patch14: 0014-Client-Implement-DataDeviceV3.patch Patch14: 0014-Client-Implement-DataDeviceV3.patch
Patch15: 0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch Patch15: 0015-Client-Delay-deletion-of-QDrag-object-until-after-we.patch
Patch16: 0016-Client-Avoid-processing-of-events-when-showing-windo.patch Patch16: 0016-Client-Avoid-processing-of-events-when-showing-windo.patch
Patch17: 0017-Handle-registry_global-out-of-constructor.patch Patch17: 0017-Handle-registry_global-out-of-constructor.patch
Patch18: 0018-Connect-flushRequest-after-forceRoundTrip.patch Patch18: 0018-Connect-flushRequest-after-forceRoundTrip.patch
Patch19: 0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch Patch19: 0019-Move-the-wayland-socket-polling-to-a-separate-event-.patch
Patch20: 0020-Client-Remove-mWaitingForUpdateDelivery.patch Patch20: 0020-Client-Remove-mWaitingForUpdateDelivery.patch
Patch21: 0021-client-Simplify-round-trip-behavior.patch Patch21: 0021-client-Simplify-round-trip-behavior.patch
Patch22: 0022-Client-Fix-opaque-region-setter.patch Patch22: 0022-Client-Fix-opaque-region-setter.patch
Patch23: 0023-Use-proper-dependencies-in-compile-tests.patch Patch23: 0023-Use-proper-dependencies-in-compile-tests.patch
Patch24: 0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch Patch24: 0024-Revert-Client-Remove-mWaitingForUpdateDelivery.patch
Patch25: 0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch Patch25: 0025-Fix-race-condition-on-mWaitingForUpdateDelivery.patch
Patch26: 0026-use-poll-2-when-reading-from-clipboard.patch Patch26: 0026-use-poll-2-when-reading-from-clipboard.patch
Patch27: 0027-Reduce-memory-leakage.patch Patch27: 0027-Reduce-memory-leakage.patch
Patch28: 0028-Fix-build-with-libcxx-missing-array-include.patch Patch28: 0028-Only-close-popup-in-the-the-hierchary.patch
Patch29: 0029-Only-close-popup-in-the-the-hierchary.patch Patch29: 0029-Check-pointer-for-null-before-use-in-ASSERT.patch
Patch30: 0030-Build-fixes-for-GCC-11.patch Patch30: 0030-Use-wl_surface.damage_buffer-on-the-client-side.patch
Patch31: 0031-Check-pointer-for-null-before-use-in-ASSERT.patch Patch31: 0031-Client-clear-focus-on-touch-cancel.patch
Patch32: 0032-Use-wl_surface.damage_buffer-on-the-client-side.patch Patch32: 0032-Guard-mResizeDirty-by-the-correctMutex.patch
Patch33: 0033-Client-clear-focus-on-touch-cancel.patch Patch33: 0033-Fix-compile-tests.patch
Patch34: 0034-Guard-mResizeDirty-by-the-correctMutex.patch Patch34: 0034-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch
Patch35: 0035-client-Synthesize-enter-leave-event-for-popup-in-xdg.patch Patch35: 0035-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch
Patch36: 0036-Fix-compile-tests.patch Patch36: 0036-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch
Patch37: 0037-Use-CRLF-line-delimiter-for-text-uri-list-data.patch Patch37: 0037-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch
Patch38: 0038-Avoid-calling-requestUpdate-from-wrong-thread.patch Patch38: 0038-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch
Patch39: 0039-Call-finishDrag-in-QWaylandDataDevice-dragSourceCanc.patch Patch39: 0039-Client-Bump-wl_output-version.patch
Patch40: 0040-Hold-surface-read-lock-throughout-QWaylandEglWindow-.patch Patch40: 0040-Fix-frame-sync-related-to-unprotected-multithread-ac.patch
Patch41: 0041-Client-Ensure-that-wl_surface-lives-as-long-as-qtqui.patch Patch41: 0041-Client-Handle-zwp_primary_selection_device_manager_v.patch
Patch42: 0042-Keep-toplevel-windows-in-the-top-left-corner-of-the-.patch Patch42: 0042-Fixes-the-build-on-CentOS.patch
Patch43: 0043-Revert-Client-Ensure-that-wl_surface-lives-as-long-a.patch Patch43: 0043-client-Avoid-protocol-error-with-invalid-min-max-siz.patch
Patch44: 0044-Client-Add-F_SEAL_SHRINK-seal-to-shm-backing-file.patch Patch44: 0044-Client-Fix-handling-of-Qt-BlankCursor.patch
Patch45: 0045-Client-Call-wl_output_release-upon-QWaylandScreen-de.patch Patch45: 0045-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch
Patch46: 0046-Client-Bump-wl_output-version.patch Patch46: 0046-Destroy-frame-queue-before-display.patch
Patch47: 0047-Fix-frame-sync-related-to-unprotected-multithread-ac.patch Patch47: 0047-client-Fix-crash-on-dnd-updates-after-client-facing-.patch
Patch48: 0048-Client-Handle-zwp_primary_selection_device_manager_v.patch Patch48: 0048-Convert-cursor-bitmap-to-supported-format.patch
Patch49: 0049-Fixes-the-build-on-CentOS.patch Patch49: 0049-Replace-scale-with-devicePixelRatio-for-non-integer-.patch
Patch50: 0050-client-Avoid-protocol-error-with-invalid-min-max-siz.patch Patch50: 0050-Client-Fix-buffer-damage.patch
Patch51: 0051-Client-Fix-handling-of-Qt-BlankCursor.patch Patch51: 0051-Client-Commit-the-initial-surface-state-explicitly.patch
Patch52: 0052-client-Force-a-roundtrip-when-an-XdgOutput-is-not-re.patch Patch52: 0052-tests-Fix-tst_xdgshell-minMaxSize.patch
Patch53: 0053-Client-Manage-QMimeData-lifecycle.patch Patch53: 0053-Client-Remove-some-surface-commits.patch
Patch54: 0054-client-Do-not-cast-placeholder-screens-to-QWaylandSc.patch Patch54: 0054-Client-Avoid-locking-resizing-in-QWaylandShmBackingS.patch
Patch55: 0055-Client-Remove-flip-popup-constraints.patch Patch55: 0055-Client-Always-populate-mimedata-in-drags.patch
Patch56: 0056-Client-Fix-enter-event-cursor-position-with-xdg-popu.patch
# Disable for now, there is a Qt bug making this broken Patch57: 0057-client-don-t-cache-one-type-in-QWaylandMimeData.patch
# Patch102: qtwayland-decoration-support-backports-from-qt6.patch Patch58: 0058-Fix-race-condition-in-drag-and-drop.patch
Patch103: qtwayland-client-expose-toplevel-window-state.patch Patch59: 0059-Revert-Client-Send-release-button-event-on-pointer-l.patch
# Use QAdwaitaDecorations by default
Patch100: qtwayland-use-adwaita-decorations-by-default.patch
Patch101: qtwayland-decoration-support-backports-from-qt6.patch
Patch102: qtwayland-client-fix-window-margin-calculation.patch
# Upstreamable patches
# filter qml provides # filter qml provides
%global __provides_exclude_from ^%{_qt5_archdatadir}/qml/.*\\.so$ %global __provides_exclude_from ^%{_qt5_archdatadir}/qml/.*\\.so$
@ -117,14 +123,6 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
%description examples %description examples
%{summary}. %{summary}.
%if 0%{?build_tests}
%package tests
Summary: Unit tests for %{name}
Requires: %{name}%{?_isa} = %{version}-%{release}
%description tests
%{summary}.
%endif
%prep %prep
%autosetup -n %{qt_module}-everywhere-src-%{version} -p1 %autosetup -n %{qt_module}-everywhere-src-%{version} -p1
@ -135,17 +133,10 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
%make_build %make_build
%if 0%{?build_tests}
%qt5_build_tests
%endif
%install %install
make install INSTALL_ROOT=%{buildroot} make install INSTALL_ROOT=%{buildroot}
%if 0%{?build_tests}
%qt5_install_tests
%endif
## .prl/.la file love ## .prl/.la file love
# nuke .prl reference(s) to %%buildroot, excessive (.la-like) libs # nuke .prl reference(s) to %%buildroot, excessive (.la-like) libs
pushd %{buildroot}%{_qt5_libdir} pushd %{buildroot}%{_qt5_libdir}
@ -194,62 +185,151 @@ popd
%files examples %files examples
%{_qt5_examplesdir}/wayland/ %{_qt5_examplesdir}/wayland/
%if 0%{?build_tests}
%files tests
%{_qt5_libdir}/qt5/tests
%endif
%changelog %changelog
* Tue Apr 18 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.9-1 * Mon Jan 06 2025 Arkady L. Shane <tigro@msvsphere-os.ru> - 5.15.15-1
- Rebuilt for MSVSphere 10
* Wed Sep 04 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.15-1
- 5.15.15
* Fri Jul 19 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.14-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild
* Wed May 29 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.14-1
- 5.15.14
* Thu Mar 14 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.13-1
- 5.15.13
* Fri Jan 26 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.12-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Mon Jan 22 2024 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.12-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild
* Thu Jan 04 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.12-2
- Client: fix window margin calculation
* Tue Jan 02 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.12-1
- 5.15.12
* 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)
* Wed Aug 16 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.10-3
- Use QAdwaitaDecorations by default
* Fri Jul 21 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.10-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild
* Mon Jun 12 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.10-1
- 5.15.10
* Tue Apr 11 2023 Jan Grulich <jgrulich@redhat.com>
- 5.15.9 - 5.15.9
Resolves: bz#2175746
* Mon Mar 28 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.3-1 * Wed Mar 29 2023 Than Ngo <than@redhat.com> - 5.15.8-6
- Related bz#2179854, rebuild against new qt5-qtbase
* Mon Mar 27 2023 Than Ngo <than@redhat.com> - 5.15.8-5
- Fix bz#2179854, rebuild against new qt5-qtbase
* Mon Mar 20 2023 Than Ngo <than@redhat.com> - 5.15.8-4
- Fix bz#2178389, rebuild against new qt5-qtbase
* Tue Jan 31 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.8-3
- migrated to SPDX license
* Fri Jan 20 2023 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.8-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild
* Thu Jan 05 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.8-1
- 5.15.8
* Mon Oct 31 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.7-1
- 5.15.7
* Tue Sep 20 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.6-1
- 5.15.6
* Thu Aug 25 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.5-4
- Re-enable CSD backports from Qt6 (will be used by QGnomePlatform)
* Sat Jul 23 2022 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.5-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild
* Wed Jul 20 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.5-2
- Keep toplevel windows in the top left corner of the screen
* Wed Jul 13 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.5-1
- 5.15.5
* Mon May 16 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.4-1
- 5.15.4
* Fri Apr 15 2022 Kenneth Topp <toppk@bllue.org> - 5.15.3-2
- Pull in latest kde/5.15 branch fixes
* Fri Mar 04 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.3-1
- 5.15.3 - 5.15.3
Resolves: bz#2061372
* Tue Feb 15 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.2-15 * Fri Feb 11 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.2-21
- Sync with Fedora - Pull in latest kde/5.15 branch fixes
Resolves: bz#2051384 + backport a fix to crashes caused by patch 0043
* Mon Jan 24 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.2-14 * Fri Feb 04 2022 Rex Dieter <rdieter@fedoraproject.org> - 5.15.2-20
- Sync with Fedora - re-enable nvidia-related patches (44,100)
Resolves: bz#2044169
* Wed Dec 08 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-13 * Thu Feb 03 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.2-19
- Sync with Fedora - Disable some upstream patches causing a crash on Wayland sessions
Resolves: bz#2028778 bz#2049560
* Thu Oct 14 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-12 * Mon Jan 31 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.2-18
- Drop BR: tree - Include potential upstream fix for Plasma panel freezes
Resolves: bz#2014080
* Wed Oct 13 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-11 * Thu Jan 20 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.2-17
- Sync with Fedora - Pull in latest kde/5.15 branch fixes
Resolves: bz#2012714
* Mon Sep 20 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-10 * Tue Jan 18 2022 Jan Grulich <jgrulich@redhat.com> - 5.15.2-16
- Sync with Fedora - Pull in latest kde/5.15 branch fixes
Resolves: bz#2003935
* Mon Aug 23 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-9 * Mon Dec 06 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-15
- Client: expose toplevel window state (change from Qt6) - Pull in latest kde/5.15 branch fixes
Resolves: bz#1968292
* Mon Oct 04 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-14
- Update clipboard patch
* Mon Oct 04 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-13
- Backport clipboard fixes
Resolves: bz#1957503
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 5.15.2-8 * Tue Sep 14 2021 Rex Dieter <rdieter@fedoraproject.org> - 5.15.2-12
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags - Pull in latest kde/5.15 branch fixes
Related: rhbz#1991688
* Wed Jun 09 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-7 * Tue Sep 07 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-11
- Add gating tests - Include only some Qt6 API additions for better client-side decoration support
Resolves: bz#1968477
* Tue Sep 07 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-10
- Disable decoration shadow support
* Mon Aug 30 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-9
- Client: include decoration fixes and improvements from Qt6
* Fri Jul 23 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.2-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild
* Wed Jun 02 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-7
- Client: expose toplevel window state (change from Qt6)
* Mon May 03 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-6 * Tue Apr 27 2021 Rex Dieter <rdieter@fedoraproject.org> - 5.15.2-6
- Sync with Fedora - Pull in latest fixes from https://invent.kde.org/qt/qt/qtwayland
Resolves: bz#1951152
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 5.15.2-5 * Tue Apr 06 2021 Jan Grulich <jgrulich@redhat.com> - 5.15.2-5
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - Backport changes from Qt 5.15.3
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.2-4 * Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 5.15.2-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild

Loading…
Cancel
Save