From: Emmanuel Pescosta Date: Tue, 11 Aug 2015 18:13:52 +0000 Subject: Show custom folder icons again --- Show custom folder icons again Set mimetype as known when we assign the mime type for inode/directory This bug was introduced by commit 46cd152f BUG: 350612 FIXED-IN: 5.14 REVIEW: 124690 --- --- a/autotests/kfileitemtest.cpp +++ b/autotests/kfileitemtest.cpp @@ -25,6 +25,8 @@ #include #include #include +#include +#include QTEST_MAIN(KFileItemTest) @@ -472,6 +474,25 @@ QCOMPARE(fileItem.currentMimeType().name(), udsMimeType); } +void KFileItemTest::testIconNameForCustomFolderIcons() +{ + // Custom folder icons should be displayed (bug 350612) + + const QString iconName = QStringLiteral("folder-music"); + + QTemporaryDir tempDir; + const QUrl url = QUrl::fromLocalFile(tempDir.path()); + KDesktopFile cfg(tempDir.path() + QString::fromLatin1("/.directory")); + cfg.desktopGroup().writeEntry("Icon", iconName); + cfg.sync(); + + KIO::UDSEntry entry; + entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR); + KFileItem fileItem(entry, url); + + QCOMPARE(fileItem.iconName(), iconName); +} + #ifndef Q_OS_WIN // user/group/other write permissions are not handled on windows void KFileItemTest::testIsReadable_data() --- a/autotests/kfileitemtest.h +++ b/autotests/kfileitemtest.h @@ -41,6 +41,7 @@ void testMimetypeForRemoteFolderWithFileType(); void testCurrentMimetypeForRemoteFolder(); void testCurrentMimetypeForRemoteFolderWithFileType(); + void testIconNameForCustomFolderIcons(); #ifndef Q_OS_WIN void testIsReadable_data(); --- a/src/core/kfileitem.cpp +++ b/src/core/kfileitem.cpp @@ -732,15 +732,15 @@ QMimeDatabase db; if (isDir()) { d->m_mimeType = db.mimeTypeForName("inode/directory"); - return d->m_mimeType; - } - bool isLocalUrl; - const QUrl url = mostLocalUrl(&isLocalUrl); - d->m_mimeType = db.mimeTypeForUrl(url); - // was: d->m_mimeType = KMimeType::findByUrl( url, d->m_fileMode, isLocalUrl ); - // => we are no longer using d->m_fileMode for remote URLs. - Q_ASSERT(d->m_mimeType.isValid()); - //qDebug() << d << "finding final mimetype for" << url << ":" << d->m_mimeType.name(); + } else { + bool isLocalUrl; + const QUrl url = mostLocalUrl(&isLocalUrl); + d->m_mimeType = db.mimeTypeForUrl(url); + // was: d->m_mimeType = KMimeType::findByUrl( url, d->m_fileMode, isLocalUrl ); + // => we are no longer using d->m_fileMode for remote URLs. + Q_ASSERT(d->m_mimeType.isValid()); + //qDebug() << d << "finding final mimetype for" << url << ":" << d->m_mimeType.name(); + } d->m_bMimeTypeKnown = true; }