From 677303b5c03932108775e77d50a2355d56f6f1a4 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Mon, 13 Jan 2014 17:17:53 -0800 Subject: [PATCH] properly hook SharedNodePointer for signals/slots --- libraries/shared/src/Node.h | 3 ++- libraries/shared/src/NodeList.cpp | 5 ++++- libraries/shared/src/NodeList.h | 5 +++-- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libraries/shared/src/Node.h b/libraries/shared/src/Node.h index 96f16a31d4..fe6e95dac8 100644 --- a/libraries/shared/src/Node.h +++ b/libraries/shared/src/Node.h @@ -25,7 +25,8 @@ #include "NodeData.h" #include "SimpleMovingAverage.h" -class Node { +class Node : public QObject { + Q_OBJECT public: Node(const QUuid& uuid, char type, const HifiSockAddr& publicSocket, const HifiSockAddr& localSocket); ~Node(); diff --git a/libraries/shared/src/NodeList.cpp b/libraries/shared/src/NodeList.cpp index a4e3aaafae..46bc8391e5 100644 --- a/libraries/shared/src/NodeList.cpp +++ b/libraries/shared/src/NodeList.cpp @@ -36,6 +36,9 @@ NodeList* NodeList::_sharedInstance = NULL; NodeList* NodeList::createInstance(char ownerType, unsigned short int socketListenPort) { if (!_sharedInstance) { _sharedInstance = new NodeList(ownerType, socketListenPort); + + // register the SharedNodePointer meta-type for signals/slots + qRegisterMetaType(); } else { qDebug("NodeList createInstance called with existing instance."); } @@ -682,7 +685,7 @@ SharedNodePointer NodeList::addOrUpdateNode(const QUuid& uuid, char nodeType, // we didn't have this node, so add them Node* newNode = new Node(uuid, nodeType, publicSocket, localSocket); - NodeHash::iterator addedItem = _nodeHash.insert(newNode->getUUID(), SharedNodePointer(newNode)); + NodeHash::iterator addedItem = _nodeHash.insert(newNode->getUUID(), SharedNodePointer(newNode, &QObject::deleteLater)); qDebug() << "Added" << *newNode << "\n"; diff --git a/libraries/shared/src/NodeList.h b/libraries/shared/src/NodeList.h index e139eb62f2..efb08f32d1 100644 --- a/libraries/shared/src/NodeList.h +++ b/libraries/shared/src/NodeList.h @@ -52,6 +52,7 @@ public: typedef QSharedPointer SharedNodePointer; typedef QHash NodeHash; +Q_DECLARE_METATYPE(SharedNodePointer) class NodeList : public QObject { Q_OBJECT @@ -128,8 +129,8 @@ public slots: void pingInactiveNodes(); void removeSilentNodes(); signals: - void nodeAdded(QSharedPointer); - void nodeKilled(QSharedPointer); + void nodeAdded(SharedNodePointer); + void nodeKilled(SharedNodePointer); private: static NodeList* _sharedInstance;