From f28377f1e37a95ddc5d3fdf357d7ede7b298eddb Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Thu, 5 Apr 2012 16:12:10 +0200 Subject: [PATCH] Fix filtering issue When filtering items it might be possible that the update of the widgets is wrong although the model internally has a correct state. BUG: 297269 FIXED-IN: 4.8.3 --- src/kitemviews/kitemlistview.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index ddc65c387..89c3cbaa6 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -614,7 +614,7 @@ void KItemListView::setHeaderVisible(bool visible) const QSize headerSize = style()->sizeFromContents(QStyle::CT_HeaderSection, &option, QSize()); - m_headerWidget->setPos(0, 0); + m_headerWidget->setPos(0, 0); m_headerWidget->resize(size().width(), headerSize.height()); m_headerWidget->setModel(m_model); m_headerWidget->setColumns(m_visibleRoles); @@ -927,8 +927,13 @@ void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) m_layouter->markAsDirty(); + int removedItemsCount = 0; + for (int i = 0; i < itemRanges.count(); ++i) { + removedItemsCount += itemRanges[i].count; + } + for (int i = itemRanges.count() - 1; i >= 0; --i) { - const KItemRange& range = itemRanges.at(i); + const KItemRange& range = itemRanges[i]; const int index = range.index; const int count = range.count; if (index < 0 || count <= 0) { @@ -940,7 +945,8 @@ void KItemListView::slotItemsRemoved(const KItemRangeList& itemRanges) const int firstRemovedIndex = index; const int lastRemovedIndex = index + count - 1; - const int lastIndex = m_model->count() + count - 1; + const int lastIndex = m_model->count() -1 + removedItemsCount; + removedItemsCount -= count; // Remove all KItemListWidget instances that got deleted for (int i = firstRemovedIndex; i <= lastRemovedIndex; ++i) { -- 2.47.3