[neon/qt6/qt6-base/Neon/release] debian/patches: drop upstreamed patch

Carlos De Maine null at kde.org
Fri Feb 16 07:25:11 GMT 2024


Git commit c3ecacb9f959bc4bde467c8a69da1a412dd4320f by Carlos De Maine.
Committed on 16/02/2024 at 07:24.
Pushed by carlosdem into branch 'Neon/release'.

drop upstreamed patch

D  +0    -1156 debian/patches/qmimedatabase_collect_glob_patterns_from_all_locations
M  +0    -3    debian/patches/series

https://invent.kde.org/neon/qt6/qt6-base/-/commit/c3ecacb9f959bc4bde467c8a69da1a412dd4320f

diff --git a/debian/patches/qmimedatabase_collect_glob_patterns_from_all_locations b/debian/patches/qmimedatabase_collect_glob_patterns_from_all_locations
deleted file mode 100644
index 76fa285..0000000
--- a/debian/patches/qmimedatabase_collect_glob_patterns_from_all_locations
+++ /dev/null
@@ -1,1156 +0,0 @@
-From 705118a554083161b6fe54aaf37a04ddca844f48 Mon Sep 17 00:00:00 2001
-From: David Faure <david.faure at kdab.com>
-Date: Thu, 7 Dec 2023 11:38:38 +0100
-Subject: [PATCH] QMimeDatabase: collect glob patterns from all locations
-
-A QMimeTypePrivate used to belong to a single provider, which would
-provide the complete data for it.
-But since the redesign in commit 7a5644d6481a3c1a741677, each provider
-represents is a single mime directory, and the merging happens at the
-QMimeDatabase level. So we need a QMimeType[Private] to be just a name
-(a "request" for information about this mimetype) and the information
-for that mimetype is retrieved on demand by querying the providers
-and either stopping at the first one (e.g. for icons) or merging
-the data from all of them (e.g. for glob patterns).
-
-The XML provider was using QMimeTypePrivate as data storage,
-give it its own struct QMimeTypeXMLData for that purpose instead.
-
-Task-number: QTBUG-116905
-Change-Id: Ia0e0d94aa899720dc0b908f40c25317473005af4
-(cherry picked from commit 4e9944e6c8a456353d243ab268cb0f01ff006faa)
-Reviewed-by: Thiago Macieira <thiago.macieira at intel.com>
----
- src/corelib/mimetypes/qmimedatabase.cpp            |  83 +++++-----
- src/corelib/mimetypes/qmimedatabase_p.h            |   9 +-
- src/corelib/mimetypes/qmimeprovider.cpp            | 168 ++++++++++++---------
- src/corelib/mimetypes/qmimeprovider_p.h            |  56 ++++---
- src/corelib/mimetypes/qmimetype.cpp                |  64 +++-----
- src/corelib/mimetypes/qmimetype_p.h                |  39 +----
- src/corelib/mimetypes/qmimetypeparser.cpp          |  20 ++-
- src/corelib/mimetypes/qmimetypeparser_p.h          |  21 ++-
- .../mimetypes/qmimedatabase/add-extension.xml      |   7 +
- .../qmimedatabase-cache/CMakeLists.txt             |   1 +
- .../qmimedatabase/qmimedatabase-xml/CMakeLists.txt |   1 +
- .../mimetypes/qmimedatabase/tst_qmimedatabase.cpp  |   6 +
- .../corelib/mimetypes/qmimetype/tst_qmimetype.cpp  | 111 ++------------
- 13 files changed, 258 insertions(+), 328 deletions(-)
- create mode 100644 tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml
-
---- a/src/corelib/mimetypes/qmimedatabase.cpp
-+++ b/src/corelib/mimetypes/qmimedatabase.cpp
-@@ -190,9 +190,8 @@
- {
-     const QString mimeName = resolveAlias(nameOrAlias);
-     for (const auto &provider : providers()) {
--        QMimeType mime = provider->mimeTypeForName(mimeName);
--        if (mime.isValid())
--            return mime;
-+        if (provider->knowsMimeType(mimeName))
-+            return QMimeType(QMimeTypePrivate(mimeName));
-     }
-     return {};
- }
-@@ -217,54 +216,54 @@
-     return result;
- }
- 
--void QMimeDatabasePrivate::loadMimeTypePrivate(QMimeTypePrivate &mimePrivate)
-+QMimeTypePrivate::LocaleHash QMimeDatabasePrivate::localeComments(const QString &name)
- {
-     QMutexLocker locker(&mutex);
--    if (mimePrivate.name.isEmpty())
--        return; // invalid mimetype
--    if (!mimePrivate.loaded) { // XML provider sets loaded=true, binary provider does this on demand
--        Q_ASSERT(mimePrivate.fromCache);
--        bool found = false;
--        for (const auto &provider : providers()) {
--            if (provider->loadMimeTypePrivate(mimePrivate)) {
--                found = true;
--                break;
--            }
--        }
--        if (!found) {
--            const QString file = mimePrivate.name + ".xml"_L1;
--            qWarning() << "No file found for" << file << ", even though update-mime-info said it would exist.\n"
--                          "Either it was just removed, or the directory doesn't have executable permission..."
--                       << locateMimeDirectories();
--        }
--        mimePrivate.loaded = true;
-+    for (const auto &provider : providers()) {
-+        auto comments = provider->localeComments(name);
-+        if (!comments.isEmpty())
-+            return comments; // maybe we want to merge in comments from more global providers, in
-+                             // case of more translations?
-     }
-+    return {};
- }
- 
--void QMimeDatabasePrivate::loadGenericIcon(QMimeTypePrivate &mimePrivate)
-+QStringList QMimeDatabasePrivate::globPatterns(const QString &name)
- {
-     QMutexLocker locker(&mutex);
--    if (mimePrivate.fromCache) {
--        mimePrivate.genericIconName.clear();
--        for (const auto &provider : providers()) {
--            provider->loadGenericIcon(mimePrivate);
--            if (!mimePrivate.genericIconName.isEmpty())
--                break;
--        }
-+    QStringList patterns;
-+    const auto &providerList = providers();
-+    // reverse iteration because we start from most global, add up, clear if delete-all, and add up
-+    // again.
-+    for (auto rit = providerList.rbegin(); rit != providerList.rend(); ++rit) {
-+        auto *provider = rit->get();
-+        if (provider->hasGlobDeleteAll(name))
-+            patterns.clear();
-+        patterns += provider->globPatterns(name);
-     }
-+    return patterns;
- }
- 
--void QMimeDatabasePrivate::loadIcon(QMimeTypePrivate &mimePrivate)
-+QString QMimeDatabasePrivate::genericIcon(const QString &name)
- {
-     QMutexLocker locker(&mutex);
--    if (mimePrivate.fromCache) {
--        mimePrivate.iconName.clear();
--        for (const auto &provider : providers()) {
--            provider->loadIcon(mimePrivate);
--            if (!mimePrivate.iconName.isEmpty())
--                break;
--        }
-+    for (const auto &provider : providers()) {
-+        QString genericIconName = provider->genericIcon(name);
-+        if (!genericIconName.isEmpty())
-+            return genericIconName;
-     }
-+    return {};
-+}
-+
-+QString QMimeDatabasePrivate::icon(const QString &name)
-+{
-+    QMutexLocker locker(&mutex);
-+    for (const auto &provider : providers()) {
-+        QString iconName = provider->icon(name);
-+        if (!iconName.isEmpty())
-+            return iconName;
-+    }
-+    return {};
- }
- 
- QString QMimeDatabasePrivate::fallbackParent(const QString &mimeTypeName) const
-@@ -345,12 +344,12 @@
-     }
- 
-     *accuracyPtr = 0;
--    QMimeType candidate;
-+    QString candidate;
-     for (const auto &provider : providers())
--        provider->findByMagic(data, accuracyPtr, candidate);
-+        provider->findByMagic(data, accuracyPtr, &candidate);
- 
--    if (candidate.isValid())
--        return candidate;
-+    if (!candidate.isEmpty())
-+        return QMimeType(QMimeTypePrivate(candidate));
- 
-     if (isTextFile(data)) {
-         *accuracyPtr = 5;
---- a/src/corelib/mimetypes/qmimedatabase_p.h
-+++ b/src/corelib/mimetypes/qmimedatabase_p.h
-@@ -66,9 +66,10 @@
-     QMimeGlobMatchResult findByFileName(const QString &fileName);
- 
-     // API for QMimeType. Takes care of locking the mutex.
--    void loadMimeTypePrivate(QMimeTypePrivate &mimePrivate);
--    void loadGenericIcon(QMimeTypePrivate &mimePrivate);
--    void loadIcon(QMimeTypePrivate &mimePrivate);
-+    QMimeTypePrivate::LocaleHash localeComments(const QString &name);
-+    QStringList globPatterns(const QString &name);
-+    QString genericIcon(const QString &name);
-+    QString icon(const QString &name);
-     QStringList mimeParents(const QString &mimeName);
-     QStringList listAliases(const QString &mimeName);
-     bool mimeInherits(const QString &mime, const QString &parent);
-@@ -81,7 +82,7 @@
-     QString fallbackParent(const QString &mimeTypeName) const;
- 
-     const QString m_defaultMimeType;
--    mutable Providers m_providers;
-+    mutable Providers m_providers; // most local first, most global last
-     QElapsedTimer m_lastCheck;
- 
- public:
---- a/src/corelib/mimetypes/qmimeprovider.cpp
-+++ b/src/corelib/mimetypes/qmimeprovider.cpp
-@@ -186,25 +186,11 @@
-         m_cacheFile.reset();
- }
- 
--static QMimeType mimeTypeForNameUnchecked(const QString &name)
--{
--    QMimeTypePrivate data;
--    data.name = name;
--    data.fromCache = true;
--    // The rest is retrieved on demand.
--    // comment and globPatterns: in loadMimeTypePrivate
--    // iconName: in loadIcon
--    // genericIconName: in loadGenericIcon
--    return QMimeType(data);
--}
--
--QMimeType QMimeBinaryProvider::mimeTypeForName(const QString &name)
-+bool QMimeBinaryProvider::knowsMimeType(const QString &name)
- {
-     if (!m_mimetypeListLoaded)
-         loadMimeTypeList();
--    if (!m_mimetypeNames.contains(name))
--        return QMimeType(); // unknown mimetype
--    return mimeTypeForNameUnchecked(name);
-+    return m_mimetypeNames.contains(name);
- }
- 
- void QMimeBinaryProvider::addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result)
-@@ -354,7 +340,7 @@
-     return false;
- }
- 
--void QMimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate)
-+void QMimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr, QString *candidate)
- {
-     const int magicListOffset = m_cacheFile->getUint32(PosMagicListOffset);
-     const int numMatches = m_cacheFile->getUint32(magicListOffset);
-@@ -371,7 +357,7 @@
-             *accuracyPtr = m_cacheFile->getUint32(off);
-             // Return the first match. We have no rules for conflicting magic data...
-             // (mime.cache itself is sorted, but what about local overrides with a lower prio?)
--            candidate = mimeTypeForNameUnchecked(QLatin1StringView(mimeType));
-+            *candidate = QString::fromLatin1(mimeType);
-             return;
-         }
-     }
-@@ -479,35 +465,63 @@
-     if (result.isEmpty()) {
-         result.reserve(m_mimetypeNames.size());
-         for (const QString &name : std::as_const(m_mimetypeNames))
--            result.append(mimeTypeForNameUnchecked(name));
-+            result.append(QMimeType(QMimeTypePrivate(name)));
-     } else {
-         for (const QString &name : std::as_const(m_mimetypeNames))
-             if (std::find_if(result.constBegin(), result.constEnd(), [name](const QMimeType &mime) -> bool { return mime.name() == name; })
-                     == result.constEnd())
--                result.append(mimeTypeForNameUnchecked(name));
-+                result.append(QMimeType(QMimeTypePrivate(name)));
-     }
- }
- 
--bool QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data)
-+QMimeTypePrivate::LocaleHash QMimeBinaryProvider::localeComments(const QString &name)
- {
--#if QT_CONFIG(xmlstreamreader)
--    if (data.loaded)
--        return true;
-+    MimeTypeExtraMap::const_iterator it = loadMimeTypeExtra(name);
-+    if (it != m_mimetypeExtra.constEnd()) {
-+        const MimeTypeExtra &e = it.value();
-+        return e.localeComments;
-+    }
-+    return {};
-+}
-+
-+bool QMimeBinaryProvider::hasGlobDeleteAll(const QString &name)
-+{
-+    MimeTypeExtraMap::const_iterator it = loadMimeTypeExtra(name);
-+    if (it != m_mimetypeExtra.constEnd()) {
-+        const MimeTypeExtra &e = it.value();
-+        return e.hasGlobDeleteAll;
-+    }
-+    return {};
-+}
- 
--    auto it = m_mimetypeExtra.constFind(data.name);
-+QStringList QMimeBinaryProvider::globPatterns(const QString &name)
-+{
-+    MimeTypeExtraMap::const_iterator it = loadMimeTypeExtra(name);
-+    if (it != m_mimetypeExtra.constEnd()) {
-+        const MimeTypeExtra &e = it.value();
-+        return e.globPatterns;
-+    }
-+    return {};
-+}
-+
-+QMimeBinaryProvider::MimeTypeExtraMap::const_iterator
-+QMimeBinaryProvider::loadMimeTypeExtra(const QString &mimeName)
-+{
-+#if QT_CONFIG(xmlstreamreader)
-+    auto it = m_mimetypeExtra.constFind(mimeName);
-     if (it == m_mimetypeExtra.constEnd()) {
-         // load comment and globPatterns
- 
-         // shared-mime-info since 1.3 lowercases the xml files
--        QString mimeFile = m_directory + u'/' + data.name.toLower() + ".xml"_L1;
-+        QString mimeFile = m_directory + u'/' + mimeName.toLower() + ".xml"_L1;
-         if (!QFile::exists(mimeFile))
--            mimeFile = m_directory + u'/' + data.name + ".xml"_L1; // pre-1.3
-+            mimeFile = m_directory + u'/' + mimeName + ".xml"_L1; // pre-1.3
- 
-         QFile qfile(mimeFile);
-         if (!qfile.open(QFile::ReadOnly))
--            return false;
-+            return m_mimetypeExtra.constEnd();
- 
--        auto insertIt = m_mimetypeExtra.insert(data.name, MimeTypeExtra{});
-+        auto insertIt = m_mimetypeExtra.insert(mimeName, MimeTypeExtra{});
-         it = insertIt;
-         MimeTypeExtra &extra = insertIt.value();
-         QString mainPattern;
-@@ -515,13 +529,13 @@
-         QXmlStreamReader xml(&qfile);
-         if (xml.readNextStartElement()) {
-             if (xml.name() != "mime-type"_L1) {
--                return false;
-+                return m_mimetypeExtra.constEnd();
-             }
-             const auto name = xml.attributes().value("type"_L1);
-             if (name.isEmpty())
--                return false;
--            if (name.compare(data.name, Qt::CaseInsensitive))
--                qWarning() << "Got name" << name << "in file" << mimeFile << "expected" << data.name;
-+                return m_mimetypeExtra.constEnd();
-+            if (name.compare(mimeName, Qt::CaseInsensitive))
-+                qWarning() << "Got name" << name << "in file" << mimeFile << "expected" << mimeName;
- 
-             while (xml.readNextStartElement()) {
-                 const auto tag = xml.name();
-@@ -534,8 +548,7 @@
-                     extra.localeComments.insert(lang, text);
-                     continue; // we called readElementText, so we're at the EndElement already.
-                 } else if (tag == "glob-deleteall"_L1) { // as written out by shared-mime-info >= 0.70
--                    extra.globPatterns.clear();
--                    mainPattern.clear();
-+                    extra.hasGlobDeleteAll = true;
-                 } else if (tag == "glob"_L1) { // as written out by shared-mime-info >= 0.70
-                     const QString pattern = xml.attributes().value("pattern"_L1).toString();
-                     if (mainPattern.isEmpty() && pattern.startsWith(u'*')) {
-@@ -557,14 +570,11 @@
-             extra.globPatterns.prepend(mainPattern);
-         }
-     }
--    const MimeTypeExtra &e = it.value();
--    data.localeComments = e.localeComments;
--    data.globPatterns = e.globPatterns;
--    return true;
-+    return it;
- #else
--    Q_UNUSED(data);
-+    Q_UNUSED(mimeName);
-     qWarning("Cannot load mime type since QXmlStreamReader is not available.");
--    return false;
-+    return m_mimetypeExtra.constEnd();
- #endif // feature xmlstreamreader
- }
- 
-@@ -594,22 +604,16 @@
-     return QLatin1StringView();
- }
- 
--void QMimeBinaryProvider::loadIcon(QMimeTypePrivate &data)
-+QString QMimeBinaryProvider::icon(const QString &name)
- {
--    const QByteArray inputMime = data.name.toLatin1();
--    const QLatin1StringView icon = iconForMime(m_cacheFile.get(), PosIconsListOffset, inputMime);
--    if (!icon.isEmpty()) {
--        data.iconName = icon;
--    }
-+    const QByteArray inputMime = name.toLatin1();
-+    return iconForMime(m_cacheFile.get(), PosIconsListOffset, inputMime);
- }
- 
--void QMimeBinaryProvider::loadGenericIcon(QMimeTypePrivate &data)
-+QString QMimeBinaryProvider::genericIcon(const QString &name)
- {
--    const QByteArray inputMime = data.name.toLatin1();
--    const QLatin1StringView icon = iconForMime(m_cacheFile.get(), PosGenericIconsListOffset, inputMime);
--    if (!icon.isEmpty()) {
--        data.genericIconName = icon;
--    }
-+    const QByteArray inputMime = name.toLatin1();
-+    return iconForMime(m_cacheFile.get(), PosGenericIconsListOffset, inputMime);
- }
- 
- ////
-@@ -694,9 +698,9 @@
- #endif
- }
- 
--QMimeType QMimeXMLProvider::mimeTypeForName(const QString &name)
-+bool QMimeXMLProvider::knowsMimeType(const QString &name)
- {
--    return m_nameMimeTypeMap.value(name);
-+    return m_nameMimeTypeMap.contains(name);
- }
- 
- void QMimeXMLProvider::addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result)
-@@ -704,22 +708,17 @@
-     m_mimeTypeGlobs.matchingGlobs(fileName, result);
- }
- 
--void QMimeXMLProvider::findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate)
-+void QMimeXMLProvider::findByMagic(const QByteArray &data, int *accuracyPtr, QString *candidate)
- {
--    QString candidateName;
--    bool foundOne = false;
-     for (const QMimeMagicRuleMatcher &matcher : std::as_const(m_magicMatchers)) {
-         if (matcher.matches(data)) {
-             const int priority = matcher.priority();
-             if (priority > *accuracyPtr) {
-                 *accuracyPtr = priority;
--                candidateName = matcher.mimetype();
--                foundOne = true;
-+                *candidate = matcher.mimetype();
-             }
-         }
-     }
--    if (foundOne)
--        candidate = mimeTypeForName(candidateName);
- }
- 
- void QMimeXMLProvider::ensureLoaded()
-@@ -749,6 +748,31 @@
-         load(file);
- }
- 
-+QMimeTypePrivate::LocaleHash QMimeXMLProvider::localeComments(const QString &name)
-+{
-+    return m_nameMimeTypeMap.value(name).localeComments;
-+}
-+
-+bool QMimeXMLProvider::hasGlobDeleteAll(const QString &name)
-+{
-+    return m_nameMimeTypeMap.value(name).hasGlobDeleteAll;
-+}
-+
-+QStringList QMimeXMLProvider::globPatterns(const QString &name)
-+{
-+    return m_nameMimeTypeMap.value(name).globPatterns;
-+}
-+
-+QString QMimeXMLProvider::icon(const QString &name)
-+{
-+    return m_nameMimeTypeMap.value(name).iconName;
-+}
-+
-+QString QMimeXMLProvider::genericIcon(const QString &name)
-+{
-+    return m_nameMimeTypeMap.value(name).genericIconName;
-+}
-+
- void QMimeXMLProvider::load(const QString &fileName)
- {
-     QString errorMessage;
-@@ -790,14 +814,11 @@
-     m_mimeTypeGlobs.addGlob(glob);
- }
- 
--void QMimeXMLProvider::addMimeType(const QMimeType &mt)
-+void QMimeXMLProvider::addMimeType(const QMimeTypeXMLData &mt)
- {
--    Q_ASSERT(!mt.d.data()->fromCache);
--
--    QString name = mt.name();
--    if (mt.d->hasGlobDeleteAll)
--        appendIfNew(m_mimeTypesWithDeletedGlobs, name);
--    m_nameMimeTypeMap.insert(mt.name(), mt);
-+    if (mt.hasGlobDeleteAll)
-+        appendIfNew(m_mimeTypesWithDeletedGlobs, mt.name);
-+    m_nameMimeTypeMap.insert(mt.name, mt);
- }
- 
- /*
-@@ -813,7 +834,7 @@
-     for (const auto &mt : toExclude) {
-         auto it = m_nameMimeTypeMap.find(mt);
-         if (it != m_nameMimeTypeMap.end())
--            it->d->globPatterns.clear();
-+            it->globPatterns.clear();
-         m_mimeTypeGlobs.removeMimeType(mt);
-     }
- }
-@@ -853,13 +874,16 @@
- void QMimeXMLProvider::addAllMimeTypes(QList<QMimeType> &result)
- {
-     if (result.isEmpty()) { // fast path
--        result = m_nameMimeTypeMap.values();
-+        for (auto it = m_nameMimeTypeMap.constBegin(), end = m_nameMimeTypeMap.constEnd();
-+             it != end; ++it) {
-+            result.append(QMimeType(QMimeTypePrivate(it.value().name)));
-+        }
-     } else {
-         for (auto it = m_nameMimeTypeMap.constBegin(), end = m_nameMimeTypeMap.constEnd() ; it != end ; ++it) {
-             const QString newMime = it.key();
-             if (std::find_if(result.constBegin(), result.constEnd(), [newMime](const QMimeType &mime) -> bool { return mime.name() == newMime; })
-                     == result.constEnd())
--                result.append(it.value());
-+                result.append(QMimeType(QMimeTypePrivate(it.value().name)));
-         }
-     }
- }
---- a/src/corelib/mimetypes/qmimeprovider_p.h
-+++ b/src/corelib/mimetypes/qmimeprovider_p.h
-@@ -28,6 +28,7 @@
- QT_BEGIN_NAMESPACE
- 
- class QMimeMagicRuleMatcher;
-+class QMimeTypeXMLData;
- 
- class QMimeProviderBase
- {
-@@ -39,18 +40,20 @@
- 
-     virtual bool isValid() = 0;
-     virtual bool isInternalDatabase() const = 0;
--    virtual QMimeType mimeTypeForName(const QString &name) = 0;
-+    virtual bool knowsMimeType(const QString &name) = 0;
-     virtual void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) = 0;
-     virtual void addParents(const QString &mime, QStringList &result) = 0;
-     virtual QString resolveAlias(const QString &name) = 0;
-     virtual void addAliases(const QString &name, QStringList &result) = 0;
--    virtual void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) = 0;
-+    virtual void findByMagic(const QByteArray &data, int *accuracyPtr, QString *candidate) = 0;
-     virtual void addAllMimeTypes(QList<QMimeType> &result) = 0;
--    virtual bool loadMimeTypePrivate(QMimeTypePrivate &) { return false; }
--    virtual void loadIcon(QMimeTypePrivate &) {}
--    virtual void loadGenericIcon(QMimeTypePrivate &) {}
--    virtual void ensureLoaded() {}
--    virtual void excludeMimeTypeGlobs(const QStringList &) {}
-+    virtual QMimeTypePrivate::LocaleHash localeComments(const QString &name) = 0;
-+    virtual bool hasGlobDeleteAll(const QString &name) = 0;
-+    virtual QStringList globPatterns(const QString &name) = 0;
-+    virtual QString icon(const QString &name) = 0;
-+    virtual QString genericIcon(const QString &name) = 0;
-+    virtual void ensureLoaded() { }
-+    virtual void excludeMimeTypeGlobs(const QStringList &) { }
- 
-     QString directory() const { return m_directory; }
- 
-@@ -60,9 +63,9 @@
-     /*
-         MimeTypes with "glob-deleteall" tags are handled differently by each provider
-         sub-class:
--        - QMimeBinaryProvider parses glob-deleteall tags lazily, i.e. only when loadMimeTypePrivate()
-+        - QMimeBinaryProvider parses glob-deleteall tags lazily, i.e. only when hasGlobDeleteAll()
-           is called, and clears the glob patterns associated with mimetypes that have this tag
--        - QMimeXMLProvider parses glob-deleteall from the the start, i.e. when a XML file is
-+        - QMimeXMLProvider parses glob-deleteall from the start, i.e. when a XML file is
-           parsed with QMimeTypeParser
- 
-         The two lists below are used to let both provider types (XML and Binary) communicate
-@@ -95,16 +98,18 @@
- 
-     bool isValid() override;
-     bool isInternalDatabase() const override;
--    QMimeType mimeTypeForName(const QString &name) override;
-+    bool knowsMimeType(const QString &name) override;
-     void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override;
-     void addParents(const QString &mime, QStringList &result) override;
-     QString resolveAlias(const QString &name) override;
-     void addAliases(const QString &name, QStringList &result) override;
--    void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) override;
-+    void findByMagic(const QByteArray &data, int *accuracyPtr, QString *candidate) override;
-     void addAllMimeTypes(QList<QMimeType> &result) override;
--    bool loadMimeTypePrivate(QMimeTypePrivate &) override;
--    void loadIcon(QMimeTypePrivate &) override;
--    void loadGenericIcon(QMimeTypePrivate &) override;
-+    QMimeTypePrivate::LocaleHash localeComments(const QString &name) override;
-+    bool hasGlobDeleteAll(const QString &name) override;
-+    QStringList globPatterns(const QString &name) override;
-+    QString icon(const QString &name) override;
-+    QString genericIcon(const QString &name) override;
-     void ensureLoaded() override;
-     void excludeMimeTypeGlobs(const QStringList &toExclude) override;
- 
-@@ -116,8 +121,9 @@
-     bool matchSuffixTree(QMimeGlobMatchResult &result, CacheFile *cacheFile, int numEntries,
-                          int firstOffset, const QString &fileName, qsizetype charPos,
-                          bool caseSensitiveCheck);
--    bool matchMagicRule(CacheFile *cacheFile, int numMatchlets, int firstOffset, const QByteArray &data);
-     bool isMimeTypeGlobsExcluded(const char *name);
-+    bool matchMagicRule(CacheFile *cacheFile, int numMatchlets, int firstOffset,
-+                        const QByteArray &data);
-     QLatin1StringView iconForMime(CacheFile *cacheFile, int posListOffset, const QByteArray &inputMime);
-     void loadMimeTypeList();
-     bool checkCacheChanged();
-@@ -128,11 +134,14 @@
-     bool m_mimetypeListLoaded;
-     struct MimeTypeExtra
-     {
--        // Both retrieved on demand in loadMimeTypePrivate
-         QHash<QString, QString> localeComments;
-         QStringList globPatterns;
-+        bool hasGlobDeleteAll = false;
-     };
--    QMap<QString, MimeTypeExtra> m_mimetypeExtra;
-+    using MimeTypeExtraMap = QMap<QString, MimeTypeExtra>;
-+    MimeTypeExtraMap m_mimetypeExtra;
-+
-+    MimeTypeExtraMap::const_iterator loadMimeTypeExtra(const QString &mimeName);
- };
- 
- /*
-@@ -153,19 +162,24 @@
- 
-     bool isValid() override;
-     bool isInternalDatabase() const override;
--    QMimeType mimeTypeForName(const QString &name) override;
-+    bool knowsMimeType(const QString &name) override;
-     void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override;
-     void addParents(const QString &mime, QStringList &result) override;
-     QString resolveAlias(const QString &name) override;
-     void addAliases(const QString &name, QStringList &result) override;
--    void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) override;
-+    void findByMagic(const QByteArray &data, int *accuracyPtr, QString *candidate) override;
-     void addAllMimeTypes(QList<QMimeType> &result) override;
-     void ensureLoaded() override;
-+    QMimeTypePrivate::LocaleHash localeComments(const QString &name) override;
-+    bool hasGlobDeleteAll(const QString &name) override;
-+    QStringList globPatterns(const QString &name) override;
-+    QString icon(const QString &name) override;
-+    QString genericIcon(const QString &name) override;
- 
-     bool load(const QString &fileName, QString *errorMessage);
- 
-     // Called by the mimetype xml parser
--    void addMimeType(const QMimeType &mt);
-+    void addMimeType(const QMimeTypeXMLData &mt);
-     void excludeMimeTypeGlobs(const QStringList &toExclude) override;
-     void addGlobPattern(const QMimeGlobPattern &glob);
-     void addParent(const QString &child, const QString &parent);
-@@ -176,7 +190,7 @@
-     void load(const QString &fileName);
-     void load(const char *data, qsizetype len);
- 
--    typedef QHash<QString, QMimeType> NameMimeTypeMap;
-+    typedef QHash<QString, QMimeTypeXMLData> NameMimeTypeMap;
-     NameMimeTypeMap m_nameMimeTypeMap;
- 
-     typedef QHash<QString, QString> AliasHash;
---- a/src/corelib/mimetypes/qmimetype.cpp
-+++ b/src/corelib/mimetypes/qmimetype.cpp
-@@ -6,9 +6,6 @@
- 
- #include "qmimetype_p.h"
- #include "qmimedatabase_p.h"
--#include "qmimeprovider_p.h"
--
--#include "qmimeglobpattern_p.h"
- 
- #include <QtCore/QDebug>
- #include <QtCore/QLocale>
-@@ -20,33 +17,6 @@
- 
- using namespace Qt::StringLiterals;
- 
--QMimeTypePrivate::QMimeTypePrivate()
--    : loaded(false), fromCache(false)
--{}
--
--QMimeTypePrivate::QMimeTypePrivate(const QMimeType &other)
--      : loaded(other.d->loaded),
--        name(other.d->name),
--        localeComments(other.d->localeComments),
--        genericIconName(other.d->genericIconName),
--        iconName(other.d->iconName),
--        globPatterns(other.d->globPatterns)
--{}
--
--void QMimeTypePrivate::clear()
--{
--    name.clear();
--    localeComments.clear();
--    genericIconName.clear();
--    iconName.clear();
--    globPatterns.clear();
--}
--
--void QMimeTypePrivate::addGlobPattern(const QString &pattern)
--{
--    globPatterns.append(pattern);
--}
--
- /*!
-     \class QMimeType
-     \inmodule QtCore
-@@ -219,7 +189,7 @@
-  */
- QString QMimeType::comment() const
- {
--    QMimeDatabasePrivate::instance()->loadMimeTypePrivate(const_cast<QMimeTypePrivate&>(*d));
-+    const auto localeComments = QMimeDatabasePrivate::instance()->localeComments(d->name);
- 
-     QStringList languageList = QLocale().uiLanguages();
-     qsizetype defaultIndex = languageList.indexOf(u"en-US"_s);
-@@ -244,13 +214,13 @@
-             // uiLanguages() uses '-' as separator, MIME database uses '_'
-         const QString lang
-             = language == "C"_L1 ? u"en_US"_s : QString(language).replace(u'-', u'_');
--        QString comm = d->localeComments.value(lang);
-+        QString comm = localeComments.value(lang);
-         if (!comm.isEmpty())
-             return comm;
-         const qsizetype cut = lang.indexOf(u'_');
-         // If "de_CH" is missing, check for "de" (and similar):
-         if (cut != -1) {
--            comm = d->localeComments.value(lang.left(cut));
-+            comm = localeComments.value(lang.left(cut));
-             if (!comm.isEmpty())
-                 return comm;
-         }
-@@ -276,8 +246,8 @@
-  */
- QString QMimeType::genericIconName() const
- {
--    QMimeDatabasePrivate::instance()->loadGenericIcon(const_cast<QMimeTypePrivate&>(*d));
--    if (d->genericIconName.isEmpty()) {
-+    QString genericIconName = QMimeDatabasePrivate::instance()->genericIcon(d->name);
-+    if (genericIconName.isEmpty()) {
-         // From the spec:
-         // If the generic icon name is empty (not specified by the mimetype definition)
-         // then the mimetype is used to generate the generic icon by using the top-level
-@@ -290,7 +260,7 @@
-             groupRef = groupRef.left(slashindex);
-         return groupRef + "-x-generic"_L1;
-     }
--    return d->genericIconName;
-+    return genericIconName;
- }
- 
- static QString make_default_icon_name_from_mimetype_name(QString iconName)
-@@ -312,11 +282,11 @@
-  */
- QString QMimeType::iconName() const
- {
--    QMimeDatabasePrivate::instance()->loadIcon(const_cast<QMimeTypePrivate&>(*d));
--    if (d->iconName.isEmpty()) {
-+    QString iconName = QMimeDatabasePrivate::instance()->icon(d->name);
-+    if (iconName.isEmpty()) {
-         return make_default_icon_name_from_mimetype_name(name());
-     }
--    return d->iconName;
-+    return iconName;
- }
- 
- /*!
-@@ -328,8 +298,7 @@
-  */
- QStringList QMimeType::globPatterns() const
- {
--    QMimeDatabasePrivate::instance()->loadMimeTypePrivate(const_cast<QMimeTypePrivate&>(*d));
--    return d->globPatterns;
-+    return QMimeDatabasePrivate::instance()->globPatterns(d->name);
- }
- 
- /*!
-@@ -423,10 +392,11 @@
-  */
- QStringList QMimeType::suffixes() const
- {
--    QMimeDatabasePrivate::instance()->loadMimeTypePrivate(const_cast<QMimeTypePrivate&>(*d));
-+    const QStringList patterns = globPatterns();
- 
-     QStringList result;
--    for (const QString &pattern : std::as_const(d->globPatterns)) {
-+    result.reserve(patterns.size());
-+    for (const QString &pattern : patterns) {
-         // Not a simple suffix if it looks like: README or *. or *.* or *.JP*G or *.JP?
-         if (pattern.startsWith("*."_L1) &&
-             pattern.size() > 2 &&
-@@ -466,15 +436,15 @@
- */
- QString QMimeType::filterString() const
- {
--    QMimeDatabasePrivate::instance()->loadMimeTypePrivate(const_cast<QMimeTypePrivate&>(*d));
-+    const QStringList patterns = globPatterns();
-     QString filter;
- 
--    if (!d->globPatterns.empty()) {
-+    if (!patterns.empty()) {
-         filter += comment() + " ("_L1;
--        for (int i = 0; i < d->globPatterns.size(); ++i) {
-+        for (int i = 0; i < patterns.size(); ++i) {
-             if (i != 0)
-                 filter += u' ';
--            filter += d->globPatterns.at(i);
-+            filter += patterns.at(i);
-         }
-         filter +=  u')';
-     }
---- a/src/corelib/mimetypes/qmimetype_p.h
-+++ b/src/corelib/mimetypes/qmimetype_p.h
-@@ -16,13 +16,14 @@
- //
- 
- #include <QtCore/private/qglobal_p.h>
--#include "qmimetype.h"
-+#include <QtCore/qshareddata.h>
- 
- QT_REQUIRE_CONFIG(mimetype);
- 
- #include <QtCore/qhash.h>
- #include <QtCore/qstringlist.h>
- 
-+class QMimeBinaryProvider;
- QT_BEGIN_NAMESPACE
- 
- class Q_AUTOTEST_EXPORT QMimeTypePrivate : public QSharedData
-@@ -30,42 +31,12 @@
- public:
-     typedef QHash<QString, QString> LocaleHash;
- 
--    QMimeTypePrivate();
--    explicit QMimeTypePrivate(const QMimeType &other);
-+    QMimeTypePrivate() { }
-+    explicit QMimeTypePrivate(const QString &name) : name(name) { }
- 
--    void clear();
--
--    void addGlobPattern(const QString &pattern);
--
--    bool loaded; // QSharedData leaves a 4 byte gap, so don't put 8 byte members first
--    bool fromCache; // true if this comes from the binary provider
--    bool hasGlobDeleteAll = false; // true if the mimetype has a glob-deleteall tag
-     QString name;
--    LocaleHash localeComments;
--    QString genericIconName;
--    QString iconName;
--    QStringList globPatterns;
- };
- 
- QT_END_NAMESPACE
- 
--#define QMIMETYPE_BUILDER_FROM_RVALUE_REFS \
--    QT_BEGIN_NAMESPACE \
--    static QMimeType buildQMimeType ( \
--                         QString &&name, \
--                         QString &&genericIconName, \
--                         QString &&iconName, \
--                         QStringList &&globPatterns \
--                     ) \
--    { \
--        QMimeTypePrivate qMimeTypeData; \
--        qMimeTypeData.loaded = true; \
--        qMimeTypeData.name = std::move(name); \
--        qMimeTypeData.genericIconName = std::move(genericIconName); \
--        qMimeTypeData.iconName = std::move(iconName); \
--        qMimeTypeData.globPatterns = std::move(globPatterns); \
--        return QMimeType(qMimeTypeData); \
--    } \
--    QT_END_NAMESPACE
--
--#endif   // QMIMETYPE_P_H
-+#endif // QMIMETYPE_P_H
---- a/src/corelib/mimetypes/qmimetypeparser.cpp
-+++ b/src/corelib/mimetypes/qmimetypeparser.cpp
-@@ -165,8 +165,7 @@
- bool QMimeTypeParserBase::parse(QIODevice *dev, const QString &fileName, QString *errorMessage)
- {
- #if QT_CONFIG(xmlstreamreader)
--    QMimeTypePrivate data;
--    data.loaded = true;
-+    QMimeTypeXMLData data;
-     int priority = 50;
-     QStack<QMimeMagicRule *> currentRules; // stack for the nesting of rules
-     QList<QMimeMagicRule> rules; // toplevel rules
-@@ -273,7 +272,7 @@
-         {
-             const auto elementName = reader.name();
-             if (elementName == QLatin1StringView(mimeTypeTagC)) {
--                if (!process(QMimeType(data), errorMessage))
-+                if (!process(data, errorMessage))
-                     return false;
-                 data.clear();
-             } else if (elementName == QLatin1StringView(matchTagC)) {
-@@ -314,4 +313,19 @@
- #endif // feature xmlstreamreader
- }
- 
-+void QMimeTypeXMLData::clear()
-+{
-+    hasGlobDeleteAll = false;
-+    name.clear();
-+    localeComments.clear();
-+    genericIconName.clear();
-+    iconName.clear();
-+    globPatterns.clear();
-+}
-+
-+void QMimeTypeXMLData::addGlobPattern(const QString &pattern)
-+{
-+    globPatterns.append(pattern);
-+}
-+
- QT_END_NAMESPACE
---- a/src/corelib/mimetypes/qmimetypeparser_p.h
-+++ b/src/corelib/mimetypes/qmimetypeparser_p.h
-@@ -16,7 +16,7 @@
- // We mean it.
- //
- 
--#include "qmimedatabase_p.h"
-+#include <QtCore/qtconfigmacros.h>
- 
- QT_REQUIRE_CONFIG(mimetype);
- 
-@@ -24,6 +24,21 @@
- 
- QT_BEGIN_NAMESPACE
- 
-+class QMimeTypeXMLData
-+{
-+public:
-+    void clear();
-+
-+    void addGlobPattern(const QString &pattern);
-+
-+    bool hasGlobDeleteAll = false; // true if the mimetype has a glob-deleteall tag
-+    QString name;
-+    QMimeTypePrivate::LocaleHash localeComments;
-+    QString genericIconName; // TODO move to a struct that's specific to the XML provider
-+    QString iconName; // TODO move to a struct that's specific to the XML provider
-+    QStringList globPatterns;
-+};
-+
- class QIODevice;
- 
- class QMimeTypeParserBase
-@@ -39,7 +54,7 @@
-     static bool parseNumber(QStringView n, int *target, QString *errorMessage);
- 
- protected:
--    virtual bool process(const QMimeType &t, QString *errorMessage) = 0;
-+    virtual bool process(const QMimeTypeXMLData &t, QString *errorMessage) = 0;
-     virtual bool process(const QMimeGlobPattern &t, QString *errorMessage) = 0;
-     virtual void processParent(const QString &child, const QString &parent) = 0;
-     virtual void processAlias(const QString &alias, const QString &name) = 0;
-@@ -73,7 +88,7 @@
-     explicit QMimeTypeParser(QMimeXMLProvider &provider) : m_provider(provider) {}
- 
- protected:
--    inline bool process(const QMimeType &t, QString *) override
-+    inline bool process(const QMimeTypeXMLData &t, QString *) override
-     { m_provider.addMimeType(t); return true; }
- 
-     inline bool process(const QMimeGlobPattern &glob, QString *) override
---- /dev/null
-+++ b/tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml
-@@ -0,0 +1,7 @@
-+<?xml version="1.0" encoding="UTF-8"?>
-+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
-+  <mime-type type="image/jpeg">
-+    <glob pattern="*.jnewext"/>
-+    <comment>JPEG Image</comment>
-+  </mime-type>
-+</mime-info>
---- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt
-+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt
-@@ -23,6 +23,7 @@
-     #"mime/packages/freedesktop.org.xml"
- #)
- set(testdata_resource_files
-+    "../add-extension.xml"
-     "../invalid-magic1.xml"
-     "../invalid-magic2.xml"
-     "../invalid-magic3.xml"
---- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt
-+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt
-@@ -23,6 +23,7 @@
-     #"mime/packages/freedesktop.org.xml"
- #)
- set(testdata_resource_files
-+    "../add-extension.xml"
-     "../invalid-magic1.xml"
-     "../invalid-magic2.xml"
-     "../invalid-magic3.xml"
---- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
-+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
-@@ -31,6 +31,7 @@
- using namespace Qt::StringLiterals;
- 
- static const char *const additionalMimeFiles[] = { "yast2-metapackage-handler-mimetypes.xml",
-+                                                   "add-extension.xml", // adds *.jnewext to image/jpeg
-                                                    "qml-again.xml",
-                                                    "text-x-objcsrc.xml",
-                                                    "text-plain-subclass.xml",
-@@ -1206,6 +1207,11 @@
-     QCOMPARE(db.mimeTypeForFile(qmlTestFile).name(),
-              QString::fromLatin1("text/x-qml"));
- 
-+    // QTBUG-116905: globPatterns() should merge all locations
-+    // add-extension.xml adds *.jnewext
-+    const QStringList expectedJpegPatterns{ "*.jpg", "*.jpeg", "*.jpe", "*.jnewext" };
-+    QCOMPARE(db.mimeTypeForName(QStringLiteral("image/jpeg")).globPatterns(), expectedJpegPatterns);
-+
-     // Now that we have two directories with mime definitions, check that everything still works
-     inheritance();
-     if (QTest::currentTestFailed())
---- a/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp
-+++ b/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp
-@@ -21,7 +21,6 @@
-     void name();
-     void genericIconName();
-     void iconName();
--    void suffixes();
-     void gadget();
- };
- 
-@@ -36,52 +35,15 @@
- 
- static QString qMimeTypeName()
- {
--    static const QString result ("No name of the MIME type");
--    return result;
--}
--
--static QString qMimeTypeGenericIconName()
--{
--    static const QString result ("No file name of an icon image that represents the MIME type");
--    return result;
--}
--
--static QString qMimeTypeIconName()
--{
--    static const QString result ("No file name of an icon image that represents the MIME type");
--    return result;
--}
--
--static QStringList buildQMimeTypeFilenameExtensions()
--{
--    QStringList result;
--    result << QString::fromLatin1("*.png");
--    return result;
--}
--
--static QStringList qMimeTypeGlobPatterns()
--{
--    static const QStringList result (buildQMimeTypeFilenameExtensions());
-+    static const QString result("group/fake-mime");
-     return result;
- }
- 
- // ------------------------------------------------------------------------------------------------
- 
--QMIMETYPE_BUILDER_FROM_RVALUE_REFS
--
--// ------------------------------------------------------------------------------------------------
--
- void tst_qmimetype::isValid()
- {
--    QMimeType instantiatedQMimeType (
--                  buildQMimeType (
--                      qMimeTypeName(),
--                      qMimeTypeGenericIconName(),
--                      qMimeTypeIconName(),
--                      qMimeTypeGlobPatterns()
--                  )
--              );
--
-+    QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
-     QVERIFY(instantiatedQMimeType.isValid());
- 
-     QMimeType otherQMimeType (instantiatedQMimeType);
-@@ -98,23 +60,8 @@
- 
- void tst_qmimetype::name()
- {
--    QMimeType instantiatedQMimeType (
--                  buildQMimeType (
--                      qMimeTypeName(),
--                      qMimeTypeGenericIconName(),
--                      qMimeTypeIconName(),
--                      qMimeTypeGlobPatterns()
--                  )
--              );
--
--    QMimeType otherQMimeType (
--                  buildQMimeType (
--                      QString(),
--                      qMimeTypeGenericIconName(),
--                      qMimeTypeIconName(),
--                      qMimeTypeGlobPatterns()
--                  )
--              );
-+    QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
-+    QMimeType otherQMimeType{ QMimeTypePrivate(QString()) };
- 
-     // Verify that the Name is part of the equality test:
-     QCOMPARE(instantiatedQMimeType.name(), qMimeTypeName());
-@@ -127,63 +74,23 @@
- 
- void tst_qmimetype::genericIconName()
- {
--    QMimeType instantiatedQMimeType (
--                  buildQMimeType (
--                      qMimeTypeName(),
--                      qMimeTypeGenericIconName(),
--                      qMimeTypeIconName(),
--                      qMimeTypeGlobPatterns()
--                  )
--              );
--
--    QCOMPARE(instantiatedQMimeType.genericIconName(), qMimeTypeGenericIconName());
-+    const QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
-+    QCOMPARE(instantiatedQMimeType.genericIconName(), "group-x-generic");
- }
- 
- // ------------------------------------------------------------------------------------------------
- 
- void tst_qmimetype::iconName()
- {
--    QMimeType instantiatedQMimeType (
--                  buildQMimeType (
--                      qMimeTypeName(),
--                      qMimeTypeGenericIconName(),
--                      qMimeTypeIconName(),
--                      qMimeTypeGlobPatterns()
--                  )
--              );
--
--    QCOMPARE(instantiatedQMimeType.iconName(), qMimeTypeIconName());
--}
--
--// ------------------------------------------------------------------------------------------------
--
--void tst_qmimetype::suffixes()
--{
--    QMimeType instantiatedQMimeType (
--                  buildQMimeType (
--                      qMimeTypeName(),
--                      qMimeTypeGenericIconName(),
--                      qMimeTypeIconName(),
--                      qMimeTypeGlobPatterns()
--                  )
--              );
--
--    QCOMPARE(instantiatedQMimeType.globPatterns(), qMimeTypeGlobPatterns());
--    QCOMPARE(instantiatedQMimeType.suffixes(), QStringList() << QString::fromLatin1("png"));
-+    const QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
-+    QCOMPARE(instantiatedQMimeType.iconName(), "group-fake-mime");
- }
- 
- // ------------------------------------------------------------------------------------------------
- 
- void tst_qmimetype::gadget()
- {
--    QMimeType instantiatedQMimeType (
--                  buildQMimeType (
--                      qMimeTypeName(),
--                      qMimeTypeGenericIconName(),
--                      qMimeTypeIconName(),
--                      qMimeTypeGlobPatterns()
--                  )
--              );
-+    QMimeType instantiatedQMimeType = QMimeDatabase().mimeTypeForName("text/plain");
- 
-     const QMetaObject *metaObject = &instantiatedQMimeType.staticMetaObject;
- 
diff --git a/debian/patches/series b/debian/patches/series
index 639e66d..8f99837 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,6 +1,3 @@
-# NEON backported patches as requested - fixed in 6.6.2??
-qmimedatabase_collect_glob_patterns_from_all_locations
-
 # Needs to be fixed upstream.
 Add-SH-detection.patch
 


More information about the Neon-commits mailing list