aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/libpyside/signalmanager.cpp
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-17 10:11:17 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2020-11-17 13:20:07 +0000
commit603c904cf5ca598ec9b627bbff0c7d2d4ccb7fe2 (patch)
treec4a203d40d0e655b611c963f2a186b6c3e0b0f51 /sources/pyside6/libpyside/signalmanager.cpp
parent70f219d10e15cd8fe125b6169c640598d89223c0 (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.cpp13
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