path: root/src/plugins/platforms/xcb/qxcbdrag.cpp
diff options
authorGatis Paeglis <>2015-01-07 13:51:38 +0100
committerJani Heikkinen <>2015-01-19 08:15:54 +0100
commit3c21c4581dbd957d9f660dd52d0298ecef1001cb (patch)
tree5d510bc151f053e63acd572d5e9e626c772b128d /src/plugins/platforms/xcb/qxcbdrag.cpp
parent5bb2e84a764f611cf4470f2ddc0bb427c4d110cc (diff)
Fix drag and drop regression
Fix regression introduced by e4becdc3d310a0dd1a6d34d0796a52b21dedeb2d Add QPlatformDrag::ownsDragObject() function, QDragManager can use the return value of this function to decide if it should take care of deleting QDrag object or platform plugin will take care of deleting QDrag. XCB platform plugins uses async dnd data delivery mechanism. It allows user to drop something and then continue working with the assurance that the target will get the data regardless of how slow the network connections are, which means that a source window should preserve QDrag data until dnd has finished. Change-Id: I1fbad7380cddec98b756698993dd397409833150 Task-number: QTBUG-43436 Reviewed-by: Friedemann Kleint <>
Diffstat (limited to 'src/plugins/platforms/xcb/qxcbdrag.cpp')
1 files changed, 7 insertions, 0 deletions
diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp
index 7037e102e2..ec0399ed5f 100644
--- a/src/plugins/platforms/xcb/qxcbdrag.cpp
+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp
@@ -999,6 +999,8 @@ void QXcbDrag::handleFinished(const xcb_client_message_event_t *event)
if (at != -1) {
Transaction t = transactions.takeAt(at);
+ if (t.drag)
+ t.drag->deleteLater();
// QDragManager *manager = QDragManager::self();
// Window target = current_target;
@@ -1186,6 +1188,11 @@ bool QXcbDrag::dndEnable(QXcbWindow *w, bool on)
+bool QXcbDrag::ownsDragObject() const
+ return true;
QXcbDropData::QXcbDropData(QXcbDrag *d)
: QXcbMime(),