X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fuisupport%2Fnickview.cpp;h=4691318691efb79ca43e681668863157a1063e67;hb=819b4ac594c6f7d2dba211322abd907a3991771b;hp=78cb709be6c17099d5922cfdd3f5e350c219e192;hpb=89c07686d193fe31e1b3ea45735b3f5a0d1e6cfb;p=quassel.git diff --git a/src/uisupport/nickview.cpp b/src/uisupport/nickview.cpp index 78cb709b..46913186 100644 --- a/src/uisupport/nickview.cpp +++ b/src/uisupport/nickview.cpp @@ -25,6 +25,7 @@ #include "nickview.h" #include "nickviewfilter.h" #include "networkmodel.h" +#include "buffermodel.h" #include "types.h" #include "client.h" @@ -149,8 +150,25 @@ void NickView::showContextMenu(const QPoint & pos ) { void NickView::startQuery(const QModelIndex & index) { QString nick = nickFromModelIndex(index); - BufferInfo bufferInfo = bufferInfoFromModelIndex(index); - executeCommand(bufferInfo, QString("/QUERY %1").arg(nick)); + bool activated = false; + + if(QSortFilterProxyModel *nickviewFilter = qobject_cast(model())) { + // rootIndex() is the channel, parent() is the corresponding network + QModelIndex networkIndex = rootIndex().parent(); + QModelIndex source_networkIndex = nickviewFilter->mapToSource(networkIndex); + for(int i = 0; i < Client::networkModel()->rowCount(source_networkIndex); i++) { + QModelIndex childIndex = source_networkIndex.child( i, 0); + if(nick.toLower() == childIndex.data().toString().toLower()) { + QModelIndex queryIndex = Client::bufferModel()->mapFromSource(childIndex); + Client::bufferModel()->setCurrentIndex(queryIndex); + activated = true; + } + } + } + if(!activated) { + BufferInfo bufferInfo = bufferInfoFromModelIndex(index); + executeCommand(bufferInfo, QString("/QUERY %1").arg(nick)); + } } void NickView::executeCommand(const BufferInfo & bufferInfo, const QString & command) {