X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=77527427dc6605ab01f5754de2b81895a2f6c3bd;hp=c35ccb5ef38f7d89c281139ca81239350bb73531;hb=a634acadbcf6017474f68a3eaf7cb632660e9e49;hpb=dde01ef184386a7391a6763f5bff33a0aab7ecb2 diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index c35ccb5e..77527427 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -20,6 +20,8 @@ #include "signalproxy.h" +#include + SignalProxy::SignalProxy(ProxyType _type, QIODevice *dev, QObject *parent) : QObject(parent), type(_type) { if(dev) { if(type != Client) { @@ -31,6 +33,7 @@ SignalProxy::SignalProxy(ProxyType _type, QIODevice *dev, QObject *parent) : QOb } SignalProxy::~SignalProxy() { + //qDebug() << "peers:" << peers.count(); foreach(Connection conn, peers) { conn.peer->deleteLater(); conn.device->deleteLater(); } @@ -71,14 +74,19 @@ void SignalProxy::socketDisconnected() { } void SignalProxy::attachSignal(QObject* sender, const char* signal, const QByteArray& rpcFunction) { + disconnect(sender, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *))); + connect(sender, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *))); + foreach(Connection conn, peers) { conn.peer->attachSignal(sender, signal, rpcFunction); } attachedSignals.append(SignalDesc(sender, signal, rpcFunction)); - } void SignalProxy::attachSlot(const QByteArray& rpcFunction, QObject* recv, const char* slot) { + disconnect(recv, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *))); + connect(recv, SIGNAL(destroyed(QObject *)), this, SLOT(detachObject(QObject *))); + foreach(Connection conn, peers) { conn.peer->attachSlot(rpcFunction, recv, slot); }