X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsignalproxy.cpp;h=763daf61b14f44b2b7065e01fc94b770a511759d;hp=c35ccb5ef38f7d89c281139ca81239350bb73531;hb=da3abc60f84c44422242d59fadb1d2fa8fd49221;hpb=dde01ef184386a7391a6763f5bff33a0aab7ecb2 diff --git a/src/common/signalproxy.cpp b/src/common/signalproxy.cpp index c35ccb5e..763daf61 100644 --- a/src/common/signalproxy.cpp +++ b/src/common/signalproxy.cpp @@ -31,6 +31,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 +72,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); }