diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-17 10:11:17 +0100 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2020-11-17 13:20:07 +0000 |
| commit | 603c904cf5ca598ec9b627bbff0c7d2d4ccb7fe2 (patch) | |
| tree | c4a203d40d0e655b611c963f2a186b6c3e0b0f51 /sources/pyside6/libpyside/signalmanager.cpp | |
| parent | 70f219d10e15cd8fe125b6169c640598d89223c0 (diff) | |
libpyside: Refactor GlobalReceiverV2Map
Use a QHash of object/method PyObject instead of a
QByteArray representing the sum of hash values of both
as a string.
The problem with using hash functions here is that 2 keys
might be identical due to the hashing.
Rename the hash() methods to key().
Task-number: PYSIDE-1422
Change-Id: Ie1344d8bd85a073ef5f6e2cb461bd2f514265a9f
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/pyside6/libpyside/signalmanager.cpp')
| -rw-r--r-- | sources/pyside6/libpyside/signalmanager.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/sources/pyside6/libpyside/signalmanager.cpp b/sources/pyside6/libpyside/signalmanager.cpp index 9507a3ff3..2c08f4328 100644 --- a/sources/pyside6/libpyside/signalmanager.cpp +++ b/sources/pyside6/libpyside/signalmanager.cpp @@ -212,11 +212,10 @@ using namespace PySide; struct SignalManager::SignalManagerPrivate { - SharedMap m_globalReceivers; + GlobalReceiverV2MapPtr m_globalReceivers; - SignalManagerPrivate() + SignalManagerPrivate() : m_globalReceivers(new GlobalReceiverV2Map{}) { - m_globalReceivers = SharedMap( new QMap<QByteArray, GlobalReceiverV2 *>() ); } ~SignalManagerPrivate() @@ -294,13 +293,13 @@ SignalManager &SignalManager::instance() QObject *SignalManager::globalReceiver(QObject *sender, PyObject *callback) { - SharedMap globalReceivers = m_d->m_globalReceivers; - QByteArray hash = GlobalReceiverV2::hash(callback); + GlobalReceiverV2MapPtr globalReceivers = m_d->m_globalReceivers; + GlobalReceiverKey key = GlobalReceiverV2::key(callback); GlobalReceiverV2 *gr = nullptr; - auto it = globalReceivers->find(hash); + auto it = globalReceivers->find(key); if (it == globalReceivers->end()) { gr = new GlobalReceiverV2(callback, globalReceivers); - globalReceivers->insert(hash, gr); + globalReceivers->insert(key, gr); if (sender) { gr->incRef(sender); // create a link reference gr->decRef(); // remove extra reference |
