diff options
author | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-08-26 15:09:50 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@theqtcompany.com> | 2015-08-27 19:27:26 +0000 |
commit | 2117a76136e6e3e48f70d7a444b06c0ee0ff9ec4 (patch) | |
tree | d9af91a742c9524c1975cf9502b1ba461b60693e | |
parent | 9cdbf48c3375feb9bff2e8a4749ec47b9831b15c (diff) |
QPlatformFileDialogHelper::cleanFilterList(): Allow for ',' in glob.
RCS files (text/plain) have the glob pattern "*,v", which caused
the regular expression match to fail.
Task-number: QTBUG-47923
Change-Id: I7d8682ef51306cb4da58a2b3880842bd99892ea3
Reviewed-by: David Faure <david.faure@kdab.com>
-rw-r--r-- | src/gui/kernel/qplatformdialoghelper.cpp | 3 | ||||
-rw-r--r-- | tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp | 23 |
2 files changed, 25 insertions, 1 deletions
diff --git a/src/gui/kernel/qplatformdialoghelper.cpp b/src/gui/kernel/qplatformdialoghelper.cpp index 25894fd504..20dc716d89 100644 --- a/src/gui/kernel/qplatformdialoghelper.cpp +++ b/src/gui/kernel/qplatformdialoghelper.cpp @@ -651,12 +651,13 @@ void QPlatformFileDialogHelper::setOptions(const QSharedPointer<QFileDialogOptio } const char *QPlatformFileDialogHelper::filterRegExp = -"^(.*)\\(([a-zA-Z0-9_.*? +;#\\-\\[\\]@\\{\\}/!<>\\$%&=^~:\\|]*)\\)$"; +"^(.*)\\(([a-zA-Z0-9_.,*? +;#\\-\\[\\]@\\{\\}/!<>\\$%&=^~:\\|]*)\\)$"; // Makes a list of filters from a normal filter string "Image Files (*.png *.jpg)" QStringList QPlatformFileDialogHelper::cleanFilterList(const QString &filter) { QRegExp regexp(QString::fromLatin1(filterRegExp)); + Q_ASSERT(regexp.isValid()); QString f = filter; int i = regexp.indexIn(f); if (i >= 0) diff --git a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp index ed34c67aad..85f60102a7 100644 --- a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp @@ -57,6 +57,8 @@ #include "../../../../../src/widgets/dialogs/qfilesystemmodel_p.h" #include "../../../../../src/widgets/dialogs/qfiledialog_p.h" +#include <qpa/qplatformdialoghelper.h> + #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) #include "../../../network-settings.h" #endif @@ -134,6 +136,8 @@ private slots: void QTBUG6558_showDirsOnly(); void QTBUG4842_selectFilterWithHideNameFilterDetails(); void dontShowCompleterOnRoot(); + void nameFilterParsing_data(); + void nameFilterParsing(); private: void cleanupSettingsFile(); @@ -1353,5 +1357,24 @@ void tst_QFileDialog2::dontShowCompleterOnRoot() QTRY_VERIFY(lineEdit->completer()->popup()->isHidden()); } +void tst_QFileDialog2::nameFilterParsing_data() +{ + QTest::addColumn<QString>("filterString"); + QTest::addColumn<QStringList>("filters"); + + // QTBUG-47923: Do not trip over "*,v". + QTest::newRow("text") << "plain text document (*.txt *.asc *,v *.doc)" + << (QStringList() << "*.txt" << "*.asc" << "*,v" << "*.doc"); + QTest::newRow("html") << "HTML document (*.html *.htm)" + << (QStringList() << "*.html" << "*.htm"); +} + +void tst_QFileDialog2::nameFilterParsing() +{ + QFETCH(QString, filterString); + QFETCH(QStringList, filters); + QCOMPARE(QPlatformFileDialogHelper::cleanFilterList(filterString), filters); +} + QTEST_MAIN(tst_QFileDialog2) #include "tst_qfiledialog2.moc" |