QFileSystemModel: Handle QDir::NoDot and QDir::NoDotDot for setFilter
Add support for QDir::NoDot and QDir::NoDotDot for setFilter in QFileSystemModel. Task-number: QTBUG-14760 Reviewed-by: Frederik (cherry picked from commit b60d82fd56897b1a1d3cc730172f71c27a497ede)
This commit is contained in:
parent
6d401a9eb0
commit
55bfa460d2
@ -1977,13 +1977,14 @@ bool QFileSystemModelPrivate::filtersAcceptsNode(const QFileSystemNode *node) co
|
||||
const bool hideHidden = !(filters & QDir::Hidden);
|
||||
const bool hideSystem = !(filters & QDir::System);
|
||||
const bool hideSymlinks = (filters & QDir::NoSymLinks);
|
||||
const bool hideDotAndDotDot = (filters & QDir::NoDotAndDotDot);
|
||||
const bool hideDot = (filters & QDir::NoDot) || (filters & QDir::NoDotAndDotDot); // ### Qt5: simplify (because NoDotAndDotDot=NoDot|NoDotDot)
|
||||
const bool hideDotDot = (filters & QDir::NoDotDot) || (filters & QDir::NoDotAndDotDot); // ### Qt5: simplify (because NoDotAndDotDot=NoDot|NoDotDot)
|
||||
|
||||
// Note that we match the behavior of entryList and not QFileInfo on this and this
|
||||
// incompatibility won't be fixed until Qt 5 at least
|
||||
bool isDotOrDot = ( (node->fileName == QLatin1String(".")
|
||||
|| node->fileName == QLatin1String("..")));
|
||||
if ( (hideHidden && (!isDotOrDot && node->isHidden()))
|
||||
bool isDot = (node->fileName == QLatin1String("."));
|
||||
bool isDotDot = (node->fileName == QLatin1String(".."));
|
||||
if ( (hideHidden && !(isDot || isDotDot) && node->isHidden())
|
||||
|| (hideSystem && node->isSystem())
|
||||
|| (hideDirs && node->isDir())
|
||||
|| (hideFiles && node->isFile())
|
||||
@ -1991,7 +1992,8 @@ bool QFileSystemModelPrivate::filtersAcceptsNode(const QFileSystemNode *node) co
|
||||
|| (hideReadable && node->isReadable())
|
||||
|| (hideWritable && node->isWritable())
|
||||
|| (hideExecutable && node->isExecutable())
|
||||
|| (hideDotAndDotDot && isDotOrDot))
|
||||
|| (hideDot && isDot)
|
||||
|| (hideDotDot && isDotDot))
|
||||
return false;
|
||||
|
||||
return nameFilterDisables || passNameFilters(node);
|
||||
|
@ -632,7 +632,12 @@ void tst_QFileSystemModel::filters_data()
|
||||
QTest::addColumn<int>("rowCount");
|
||||
#if !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN)
|
||||
QTest::newRow("no dirs") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs) << QStringList() << 2;
|
||||
QTest::newRow("one dir - dotdot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDotAndDotDot) << QStringList() << 1;
|
||||
QTest::newRow("no dirs - dot") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::NoDot) << QStringList() << 1;
|
||||
QTest::newRow("no dirs - dotdot") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::NoDotDot) << QStringList() << 1;
|
||||
QTest::newRow("no dirs - dotanddotdot") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::NoDotAndDotDot) << QStringList() << 0;
|
||||
QTest::newRow("one dir - dot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDot) << QStringList() << 2;
|
||||
QTest::newRow("one dir - dotdot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDotDot) << QStringList() << 2;
|
||||
QTest::newRow("one dir - dotanddotdot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDotAndDotDot) << QStringList() << 1;
|
||||
QTest::newRow("one dir") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs) << QStringList() << 3;
|
||||
QTest::newRow("no dir + hidden") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::Hidden) << QStringList() << 2;
|
||||
QTest::newRow("dir+hid+files") << (QStringList() << "a" << "b" << "c") << QStringList() <<
|
||||
@ -650,7 +655,12 @@ void tst_QFileSystemModel::filters_data()
|
||||
#else
|
||||
QTest::qWait(3000); // We need to calm down a bit...
|
||||
QTest::newRow("no dirs") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs) << QStringList() << 0;
|
||||
QTest::newRow("one dir - dotdot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDotAndDotDot) << QStringList() << 1;
|
||||
QTest::newRow("no dirs - dot") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::NoDot) << QStringList() << 1;
|
||||
QTest::newRow("no dirs - dotdot") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::NoDotDot) << QStringList() << 1;
|
||||
QTest::newRow("no dirs - dotanddotdot") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::NoDotAndDotDot) << QStringList() << 0;
|
||||
QTest::newRow("one dir - dot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDot) << QStringList() << 2;
|
||||
QTest::newRow("one dir - dotdot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDotDot) << QStringList() << 2;
|
||||
QTest::newRow("one dir - dotanddotdot") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs | QDir::NoDotAndDotDot) << QStringList() << 1;
|
||||
QTest::newRow("one dir") << (QStringList() << "a" << "b" << "c") << (QStringList() << "Z") << (int)(QDir::Dirs) << QStringList() << 1;
|
||||
QTest::newRow("no dir + hidden") << (QStringList() << "a" << "b" << "c") << QStringList() << (int)(QDir::Dirs | QDir::Hidden) << QStringList() << 0;
|
||||
QTest::newRow("dir+hid+files") << (QStringList() << "a" << "b" << "c") << QStringList() <<
|
||||
@ -699,10 +709,23 @@ void tst_QFileSystemModel::filters()
|
||||
// Make sure that we do what QDir does
|
||||
QDir xFactor(tmp);
|
||||
QDir::Filters filters = (QDir::Filters)dirFilters;
|
||||
QStringList dirEntries;
|
||||
|
||||
if (nameFilters.count() > 0)
|
||||
QCOMPARE(xFactor.entryList(nameFilters, filters).count(), rowCount);
|
||||
dirEntries = xFactor.entryList(nameFilters, filters);
|
||||
else
|
||||
QVERIFY(xFactor.entryList(filters).count() == rowCount);
|
||||
dirEntries = xFactor.entryList(filters);
|
||||
|
||||
QCOMPARE(dirEntries.count(), rowCount);
|
||||
|
||||
QStringList modelEntries;
|
||||
|
||||
for (int i = 0; i < rowCount; ++i)
|
||||
modelEntries.append(model->data(model->index(i, 0, root), QFileSystemModel::FileNameRole).toString());
|
||||
|
||||
qSort(dirEntries);
|
||||
qSort(modelEntries);
|
||||
QCOMPARE(dirEntries, modelEntries);
|
||||
|
||||
#ifdef Q_OS_LINUX
|
||||
if (files.count() >= 3 && rowCount >= 3 && rowCount != 5) {
|
||||
|
Loading…
Reference in New Issue
Block a user