From bd02faa982c263205b5cc21d6ceb4225a83c76b5 Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Thu, 17 May 2012 13:32:09 +0200 Subject: KStandardItemModel: Fix inconsistent internal state Assure that the index-cache is kept consistent with the items when a removing or inserting is done. A unit-test will be created as soon as possible. --- src/kitemviews/kstandarditemmodel.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) (limited to 'src/kitemviews/kstandarditemmodel.cpp') diff --git a/src/kitemviews/kstandarditemmodel.cpp b/src/kitemviews/kstandarditemmodel.cpp index e3d40038d..11d72a4ac 100644 --- a/src/kitemviews/kstandarditemmodel.cpp +++ b/src/kitemviews/kstandarditemmodel.cpp @@ -42,6 +42,13 @@ void KStandardItemModel::insertItem(int index, KStandardItem* item) item->m_model = this; m_items.insert(index, item); m_indexesForItems.insert(item, index); + + // Inserting an item requires to update the indexes + // afterwards from m_indexesForItems. + for (int i = index + 1; i < m_items.count(); ++i) { + m_indexesForItems.insert(m_items[i], i); + } + // TODO: no hierarchical items are handled yet onItemInserted(index); @@ -94,12 +101,19 @@ void KStandardItemModel::removeItem(int index) m_indexesForItems.remove(item); m_items.removeAt(index); + // Removing an item requires to update the indexes + // afterwards from m_indexesForItems. + for (int i = index; i < m_items.count(); ++i) { + m_indexesForItems.insert(m_items[i], i); + } + onItemRemoved(index, item); - emit itemsRemoved(KItemRangeList() << KItemRange(index, 1)); delete item; item = 0; + emit itemsRemoved(KItemRangeList() << KItemRange(index, 1)); + // TODO: no hierarchical items are handled yet } } -- cgit v1.3