summaryrefslogtreecommitdiffstats
path: root/src/client/qwaylanddnd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/qwaylanddnd.cpp')
-rw-r--r--src/client/qwaylanddnd.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/client/qwaylanddnd.cpp b/src/client/qwaylanddnd.cpp
index b01a9db36..6535aa16b 100644
--- a/src/client/qwaylanddnd.cpp
+++ b/src/client/qwaylanddnd.cpp
@@ -66,8 +66,13 @@ void QWaylandDrag::startDrag()
{
QBasicDrag::startDrag();
QWaylandWindow *icon = static_cast<QWaylandWindow *>(shapedPixmapWindow()->handle());
- m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), icon);
- icon->addAttachOffset(-drag()->hotSpot());
+ if (m_display->currentInputDevice()->dataDevice()->startDrag(drag()->mimeData(), icon)) {
+ icon->addAttachOffset(-drag()->hotSpot());
+ } else {
+ // Cancelling immediately does not work, since the event loop for QDrag::exec is started
+ // after this function returns.
+ QMetaObject::invokeMethod(this, [this](){ cancelDrag(); }, Qt::QueuedConnection);
+ }
}
void QWaylandDrag::cancel()