You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
2.0 KiB
53 lines
2.0 KiB
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
|
|
|