X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=b9515e78012edd7d2fe5d4e77443c91d902e6c5f;hb=b709cbc76fc0bd0f14839b4c04ba8caf78d775f1;hp=e3a92819f77bf17a439e84b6966e3f4d3aa0f28a;hpb=04754cf669dd295205226b744bc769b94693866a;p=quassel.git diff --git a/src/client/client.cpp b/src/client/client.cpp index e3a92819..b9515e78 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -280,11 +280,12 @@ void Client::setConnectedToCore(QIODevice *sock, AccountId id) { } void Client::setSyncedToCore() { - // create buffersyncer + // create buffersyncer Q_ASSERT(!_bufferSyncer); _bufferSyncer = new BufferSyncer(this); connect(bufferSyncer(), SIGNAL(lastSeenSet(BufferId, const QDateTime &)), this, SLOT(updateLastSeen(BufferId, const QDateTime &))); connect(bufferSyncer(), SIGNAL(bufferRemoved(BufferId)), this, SLOT(bufferRemoved(BufferId))); + connect(bufferSyncer(), SIGNAL(bufferRenamed(BufferId, QString)), this, SLOT(bufferRenamed(BufferId, QString))); signalProxy()->synchronize(bufferSyncer()); _syncedToCore = true; @@ -293,6 +294,9 @@ void Client::setSyncedToCore() { } void Client::disconnectFromCore() { + if(!isConnected()) + return; + if(socket) { socket->close(); socket->deleteLater(); @@ -304,8 +308,10 @@ void Client::disconnectFromCore() { emit coreConnectionStateChanged(false); // Clear internal data. Hopefully nothing relies on it at this point. - _bufferSyncer->deleteLater(); - _bufferSyncer = 0; + if(_bufferSyncer) { + _bufferSyncer->deleteLater(); + _bufferSyncer = 0; + } _networkModel->clear(); QHash::iterator bufferIter = _buffers.begin(); @@ -459,6 +465,14 @@ void Client::setBufferLastSeen(BufferId id, const QDateTime &lastSeen) { } void Client::bufferRemoved(BufferId bufferId) { + QModelIndex current = bufferModel()->currentIndex(); + if(current.data(NetworkModel::BufferIdRole).value() == bufferId) { + // select the status buffer if the currently displayed buffer is about to be removed + QModelIndex newCurrent = current.sibling(0,0); + bufferModel()->standardSelectionModel()->setCurrentIndex(newCurrent, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); + bufferModel()->standardSelectionModel()->select(newCurrent, QItemSelectionModel::ClearAndSelect); + } + networkModel()->removeBuffer(bufferId); if(_buffers.contains(bufferId)) { Buffer *buff = _buffers.take(bufferId); @@ -466,3 +480,10 @@ void Client::bufferRemoved(BufferId bufferId) { buff->deleteLater(); } } + +void Client::bufferRenamed(BufferId bufferId, const QString &newName) { + QModelIndex bufferIndex = networkModel()->bufferIndex(bufferId); + if(bufferIndex.isValid()) { + networkModel()->setData(bufferIndex, newName, Qt::DisplayRole); + } +}