[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/kio
From:       David Faure <faure () kde ! org>
Date:       2010-05-19 11:50:54
Message-ID: 20100519115054.02A6DAC8BB () svn ! kde ! org
[Download RAW message or body]

SVN commit 1128475 by dfaure:

Performance fix: Repair delayed mimetype determination: calling overlays should not \
                do mimetype determination.
CCBUG: 237668


 M  +29 -18    kio/kfileitem.cpp  
 M  +8 -0      tests/kfileitemtest.cpp  


--- trunk/KDE/kdelibs/kio/kio/kfileitem.cpp #1128474:1128475
@@ -376,7 +376,7 @@
              && m_bLink == item.m_bLink
              && m_hidden == item.m_hidden
              && size() == item.size()
-             && time(KFileItem::ModificationTime) == \
item.time(KFileItem::ModificationTime) +             && \
time(KFileItem::ModificationTime) == item.time(KFileItem::ModificationTime) // TODO \
                only if already known!
              && m_entry.stringValue( KIO::UDSEntry::UDS_ICON_NAME ) == \
item.m_entry.stringValue( KIO::UDSEntry::UDS_ICON_NAME )  );
 
@@ -807,6 +807,31 @@
     return d->m_iconName;
 }
 
+/**
+ * Returns true if this is a desktop file.
+ * Mimetype determination is optional.
+ */
+static bool checkDesktopFile(const KFileItem& item, bool _determineMimeType)
+{
+    // only local files
+    bool isLocal;
+    const KUrl url = item.mostLocalUrl(isLocal);
+    if (!isLocal)
+        return false;
+
+    // only regular files
+    if (!item.isRegularFile())
+        return false;
+
+    // only if readable
+    if (!item.isReadable())
+        return false;
+
+    // return true if desktop file
+    KMimeType::Ptr mime = _determineMimeType ? item.determineMimeType() : \
item.mimeTypePtr(); +    return mime->is("application/x-desktop");
+}
+
 QStringList KFileItem::overlays() const
 {
     QStringList names = d->m_entry.stringValue( \
KIO::UDSEntry::UDS_ICON_OVERLAY_NAMES ).split(','); @@ -819,7 +844,7 @@
         names.append("object-locked");
     }
 
-    if ( isDesktopFile() ) {
+    if ( checkDesktopFile(*this, false) ) {
         KDesktopFile cfg( localPath() );
         const KConfigGroup group = cfg.desktopGroup();
 
@@ -1447,24 +1472,10 @@
     return lst;
 }
 
+
 bool KFileItem::isDesktopFile() const
 {
-    // only local files
-    bool isLocal;
-    const KUrl url = mostLocalUrl(isLocal);
-    if (!isLocal)
-        return false;
-
-    // only regular files
-    if (!S_ISREG(d->m_fileMode))
-        return false;
-
-    // only if readable
-    if (!isReadable())
-        return false;
-
-    // return true if desktop file
-    return determineMimeType()->is("application/x-desktop");
+    return checkDesktopFile(*this, true);
 }
 
 bool KFileItem::isRegularFile() const
--- trunk/KDE/kdelibs/kio/tests/kfileitemtest.cpp #1128474:1128475
@@ -189,6 +189,14 @@
     }
 
     {
+        // Calling overlays should NOT do mimetype determination (#237668)
+        KFileItem fileItem(KFileItem::Unknown, KFileItem::Unknown, \
KUrl(file.fileName()), true /*on demand*/); +        \
QVERIFY(!fileItem.isMimeTypeKnown()); +        fileItem.overlays();
+        QVERIFY(!fileItem.isMimeTypeKnown());
+    }
+
+    {
         KTemporaryFile file;
         QVERIFY(file.open());
         // Check whether mime-magic is used.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic