commit:     69c8497c982a6e82cd1c1762e27c3cdfe52436ed
Author:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
AuthorDate: Thu Aug 17 22:50:11 2023 +0000
Commit:     Ionen Wolkens <ionen <AT> gentoo <DOT> org>
CommitDate: Thu Aug 17 23:19:03 2023 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=69c8497c

dev-qt/qtwayland: backport segfault fix with drag&drop

Notably manifests itself with qutebrowser. Not very
tested but is just a simple null check and so no worries.

Signed-off-by: Ionen Wolkens <ionen <AT> gentoo.org>

 .../files/qtwayland-6.5.2-drag-drop-segfault.patch | 38 ++++++++++++++++++++++
 ...land-6.5.2.ebuild => qtwayland-6.5.2-r1.ebuild} |  2 ++
 2 files changed, 40 insertions(+)

diff --git a/dev-qt/qtwayland/files/qtwayland-6.5.2-drag-drop-segfault.patch 
b/dev-qt/qtwayland/files/qtwayland-6.5.2-drag-drop-segfault.patch
new file mode 100644
index 000000000000..d19522c4b8ef
--- /dev/null
+++ b/dev-qt/qtwayland/files/qtwayland-6.5.2-drag-drop-segfault.patch
@@ -0,0 +1,38 @@
+Regression in 6.5.2 that is fixed >=6.5.3.
+https://bugreports.qt.io/browse/QTBUG-115757
+https://github.com/qutebrowser/qutebrowser/issues/7827
+
+https://github.com/qt/qtwayland/commit/02e9e0a2d4538eb2b3c26d3137228f8f501bcf7f
+From: David Edmundson <[email protected]>
+Date: Wed, 7 Jun 2023 22:12:15 +0100
+Subject: [PATCH] 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.
+
+Fixes: QTBUG-115757
+Change-Id: Ib9c047f04d65883105d4cd3f169637d0e038a63f
+Reviewed-by: Eskil Abrahamsen Blomfeldt <[email protected]>
+(cherry picked from commit 22daca49b807fefba58113a06b86df4274e49f62)
+Reviewed-by: David Edmundson <[email protected]>
+--- a/src/client/qwaylanddatadevice.cpp
++++ b/src/client/qwaylanddatadevice.cpp
+@@ -97,6 +97,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 (m_dragSource->version() < 3) {
+                 drag->setResponse(accepted);

diff --git a/dev-qt/qtwayland/qtwayland-6.5.2.ebuild 
b/dev-qt/qtwayland/qtwayland-6.5.2-r1.ebuild
similarity index 88%
rename from dev-qt/qtwayland/qtwayland-6.5.2.ebuild
rename to dev-qt/qtwayland/qtwayland-6.5.2-r1.ebuild
index 14d6b705e8ef..4fbc8c272b2c 100644
--- a/dev-qt/qtwayland/qtwayland-6.5.2.ebuild
+++ b/dev-qt/qtwayland/qtwayland-6.5.2-r1.ebuild
@@ -20,3 +20,5 @@ DEPEND="
        x11-libs/libxkbcommon
 "
 RDEPEND="${DEPEND}"
+
+PATCHES=( "${FILESDIR}/${P}-drag-drop-segfault.patch" )

Reply via email to