X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fcoresession.cpp;h=e89f821a42483133400738037dea90c14a16a391;hp=17820f99c400915872cdcfaacedf5c1a78f68537;hb=5b083e1f67c77ceb7d1d134e976cd6081b70bf12;hpb=5b560ec1a01349562ac58051ca7e7fa899d4b994 diff --git a/src/core/coresession.cpp b/src/core/coresession.cpp index 17820f99..e89f821a 100644 --- a/src/core/coresession.cpp +++ b/src/core/coresession.cpp @@ -430,6 +430,23 @@ void CoreSession::updateNetwork(const NetworkInfo &info) { } void CoreSession::removeNetwork(NetworkId id) { + // Make sure the network is disconnected! + NetworkConnection *conn = _connections.value(id, 0); + if(conn) { + if(conn->connectionState() != Network::Disconnected) { + connect(conn, SIGNAL(disconnected(NetworkId)), this, SLOT(destroyNetwork(NetworkId))); + conn->disconnectFromIrc(); + } else { + _connections.take(id)->deleteLater(); // TODO make this saner + destroyNetwork(id); + } + } else { + destroyNetwork(id); + } +} + +void CoreSession::destroyNetwork(NetworkId id) { + Q_ASSERT(!_connections.contains(id)); Network *net = _networks.take(id); if(net && Core::removeNetwork(user(), id)) { emit networkRemoved(id);