X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fclient%2Fclient.cpp;h=45797315a451fe5d9645e64be53a9b537dbd3cbe;hb=e9f87d7542d4a9fe0e9c63dec96e93d270667ecd;hp=2af930f00f7710aa3e3d43d49a6aa35344e5127e;hpb=eb9c5e7ed502b6f01311ecb5d3066a3ac31ec24d;p=quassel.git diff --git a/src/client/client.cpp b/src/client/client.cpp index 2af930f0..45797315 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -511,7 +511,7 @@ void Client::checkForHighlight(Message &msg) { const Network *net = network(msg.bufferInfo().networkId()); if(net && !net->myNick().isEmpty()) { QRegExp nickRegExp("^(.*\\W)?" + QRegExp::escape(net->myNick()) + "(\\W.*)?$"); - if((msg.type() & (Message::Plain | Message::Notice | Message::Action)) && nickRegExp.exactMatch(msg.text())) + if((msg.type() & (Message::Plain | Message::Notice | Message::Action)) && !(msg.flags() & Message::Self) && nickRegExp.exactMatch(msg.text())) msg.setFlags(msg.flags() | Message::Highlight); } } @@ -536,18 +536,31 @@ void Client::removeBuffer(BufferId id) { } void Client::bufferRemoved(BufferId bufferId) { + // first remove the buffer from has. this prohibits further lastSeenUpdates + Buffer *buff = 0; + if(_buffers.contains(bufferId)) { + buff = _buffers.take(bufferId); + disconnect(buff, 0, this, 0); + } + + // then we select a sane buffer (status buffer) + /* we have to manually select a buffer because otherwise inconsitent changes + * to the model might occur: + * the result of a buffer removal triggers a change in the selection model. + * the newly selected buffer might be a channel that hasn't been selected yet + * and a new nickview would be created (which never heard of the "rowsAboutToBeRemoved"). + * this new view (and/or) its sort filter will then only receive a "rowsRemoved" signal. + */ 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 bufferModel()->setCurrentIndex(current.sibling(0,0)); } - + + // and remove it from the model networkModel()->removeBuffer(bufferId); - if(_buffers.contains(bufferId)) { - Buffer *buff = _buffers.take(bufferId); - disconnect(buff, 0, this, 0); + + if(buff) buff->deleteLater(); - } } void Client::bufferRenamed(BufferId bufferId, const QString &newName) {