diff options
author | Kari Oikarinen <kari.oikarinen@qt.io> | 2019-11-07 09:28:54 +0200 |
---|---|---|
committer | Kari Oikarinen <kari.oikarinen@qt.io> | 2019-11-07 09:28:54 +0200 |
commit | b77712dd95adb6644e9af3bf98a2a6ebc5a52ec4 (patch) | |
tree | 322294455987600356d762bf0fe0219e6da93e5c /src/core/nodes/qnode_p.h | |
parent | 36dc37fa100ad57c6709248b04d48787f482dfb4 (diff) | |
parent | 64b767368d1a03f3e4923450cec90ebf4edac050 (diff) |
Merge 5.12 into 5.12.6v5.12.6
Change-Id: I0c9bbaeaeeba1a18447c48faf189ac19ab034c1b
Diffstat (limited to 'src/core/nodes/qnode_p.h')
-rw-r--r-- | src/core/nodes/qnode_p.h | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/core/nodes/qnode_p.h b/src/core/nodes/qnode_p.h index 361a3b75b..3d0cee859 100644 --- a/src/core/nodes/qnode_p.h +++ b/src/core/nodes/qnode_p.h @@ -120,7 +120,7 @@ public: // If the node is destoyed, we make sure not to keep a dangling pointer to it Q_Q(QNode); auto f = [q, func]() { (static_cast<Caller *>(q)->*func)(nullptr); }; - m_destructionConnections.insert(node, QObject::connect(node, &QNode::nodeDestroyed, f)); + m_destructionConnections.push_back({node, QObject::connect(node, &QNode::nodeDestroyed, f)}); } template<typename Caller, typename NodeType> @@ -129,7 +129,7 @@ public: // If the node is destoyed, we make sure not to keep a dangling pointer to it Q_Q(QNode); auto f = [q, func, node]() { (static_cast<Caller *>(q)->*func)(node); }; - m_destructionConnections.insert(node, QObject::connect(node, &QNode::nodeDestroyed, f)); + m_destructionConnections.push_back({node, QObject::connect(node, &QNode::nodeDestroyed, f)}); } template<typename Caller, typename ValueType> @@ -142,7 +142,7 @@ public: // If the node is destoyed, we make sure not to keep a dangling pointer to it Q_Q(QNode); auto f = [q, func, resetValue]() { (static_cast<Caller *>(q)->*func)(resetValue); }; - m_destructionConnections.insert(node, QObject::connect(node, &QNode::nodeDestroyed, f)); + m_destructionConnections.push_back({node, QObject::connect(node, &QNode::nodeDestroyed, f)}); } template<typename Caller, typename NodeType> @@ -150,12 +150,21 @@ public: { // If the node is destoyed, we make sure not to keep a dangling pointer to it auto f = [this, func, node]() { (static_cast<Caller *>(this)->*func)(node); }; - m_destructionConnections.insert(node, QObject::connect(node, &QNode::nodeDestroyed, f)); + m_destructionConnections.push_back({node, QObject::connect(node, &QNode::nodeDestroyed, f)}); } void unregisterDestructionHelper(QNode *node) { - QObject::disconnect(m_destructionConnections.take(node)); + m_destructionConnections.erase(std::remove_if(m_destructionConnections.begin(), + m_destructionConnections.end(), + [this, node] (const QPair<QNode *, QMetaObject::Connection> &nodeConnectionPair) { + if (nodeConnectionPair.first == node) { + QObject::disconnect(nodeConnectionPair.second); + return true; + } + return false; + }), + m_destructionConnections.end()); } static const QMetaObject *findStaticMetaObject(const QMetaObject *metaObject); @@ -180,7 +189,7 @@ private: friend class PropertyChangeHandler<QNodePrivate>; bool m_propertyChangesSetup; PropertyChangeHandler<QNodePrivate> m_signals; - QHash<QNode *, QMetaObject::Connection> m_destructionConnections; + QVector<QPair<QNode *, QMetaObject::Connection>> m_destructionConnections; }; class NodePostConstructorInit : public QObject |