┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2011-08-24 20:23:53 +0200
committerPeter Penz <[email protected]>2011-08-24 20:24:50 +0200
commit649cfb02af0a66ff86119f6be46088937e262c94 (patch)
tree2392d0c4f53513bf398be41d96ab450c6af06944
parent84010807786c352aaeb2320caf27e5f9048d8dec (diff)
Improve KFileItemModel::createMimeData()
Use the same approach like in KDirModel::mimeData().
-rw-r--r--src/kitemviews/kfileitemmodel.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index 5e3269799..189aa75e0 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -20,6 +20,7 @@
#include "kfileitemmodel.h"
#include <KDirLister>
+#include <KDirModel>
#include <KLocale>
#include <KStringHandler>
#include <KDebug>
@@ -137,19 +138,36 @@ QMimeData* KFileItemModel::createMimeData(const QSet<int>& indexes) const
{
QMimeData* data = new QMimeData();
+ // The following code has been taken from KDirModel::mimeData()
+ // (kdelibs/kio/kio/kdirmodel.cpp)
+ // Copyright (C) 2006 David Faure <[email protected]>
KUrl::List urls;
- urls.reserve(indexes.count());
+ KUrl::List mostLocalUrls;
+ bool canUseMostLocalUrls = true;
QSetIterator<int> it(indexes);
while (it.hasNext()) {
const int index = it.next();
- const KUrl url = fileItem(index).url();
- if (url.isValid() && !url.isEmpty()) {
- urls.append(url);
+ const KFileItem item = fileItem(index);
+ if (!item.isNull()) {
+ urls << item.url();
+
+ bool isLocal;
+ mostLocalUrls << item.mostLocalUrl(isLocal);
+ if (!isLocal) {
+ canUseMostLocalUrls = false;
+ }
}
}
- urls.populateMimeData(data);
+ const bool different = canUseMostLocalUrls && mostLocalUrls != urls;
+ urls = KDirModel::simplifiedUrlList(urls);
+ if (different) {
+ mostLocalUrls = KDirModel::simplifiedUrlList(mostLocalUrls);
+ urls.populateMimeData(mostLocalUrls, data);
+ } else {
+ urls.populateMimeData(data);
+ }
return data;
}