[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