X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fbufferviewfilter.cpp;h=9ddb6f0040504e16b8bd6ba88eba080be92dc7b5;hp=a14ab031a2003af34a3027c7589d05e9eb8e80e0;hb=ba0af203750f947255e5637ccee5e066effd8ac2;hpb=9de382b2b2a352bad4a076249f07ae84da94c420 diff --git a/src/uisupport/bufferviewfilter.cpp b/src/uisupport/bufferviewfilter.cpp index a14ab031..9ddb6f00 100644 --- a/src/uisupport/bufferviewfilter.cpp +++ b/src/uisupport/bufferviewfilter.cpp @@ -39,7 +39,6 @@ BufferViewFilter::BufferViewFilter(QAbstractItemModel *model, BufferViewConfig * setSourceModel(model); connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(source_rowsInserted(const QModelIndex &, int, int))); - // setSortCaseSensitivity(Qt::CaseInsensitive); setDynamicSortFilter(true); } @@ -116,7 +115,7 @@ bool BufferViewFilter::dropMimeData(const QMimeData *data, Qt::DropAction action } void BufferViewFilter::addBuffer(const BufferId &bufferId) { - if(config()->bufferList().contains(bufferId)) + if(!config() || config()->bufferList().contains(bufferId)) return; int pos = config()->bufferList().count(); @@ -145,8 +144,13 @@ void BufferViewFilter::removeBuffer(const QModelIndex &index) { bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) const { + BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value(); + Q_ASSERT(bufferId.isValid()); if(!_config) return true; + + if(config()->networkId().isValid() && config()->networkId() != sourceModel()->data(source_bufferIndex, NetworkModel::NetworkIdRole).value()) + return false; if(!(_config->allowedBufferTypes() & (BufferInfo::Type)source_bufferIndex.data(NetworkModel::BufferTypeRole).toInt())) return false; @@ -155,11 +159,10 @@ bool BufferViewFilter::filterAcceptBuffer(const QModelIndex &source_bufferIndex) return false; if(_config->minimumActivity() > source_bufferIndex.data(NetworkModel::BufferActivityRole).toInt()) { - if(!Client::bufferModel()->standardSelectionModel()->isSelected(source_bufferIndex)) + if(bufferId != Client::bufferModel()->standardSelectionModel()->currentIndex().data(NetworkModel::BufferIdRole).value()) return false; } - BufferId bufferId = sourceModel()->data(source_bufferIndex, NetworkModel::BufferIdRole).value(); return _config->bufferList().contains(bufferId); } @@ -182,7 +185,7 @@ bool BufferViewFilter::filterAcceptsRow(int source_row, const QModelIndex &sourc return false; } - if(source_parent == QModelIndex()) + if(!source_parent.isValid()) return filterAcceptNetwork(child); else return filterAcceptBuffer(child); @@ -206,7 +209,7 @@ bool BufferViewFilter::bufferLessThan(const QModelIndex &source_left, const QMod if(config()) { return config()->bufferList().indexOf(leftBufferId) < config()->bufferList().indexOf(rightBufferId); } else - return leftBufferId < rightBufferId; + return bufferIdLessThan(leftBufferId, rightBufferId); } bool BufferViewFilter::networkLessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { @@ -257,8 +260,10 @@ void BufferViewFilter::source_rowsInserted(const QModelIndex &parent, int start, if(!config() || !config()->addNewBuffersAutomatically()) return; + QModelIndex child; for(int row = start; row <= end; row++) { - addBuffer(parent.child(row, 0).data(NetworkModel::BufferIdRole).value()); + child = sourceModel()->index(row, 0, parent); + addBuffer(sourceModel()->data(child, NetworkModel::BufferIdRole).value()); } } @@ -279,6 +284,6 @@ bool bufferIdLessThan(const BufferId &left, const BufferId &right) { if(leftType != rightType) return leftType < rightType; else - return Client::networkModel()->data(leftIndex, Qt::DisplayRole).toString() < Client::networkModel()->data(rightIndex, Qt::DisplayRole).toString(); + return QString::compare(Client::networkModel()->data(leftIndex, Qt::DisplayRole).toString(), Client::networkModel()->data(rightIndex, Qt::DisplayRole).toString(), Qt::CaseInsensitive) < 0; }