Fix bug showing folder icons for files
authorArnt Witteveen <arntw@enfocus.com>
Wed, 14 Mar 2012 13:53:32 +0000 (14:53 +0100)
committerQt by Nokia <qt-info@nokia.com>
Sat, 17 Mar 2012 00:52:17 +0000 (01:52 +0100)
Fix an issue where the cache was updated with the folder icon,
even though this is never used from the cache. This caused
files to sometimes be shown with a folder icon: If a folder
has an extension (e.g. a folder named 'folder.ext'), this
means the folder icon will be written to the cache for the
'ext' extension, and from that point on all .ext files will
be shown with the folder icon.

The fix is to not save an icon in the cache for those cases
where it will not be used from the cache anyway, by using the
same condition for updating the cache as for reading it (which
is in line 8 of the same function).

Change-Id: I9ce8fca0718b2b62b9390fa64989acd54952a88e
Reviewed-by: Girish Ramakrishnan <girish.1.ramakrishnan@nokia.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
src/widgets/itemviews/qfileiconprovider.cpp

index b6669c0..5356b67 100644 (file)
@@ -376,15 +376,16 @@ QIcon QFileIconProviderPrivate::getMacIcon(const QFileInfo &fi) const
     qt_mac_constructQIconFromIconRef(iconRef, 0, &retIcon);
     ReleaseIconRef(iconRef);
 
-    pixmap = retIcon.pixmap(16);
-    QPixmapCache::insert(keyBase + QLatin1String("16"), pixmap);
-    pixmap = retIcon.pixmap(32);
-    QPixmapCache::insert(keyBase + QLatin1String("32"), pixmap);
-    pixmap = retIcon.pixmap(64);
-    QPixmapCache::insert(keyBase + QLatin1String("64"), pixmap);
-    pixmap = retIcon.pixmap(128);
-    QPixmapCache::insert(keyBase + QLatin1String("128"), pixmap);
-
+    if (fi.isFile() && !fi.isExecutable() && !fi.isSymLink()) {
+        pixmap = retIcon.pixmap(16);
+        QPixmapCache::insert(keyBase + QLatin1String("16"), pixmap);
+        pixmap = retIcon.pixmap(32);
+        QPixmapCache::insert(keyBase + QLatin1String("32"), pixmap);
+        pixmap = retIcon.pixmap(64);
+        QPixmapCache::insert(keyBase + QLatin1String("64"), pixmap);
+        pixmap = retIcon.pixmap(128);
+        QPixmapCache::insert(keyBase + QLatin1String("128"), pixmap);
+    }
     return retIcon;
 }
 #endif