X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fnickview.cpp;h=4691318691efb79ca43e681668863157a1063e67;hp=78cb709be6c17099d5922cfdd3f5e350c219e192;hb=819b4ac594c6f7d2dba211322abd907a3991771b;hpb=6ac855b96988ebc999f7017765ae3dbda527301a 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) {