Merge remote-tracking branch 'origin/KDE/4.10'

This commit is contained in:
Frank Reininghaus 2013-05-22 18:34:25 +02:00
commit 04e825d022
3 changed files with 41 additions and 4 deletions

View file

@ -1327,10 +1327,6 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item,
data.insert("path", path);
}
if (m_requestRole[IsExpandedRole]) {
data.insert("isExpanded", false);
}
if (m_requestRole[IsExpandableRole]) {
data.insert("isExpandable", item.isDir() && item.url() == item.targetUrl());
}

View file

@ -630,6 +630,13 @@ void KFileItemModelRolesUpdater::slotDirWatchDirty(const QString& path)
if (getSizeRole || getIsExpandableRole) {
const int index = m_model->index(KUrl(path));
if (index >= 0) {
if (!m_model->fileItem(index).isDir()) {
// If INotify is used, KDirWatch issues the dirty() signal
// also for changed files inside the directory, even if we
// don't enable this behavior explicitly (see bug 309740).
return;
}
QHash<QByteArray, QVariant> data;
const int count = subItemsCount(path);

View file

@ -78,6 +78,7 @@ private slots:
void testIndexForKeyboardSearch();
void testNameFilter();
void testEmptyPath();
void testRefreshExpandedItem();
void testRemoveHiddenItems();
void collapseParentOfHiddenItems();
void removeParentOfHiddenItems();
@ -856,6 +857,39 @@ void KFileItemModelTest::testEmptyPath()
m_model->slotCompleted();
}
/**
* Verifies that the 'isExpanded' state of folders does not change when the
* 'refreshItems' signal is received, see https://bugs.kde.org/show_bug.cgi?id=299675.
*/
void KFileItemModelTest::testRefreshExpandedItem()
{
QSet<QByteArray> modelRoles = m_model->roles();
modelRoles << "isExpanded" << "isExpandable" << "expandedParentsCount";
m_model->setRoles(modelRoles);
QStringList files;
files << "a/1" << "a/2" << "3" << "4";
m_testDir->createFiles(files);
m_model->loadDirectory(m_testDir->url());
QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
QCOMPARE(m_model->count(), 3); // "a/", "3", "4"
m_model->setExpanded(0, true);
QVERIFY(QTest::kWaitForSignal(m_model, SIGNAL(itemsInserted(KItemRangeList)), DefaultTimeout));
QCOMPARE(m_model->count(), 5); // "a/", "a/1", "a/2", "3", "4"
QVERIFY(m_model->isExpanded(0));
QSignalSpy spyItemsChanged(m_model, SIGNAL(itemsChanged(KItemRangeList,QSet<QByteArray>)));
const KFileItem item = m_model->fileItem(0);
m_model->slotRefreshItems(QList<QPair<KFileItem, KFileItem> >() << qMakePair(item, item));
QVERIFY(!spyItemsChanged.isEmpty());
QCOMPARE(m_model->count(), 5); // "a/", "a/1", "a/2", "3", "4"
QVERIFY(m_model->isExpanded(0));
}
/**
* Verify that removing hidden files and folders from the model does not
* result in a crash, see https://bugs.kde.org/show_bug.cgi?id=314046