diff options
author | Patrick J Volkerding <volkerdi@slackware.com> | 2023-01-09 20:10:55 +0000 |
---|---|---|
committer | Eric Hameleers <alien@slackware.com> | 2023-01-09 21:34:48 +0100 |
commit | e33171c1dcd46c51e778c9de2cc78586b3a00b9d (patch) | |
tree | b24ba31d7a230fde8abe00facebae118e8ac608d /source/kde | |
parent | e0eaf6e451b08cc5af9d17258f2c6157cb424efe (diff) | |
download | current-e33171c1dcd46c51e778c9de2cc78586b3a00b9d.tar.gz current-e33171c1dcd46c51e778c9de2cc78586b3a00b9d.tar.xz |
Mon Jan 9 20:10:55 UTC 202320230109201055
a/aaa_libraries-15.1-x86_64-16.txz: Rebuilt.
Upgraded: libncurses.so.6.4, libncursesw.so.6.4, libtinfo.so.6.4,
libform.so.6.4, libformw.so.6.4, libmenu.so.6.4, libmenuw.so.6.4,
libpanel.so.6.4, libglib-2.0.so.0.7400.4, libgmodule-2.0.so.0.7400.4,
libgobject-2.0.so.0.7400.4, libgthread-2.0.so.0.7400.4, libmpfr.so.6.2.0.
a/aaa_terminfo-6.4-x86_64-1.txz: Upgraded.
ap/man-db-2.11.2-x86_64-1.txz: Upgraded.
kde/kio-5.101.0-x86_64-2.txz: Rebuilt.
[PATCH] Restore old behavior for KFileFilterCombo::setFilter
Thanks to marav.
kde/okteta-0.26.10-x86_64-1.txz: Upgraded.
l/libspectre-0.2.12-x86_64-1.txz: Upgraded.
l/mpfr-4.2.0-x86_64-1.txz: Upgraded.
l/ncurses-6.4-x86_64-1.txz: Upgraded.
x/xterm-378-x86_64-1.txz: Upgraded.
xap/libnma-1.10.6-x86_64-1.txz: Upgraded.
Diffstat (limited to 'source/kde')
-rw-r--r-- | source/kde/kde/build/kio | 2 | ||||
-rw-r--r-- | source/kde/kde/patch/kio.patch | 1 | ||||
-rw-r--r-- | source/kde/kde/patch/kio/c801571f.patch | 229 |
3 files changed, 231 insertions, 1 deletions
diff --git a/source/kde/kde/build/kio b/source/kde/kde/build/kio index d00491fd7..0cfbf0888 100644 --- a/source/kde/kde/build/kio +++ b/source/kde/kde/build/kio @@ -1 +1 @@ -1 +2 diff --git a/source/kde/kde/patch/kio.patch b/source/kde/kde/patch/kio.patch new file mode 100644 index 000000000..8c9550642 --- /dev/null +++ b/source/kde/kde/patch/kio.patch @@ -0,0 +1 @@ +cat $CWD/patch/kio/c801571f.patch | patch -p1 --verbose || { touch ${SLACK_KDE_BUILD_DIR}/${PKGNAME}.failed ; continue ; } diff --git a/source/kde/kde/patch/kio/c801571f.patch b/source/kde/kde/patch/kio/c801571f.patch new file mode 100644 index 000000000..1045ac4be --- /dev/null +++ b/source/kde/kde/patch/kio/c801571f.patch @@ -0,0 +1,229 @@ +From c801571f78136692873ea3d2d22e35ac7e5fa530 Mon Sep 17 00:00:00 2001 +From: Nicolas Fella <nicolas.fella@gmx.de> +Date: Wed, 28 Dec 2022 21:32:14 +0100 +Subject: [PATCH] Restore old behavior for KFileFilterCombo::setFilter + +fb2a2268dbb2033bb8483d9bee63cb11f914573e refactored it to use the newly introduced KFileFilter +class to parse the input. However, it actually allows input that is not a valid filter string expression. + +For example K3B uses filters like "audio/x-wav |Wave Sound Files", which are now parsed incorrectly. + +Also, contrary to KFileWidget's filter strings slashes were allowed unescapted, which broke Krita. + +K3B's usage of KFileFilterCombo for this is somewhat questionable, but we should not break it regardless. + +Longer-term setFilter should be replaced with API that takes a KFileFilter object to avoid such confusion + +Revert the implementation of setFilter to the original one. For setMimeFilter the usage of KFileFilter is fine. +That means we now have separate codepaths for when setFilter and setMimeFilter was called. Longer-term there will +be only one using KFileFilter + +BUG: 463309 +--- + autotests/kfilefiltercombotest.cpp | 20 +++++++++ + src/filewidgets/kfilefiltercombo.cpp | 64 +++++++++++++++++++--------- + 2 files changed, 65 insertions(+), 19 deletions(-) + +diff --git a/autotests/kfilefiltercombotest.cpp b/autotests/kfilefiltercombotest.cpp +index bb155f2de..22a042020 100644 +--- a/autotests/kfilefiltercombotest.cpp ++++ b/autotests/kfilefiltercombotest.cpp +@@ -65,6 +65,15 @@ void KFileFilterComboTest::testSetFilter_data() + QTest::addRow("mutiple_extension_multiple_filter") + << "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" << QStringList{"C++ Source Files", "Header files"}; + QTest::addRow("pattern_only") << "*.cpp" << QStringList{"*.cpp"}; ++ ++ // must handle an unescaped slash https://bugs.kde.org/show_bug.cgi?id=463309 ++ QTest::addRow("slash") << "*.c *.cpp|C/C++ Files" << QStringList{"C/C++ Files"}; ++ ++ QString k3bFilter = ++ "*|All Files\naudio/x-mp3 audio/x-wav application/x-ogg |Sound Files\naudio/x-wav |Wave Sound Files\naudio/x-mp3 |MP3 Sound Files\napplication/x-ogg " ++ "|Ogg Vorbis Sound Files\nvideo/mpeg |MPEG Video Files"; ++ QTest::addRow("k3b") << k3bFilter ++ << QStringList{"All Files", "Sound Files", "Wave Sound Files", "MP3 Sound Files", "Ogg Vorbis Sound Files", "MPEG Video Files"}; + } + + void KFileFilterComboTest::testDefaultFilter() +@@ -177,6 +186,17 @@ void KFileFilterComboTest::testFilters_data() + QTest::addRow("mutiple_extension_multiple_filter") + << "*.cpp *.cc *.C|C++ Source Files\n*.h *.H|Header files" << QStringList{"*.cpp *.cc *.C|C++ Source Files", "*.h *.H|Header files"}; + QTest::addRow("pattern_only") << "*.cpp" << QStringList{"*.cpp"}; ++ ++ QString k3bFilter = ++ "*|All Files\naudio/x-mp3 audio/x-wav application/x-ogg |Sound Files\naudio/x-wav |Wave Sound Files\naudio/x-mp3 |MP3 Sound Files\napplication/x-ogg " ++ "|Ogg Vorbis Sound Files\nvideo/mpeg |MPEG Video Files"; ++ QTest::addRow("k3b") << k3bFilter ++ << QStringList{"*|All Files", ++ "audio/x-mp3 audio/x-wav application/x-ogg |Sound Files", ++ "audio/x-wav |Wave Sound Files", ++ "audio/x-mp3 |MP3 Sound Files", ++ "application/x-ogg |Ogg Vorbis Sound Files", ++ "video/mpeg |MPEG Video Files"}; + } + + void KFileFilterComboTest::testFilters() +diff --git a/src/filewidgets/kfilefiltercombo.cpp b/src/filewidgets/kfilefiltercombo.cpp +index 3d93af643..e751f0c25 100644 +--- a/src/filewidgets/kfilefiltercombo.cpp ++++ b/src/filewidgets/kfilefiltercombo.cpp +@@ -41,7 +41,8 @@ public: + QString m_lastFilter; + QString m_defaultFilter = i18nc("Default mime type filter that shows all file types", "*|All Files"); + +- QVector<KFileFilter> m_filters; ++ QVector<KFileFilter> m_fileFilters; ++ QStringList m_filters; + bool m_allTypes; + }; + +@@ -62,22 +63,31 @@ KFileFilterCombo::KFileFilterCombo(QWidget *parent) + + KFileFilterCombo::~KFileFilterCombo() = default; + +-void KFileFilterCombo::setFilter(const QString &filterString) ++void KFileFilterCombo::setFilter(const QString &filter) + { + clear(); + d->m_filters.clear(); ++ d->m_fileFilters.clear(); + d->m_hasAllSupportedFiles = false; + +- const QVector<KFileFilter> filters = KFileFilter::fromFilterString(filterString); +- +- if (!filters.isEmpty()) { +- d->m_filters = filters; ++ if (!filter.isEmpty()) { ++ QString tmp = filter; ++ int index = tmp.indexOf(QLatin1Char('\n')); ++ while (index > 0) { ++ d->m_filters.append(tmp.left(index)); ++ tmp.remove(0, index + 1); ++ index = tmp.indexOf(QLatin1Char('\n')); ++ } ++ d->m_filters.append(tmp); + } else { +- d->m_filters = KFileFilter::fromFilterString(d->m_defaultFilter); ++ d->m_filters.append(d->m_defaultFilter); + } + +- for (const KFileFilter &filter : std::as_const(d->m_filters)) { +- addItem(filter.label()); ++ QStringList::ConstIterator it; ++ QStringList::ConstIterator end(d->m_filters.constEnd()); ++ for (it = d->m_filters.constBegin(); it != end; ++it) { ++ int tab = (*it).indexOf(QLatin1Char('|')); ++ addItem((tab < 0) ? *it : (*it).mid(tab + 1)); + } + + d->m_lastFilter = currentText(); +@@ -88,7 +98,13 @@ QString KFileFilterCombo::currentFilter() const + { + QString f = currentText(); + if (f == itemText(currentIndex())) { // user didn't edit the text +- f = d->m_filters.value(currentIndex()).toFilterString(); ++ ++ if (!d->m_filters.isEmpty()) { ++ f = d->m_filters.value(currentIndex()); ++ } else { ++ f = d->m_fileFilters.value(currentIndex()).toFilterString(); ++ } ++ + if (d->m_isMimeFilter || (currentIndex() == 0 && d->m_hasAllSupportedFiles)) { + return f; // we have a MIME type as filter + } +@@ -109,9 +125,13 @@ bool KFileFilterCombo::showsAllTypes() const + + QStringList KFileFilterCombo::filters() const + { ++ if (!d->m_filters.isEmpty()) { ++ return d->m_filters; ++ } ++ + QStringList result; + +- for (const KFileFilter &filter : std::as_const(d->m_filters)) { ++ for (const KFileFilter &filter : std::as_const(d->m_fileFilters)) { + result << filter.toFilterString(); + } + +@@ -120,18 +140,23 @@ QStringList KFileFilterCombo::filters() const + + void KFileFilterCombo::setCurrentFilter(const QString &filterString) + { +- auto it = std::find_if(d->m_filters.cbegin(), d->m_filters.cend(), [filterString](const KFileFilter &filter) { ++ if (!d->m_filters.isEmpty()) { ++ setCurrentIndex(d->m_filters.indexOf(filterString)); ++ return; ++ } ++ ++ auto it = std::find_if(d->m_fileFilters.cbegin(), d->m_fileFilters.cend(), [filterString](const KFileFilter &filter) { + return filterString == filter.toFilterString(); + }); + +- if (it == d->m_filters.cend()) { ++ if (it == d->m_fileFilters.cend()) { + qCWarning(KIO_KFILEWIDGETS_KFILEFILTERCOMBO) << "Could not find filter" << filterString; + setCurrentIndex(-1); + Q_EMIT filterChanged(); + return; + } + +- setCurrentIndex(std::distance(d->m_filters.cbegin(), it)); ++ setCurrentIndex(std::distance(d->m_fileFilters.cbegin(), it)); + Q_EMIT filterChanged(); + } + +@@ -139,6 +164,7 @@ void KFileFilterCombo::setMimeFilter(const QStringList &types, const QString &de + { + clear(); + d->m_filters.clear(); ++ d->m_fileFilters.clear(); + QString delim = QStringLiteral(", "); + d->m_hasAllSupportedFiles = false; + bool hasAllFilesFilter = false; +@@ -181,7 +207,7 @@ void KFileFilterCombo::setMimeFilter(const QStringList &types, const QString &de + filter = KFileFilter::fromMimeType(*it); + } + +- d->m_filters.append(filter); ++ d->m_fileFilters.append(filter); + addItem(filter.label()); + + if (type.name() == defaultType) { +@@ -195,7 +221,7 @@ void KFileFilterCombo::setMimeFilter(const QStringList &types, const QString &de + + if (d->m_allTypes) { + QStringList allTypes; +- for (const KFileFilter &filter : std::as_const(d->m_filters)) { ++ for (const KFileFilter &filter : std::as_const(d->m_fileFilters)) { + allTypes << filter.mimePatterns().join(QLatin1Char(' ')); + } + +@@ -203,7 +229,7 @@ void KFileFilterCombo::setMimeFilter(const QStringList &types, const QString &de + + if (count() <= 3) { // show the MIME type comments of at max 3 types + QStringList allComments; +- for (const KFileFilter &filter : std::as_const(d->m_filters)) { ++ for (const KFileFilter &filter : std::as_const(d->m_fileFilters)) { + allComments << filter.label(); + } + +@@ -214,13 +240,13 @@ void KFileFilterCombo::setMimeFilter(const QStringList &types, const QString &de + } + + insertItem(0, allSupportedFilesFilter.label()); +- d->m_filters.prepend(allSupportedFilesFilter); ++ d->m_fileFilters.prepend(allSupportedFilesFilter); + setCurrentIndex(0); + } + + if (hasAllFilesFilter) { + addItem(i18n("All Files")); +- d->m_filters.append(KFileFilter(i18n("All Files"), {}, {QStringLiteral("application/octet-stream")})); ++ d->m_fileFilters.append(KFileFilter(i18n("All Files"), {}, {QStringLiteral("application/octet-stream")})); + } + + d->m_lastFilter = currentText(); +-- +GitLab + |