summaryrefslogtreecommitdiffstats
path: root/src/gui/kernel
diff options
context:
space:
mode:
authorQt Forward Merge Bot <qt_forward_merge_bot@qt-project.org>2019-10-28 01:00:17 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2019-10-28 10:50:03 +0100
commit08f90adffdde1d7a4efa0de66f69091bd52d1d4b (patch)
treeb606ee7896d4550cd3e8150a5cc6db6a03f6bd39 /src/gui/kernel
parentdcbe25bbbb603bc335d7cf0982a80293289b0d8f (diff)
parenta21d4395f4f9afea52b6c2da359ce6ad21ebc763 (diff)
Merge remote-tracking branch 'origin/5.13' into 5.14
Conflicts: src/corelib/serialization/qjson_p.h Change-Id: I83cea141a4de8b3998478bfded84ca9029f7a2a9
Diffstat (limited to 'src/gui/kernel')
-rw-r--r--src/gui/kernel/qdnd.cpp9
-rw-r--r--src/gui/kernel/qdnd_p.h4
-rw-r--r--src/gui/kernel/qdrag.cpp7
3 files changed, 12 insertions, 8 deletions
diff --git a/src/gui/kernel/qdnd.cpp b/src/gui/kernel/qdnd.cpp
index 5c5f166554..dd541af3b8 100644
--- a/src/gui/kernel/qdnd.cpp
+++ b/src/gui/kernel/qdnd.cpp
@@ -113,11 +113,12 @@ Qt::DropAction QDragManager::drag(QDrag *o)
m_object->d_func()->target = 0;
- QGuiApplicationPrivate::instance()->notifyDragStarted(o);
+ QGuiApplicationPrivate::instance()->notifyDragStarted(m_object.data());
const Qt::DropAction result = m_platformDrag->drag(m_object);
- m_object = 0;
- if (!m_platformDrag->ownsDragObject())
- o->deleteLater();
+ if (!m_object.isNull() && !m_platformDrag->ownsDragObject())
+ m_object->deleteLater();
+
+ m_object.clear();
return result;
}
diff --git a/src/gui/kernel/qdnd_p.h b/src/gui/kernel/qdnd_p.h
index b1219c8658..abb30986a5 100644
--- a/src/gui/kernel/qdnd_p.h
+++ b/src/gui/kernel/qdnd_p.h
@@ -101,13 +101,13 @@ public:
void setCurrentTarget(QObject *target, bool dropped = false);
QObject *currentTarget() const;
- QDrag *object() const { return m_object; }
+ QPointer<QDrag> object() const { return m_object; }
QObject *source() const;
private:
QObject *m_currentDropTarget;
QPlatformDrag *m_platformDrag;
- QDrag *m_object;
+ QPointer<QDrag> m_object;
static QDragManager *m_instance;
Q_DISABLE_COPY_MOVE(QDragManager)
diff --git a/src/gui/kernel/qdrag.cpp b/src/gui/kernel/qdrag.cpp
index dcd0d13d5c..8e2f7be23e 100644
--- a/src/gui/kernel/qdrag.cpp
+++ b/src/gui/kernel/qdrag.cpp
@@ -279,8 +279,11 @@ Qt::DropAction QDrag::exec(Qt::DropActions supportedActions, Qt::DropAction defa
}
d->supported_actions = supportedActions;
d->default_action = transformedDefaultDropAction;
- d->executed_action = QDragManager::self()->drag(this);
-
+ QPointer<QDrag> self = this;
+ auto executed_action = QDragManager::self()->drag(self.data());
+ if (self.isNull())
+ return Qt::IgnoreAction;
+ d->executed_action = executed_action;
return d->executed_action;
}