From: Peter Penz Date: Wed, 24 Aug 2011 18:23:53 +0000 (+0200) Subject: Improve KFileItemModel::createMimeData() X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/649cfb02af0a66ff86119f6be46088937e262c94 Improve KFileItemModel::createMimeData() Use the same approach like in KDirModel::mimeData(). --- 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 +#include #include #include #include @@ -137,19 +138,36 @@ QMimeData* KFileItemModel::createMimeData(const QSet& 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 KUrl::List urls; - urls.reserve(indexes.count()); + KUrl::List mostLocalUrls; + bool canUseMostLocalUrls = true; QSetIterator 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; }