diff options
author | Ahmad Samir <a.samirh78@gmail.com> | 2024-01-04 21:02:45 +0200 |
---|---|---|
committer | Shawn Rutledge <shawn.rutledge@qt.io> | 2024-02-01 22:06:12 +0000 |
commit | 2a8b27bf6c523de6f3f466f8062279c093940a60 (patch) | |
tree | 2b0093f8d11b3ef560daca57fd6fcfffc789409c /src/gui/image | |
parent | 0211dfd92bcaa5a3a4c1ce94e13fcfd9c49e9c6d (diff) |
QFileSystemModel: don't crash with setIconProvider(nullptr)
The method takes a pointer, so the code shouldn't crash when passed a
nullptr.
QFileInfoGatherer::getInfo() still needs to generate a descriptive
string for the file, so we refactor QAbstractFileIconProvider::type()
to put the implementation into a reusable static function
QAbstractFileIconProviderPrivate::getFileType(const QFileInfo &info).
This unfortunately involves constructing a QMimeDatabase on the fly,
but the docs say that is fine.
Drive-by change: use nullptr instead of `0` for pointers.
Pick-to: 6.5 6.6 6.7
Fixes: QTBUG-99178
Change-Id: Ia32ea0a26701d593e74fbecced7be8d9e0aa0f52
Reviewed-by: Ahmad Samir <a.samirh78@gmail.com>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/gui/image')
-rw-r--r-- | src/gui/image/qabstractfileiconprovider.cpp | 18 | ||||
-rw-r--r-- | src/gui/image/qabstractfileiconprovider_p.h | 1 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/gui/image/qabstractfileiconprovider.cpp b/src/gui/image/qabstractfileiconprovider.cpp index c5a51001af..71b6a0b03d 100644 --- a/src/gui/image/qabstractfileiconprovider.cpp +++ b/src/gui/image/qabstractfileiconprovider.cpp @@ -229,21 +229,16 @@ QIcon QAbstractFileIconProvider::icon(const QFileInfo &info) const return result.isNull() ? d->getPlatformThemeIcon(info) : result; } -/*! - Returns the type of the file described by \a info. -*/ -QString QAbstractFileIconProvider::type(const QFileInfo &info) const +QString QAbstractFileIconProviderPrivate::getFileType(const QFileInfo &info) { - Q_D(const QAbstractFileIconProvider); if (QFileSystemEntry::isRootPath(info.absoluteFilePath())) return QGuiApplication::translate("QAbstractFileIconProvider", "Drive"); if (info.isFile()) { #if QT_CONFIG(mimetype) - const QMimeType mimeType = d->mimeDatabase.mimeTypeForFile(info); + const QMimeType mimeType = QMimeDatabase().mimeTypeForFile(info); return mimeType.comment().isEmpty() ? mimeType.name() : mimeType.comment(); #else - Q_UNUSED(d); return QGuiApplication::translate("QAbstractFileIconProvider", "File"); #endif } @@ -273,4 +268,13 @@ QString QAbstractFileIconProvider::type(const QFileInfo &info) const return QGuiApplication::translate("QAbstractFileIconProvider", "Unknown"); } +/*! + Returns the type of the file described by \a info. +*/ + +QString QAbstractFileIconProvider::type(const QFileInfo &info) const +{ + return QAbstractFileIconProviderPrivate::getFileType(info); +} + QT_END_NAMESPACE diff --git a/src/gui/image/qabstractfileiconprovider_p.h b/src/gui/image/qabstractfileiconprovider_p.h index d2caf05440..f53be0f06c 100644 --- a/src/gui/image/qabstractfileiconprovider_p.h +++ b/src/gui/image/qabstractfileiconprovider_p.h @@ -37,6 +37,7 @@ public: QIcon getIconThemeIcon(const QFileInfo &info) const; static void clearIconTypeCache(); + static QString getFileType(const QFileInfo &info); QAbstractFileIconProvider *q_ptr = nullptr; QAbstractFileIconProvider::Options options = {}; |