diff --git a/src/corelib/io/qfileselector.cpp b/src/corelib/io/qfileselector.cpp
index 95fa970b2db..b95e628b0f4 100644
--- a/src/corelib/io/qfileselector.cpp
+++ b/src/corelib/io/qfileselector.cpp
@@ -145,7 +145,9 @@ QFileSelectorPrivate::QFileSelectorPrivate()
Selectors normally available are
\list
\li platform, any of the following strings which match the platform the application is running
- on: android, blackberry, ios, osx, darwin, mac, linux, wince, unix, windows.
+ on (list not exhaustive): android, blackberry, ios, osx, darwin, mac, linux, wince, unix,
+ windows. On Linux, if it can be determined, the name of the distribution too, like debian,
+ fedora or opensuse.
\li locale, same as QLocale::system().name().
\endlist
@@ -351,10 +353,10 @@ QStringList QFileSelectorPrivate::platformSelectors()
// similar, but not identical to QSysInfo::osType
QStringList ret;
#if defined(Q_OS_WIN)
+ // can't fall back to QSysInfo because we need both "winphone" and "winrt" for the Windows Phone case
ret << QStringLiteral("windows");
-# if defined(Q_OS_WINCE)
- ret << QStringLiteral("wince");
-# elif defined(Q_OS_WINRT)
+ ret << QSysInfo::kernelType(); // "wince" and "winnt"
+# if defined(Q_OS_WINRT)
ret << QStringLiteral("winrt");
# if defined(Q_OS_WINPHONE)
ret << QStringLiteral("winphone");
@@ -362,25 +364,16 @@ QStringList QFileSelectorPrivate::platformSelectors()
# endif
#elif defined(Q_OS_UNIX)
ret << QStringLiteral("unix");
-# if defined(Q_OS_ANDROID)
- ret << QStringLiteral("android");
-# elif defined(Q_OS_BLACKBERRY)
- ret << QStringLiteral("blackberry");
-# elif defined(Q_OS_QNX)
- ret << QStringLiteral("qnx");
-# elif defined(Q_OS_LINUX)
- ret << QStringLiteral("linux");
-# elif defined(Q_OS_DARWIN)
- ret << QStringLiteral("darwin");
- ret << QStringLiteral("mac"); // compatibility synonym
-# if defined(Q_OS_IOS)
- ret << QStringLiteral("ios");
-# elif defined(Q_OS_OSX)
- ret << QStringLiteral("osx");
-# endif
-# else
+# if !defined(Q_OS_ANDROID) && !defined(Q_OS_BLACKBERRY)
+ // we don't want "linux" for Android or "qnx" for Blackberry here
ret << QSysInfo::kernelType();
+# ifdef Q_OS_MAC
+ ret << QStringLiteral("mac"); // compatibility, since kernelType() is "darwin"
+# endif
# endif
+ QString productName = QSysInfo::productType();
+ if (productName != QLatin1String("unknown"))
+ ret << productName; // "opensuse", "fedora", "osx", "ios", "blackberry", "android"
#endif
return ret;
}
diff --git a/tests/auto/corelib/io/qfileselector/platforms/+windows/test2 b/tests/auto/corelib/io/qfileselector/platforms/+unix/test3
similarity index 100%
rename from tests/auto/corelib/io/qfileselector/platforms/+windows/test2
rename to tests/auto/corelib/io/qfileselector/platforms/+unix/test3
diff --git a/tests/auto/corelib/io/qfileselector/platforms/+windows/+winnt/test b/tests/auto/corelib/io/qfileselector/platforms/+windows/+winnt/test
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/auto/corelib/io/qfileselector/platforms/+windows/test3 b/tests/auto/corelib/io/qfileselector/platforms/+windows/test3
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/auto/corelib/io/qfileselector/platforms/+winnt/test2 b/tests/auto/corelib/io/qfileselector/platforms/+winnt/test2
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/auto/corelib/io/qfileselector/platforms/test3 b/tests/auto/corelib/io/qfileselector/platforms/test3
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/tests/auto/corelib/io/qfileselector/qfileselector.qrc b/tests/auto/corelib/io/qfileselector/qfileselector.qrc
index 8fe7b841d2f..661647f9335 100644
--- a/tests/auto/corelib/io/qfileselector/qfileselector.qrc
+++ b/tests/auto/corelib/io/qfileselector/qfileselector.qrc
@@ -10,6 +10,8 @@
extras/+custom3/+custom4/test
extras/+custom3/+custom5/test
extras/+custom5/+custom3/test
+
+
platforms/test
platforms/+unix/+android/test
platforms/+unix/+blackberry/test
@@ -17,18 +19,11 @@
platforms/+unix/+darwin/+mac/+osx/test
platforms/+unix/+darwin/+mac/test
platforms/+unix/+darwin/test
- platforms/+windows/+wince/test
- platforms/+windows/test
- platforms/+windows/test2
platforms/+unix/+linux/test
platforms/+unix/test
- platforms/test2
- platforms/+android/test2
- platforms/+blackberry/test2
- platforms/+ios/test2
- platforms/+osx/test2
- platforms/+linux/test2
- platforms/+wince/test2
+ platforms/+windows/+wince/test
+ platforms/+windows/+winnt/test
+ platforms/+windows/test
platforms/+android/test
platforms/+blackberry/test
platforms/+ios/test
@@ -37,5 +32,20 @@
platforms/+mac/test
platforms/+linux/test
platforms/+wince/test
+
+
+ platforms/test2
+ platforms/+android/test2
+ platforms/+blackberry/test2
+ platforms/+ios/test2
+ platforms/+osx/test2
+ platforms/+linux/test2
+ platforms/+wince/test2
+ platforms/+winnt/test2
+
+
+ platforms/test3
+ platforms/+windows/test3
+ platforms/+unix/test3
diff --git a/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp b/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
index 26bb4189d7a..831db9e0b40 100644
--- a/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
+++ b/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
@@ -84,8 +84,10 @@ void tst_QFileSelector::basicTest_data()
QString test("/test");// '/' is here so dir string can also be selector string
QString test2("/test2");
+ QString test3("/test3");
QString expectedPlatform1File(":/platforms");
QString expectedPlatform2File(""); //Only the last selector
+ QString expectedPlatform3File; // Only the first selector (the family)
#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_BLACKBERRY) && \
!defined(Q_OS_DARWIN) && !defined(Q_OS_LINUX)
/* We are only aware of specific unixes, and do not have test files for any of the others.
@@ -96,14 +98,26 @@ void tst_QFileSelector::basicTest_data()
+ QString("unix/test");
expectedPlatform2File = QString(":/platforms/test2");
#else
+ QString distributionName;
+# if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) || defined(Q_OS_FREEBSD)
+ distributionName = QSysInfo::productType();
+# endif
foreach (const QString &selector, QFileSelectorPrivate::platformSelectors()) {
+ // skip the Linux distribution name (if any) since we don't have files for them
+ if (selector == distributionName)
+ continue;
+
expectedPlatform1File = expectedPlatform1File + QLatin1Char('/') + QLatin1Char(selectorIndicator)
+ selector;
expectedPlatform2File = selector;
+ if (expectedPlatform3File.isNull())
+ expectedPlatform3File = selector;
}
expectedPlatform1File += test;
expectedPlatform2File = QLatin1String(":/platforms/") + QLatin1Char(selectorIndicator)
+ expectedPlatform2File + test2;
+ expectedPlatform3File = QLatin1String(":/platforms/") + QLatin1Char(selectorIndicator)
+ + expectedPlatform3File + test3;
#endif
QTest::newRow("platform1") << QString(":/platforms/test") << QStringList()
@@ -112,6 +126,9 @@ void tst_QFileSelector::basicTest_data()
QTest::newRow("platform2") << QString(":/platforms/test2") << QStringList()
<< expectedPlatform2File;
+ QTest::newRow("platform3") << QString(":/platforms/test3") << QStringList()
+ << expectedPlatform3File;
+
QString resourceTestPath(":/extras/test");
QString custom1("custom1");
QTest::newRow("custom1-noselector") << resourceTestPath << QStringList()