X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/0e31baf9f65be83174348a7014cba7ded1a2a2c9..b0fc376decbb898e27bac800c7359c67cb018e07:/src/iconmanager.cpp diff --git a/src/iconmanager.cpp b/src/iconmanager.cpp index 5f9bd5134..807b91a9e 100644 --- a/src/iconmanager.cpp +++ b/src/iconmanager.cpp @@ -116,28 +116,47 @@ void IconManager::updateIcons(const KFileItemList& items) void IconManager::replaceIcon(const KFileItem& item, const QPixmap& pixmap) { Q_ASSERT(!item.isNull()); + if (!m_showPreview) { + // the preview has been canceled in the meantime + return; + } + + // check whether the item is part of the directory lister (it is possible + // that a preview from an old directory lister is received) KDirLister* dirLister = m_dolphinModel->dirLister(); - if (!m_showPreview || (item.url().directory() != dirLister->url().path())) { - // the preview has been canceled in the meanwhile or the preview - // job is still working on items of an older URL, hence - // the item is not part of the directory model anymore + bool isOldPreview = true; + const KUrl::List dirs = dirLister->directories(); + const QString itemDir = item.url().directory(); + foreach (KUrl url, dirs) { + if (url.path() == itemDir) { + isOldPreview = false; + break; + } + } + if (isOldPreview) { return; } const QModelIndex idx = m_dolphinModel->indexForItem(item); if (idx.isValid() && (idx.column() == 0)) { - QPixmap newPixmap = pixmap; + QPixmap icon = pixmap; if (item.isHidden()) { - KIconEffect::semiTransparent(newPixmap); + if (!icon.hasAlpha()) { + // the semitransparent operation requires having an alpha mask + QPixmap alphaMask(icon.width(), icon.height()); + alphaMask.fill(); + icon.setAlphaChannel(alphaMask); + } + KIconEffect::semiTransparent(icon); } const QMimeData* mimeData = QApplication::clipboard()->mimeData(); if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(item)) { KIconEffect iconEffect; - newPixmap = iconEffect.apply(newPixmap, KIconLoader::Desktop, KIconLoader::DisabledState); - m_dolphinModel->setData(idx, QIcon(newPixmap), Qt::DecorationRole); + icon = iconEffect.apply(icon, KIconLoader::Desktop, KIconLoader::DisabledState); + m_dolphinModel->setData(idx, QIcon(icon), Qt::DecorationRole); } else { - m_dolphinModel->setData(idx, QIcon(newPixmap), Qt::DecorationRole); + m_dolphinModel->setData(idx, QIcon(icon), Qt::DecorationRole); } } } @@ -186,7 +205,13 @@ void IconManager::applyCutItemEffect() return; } - const KFileItemList items(m_dolphinModel->dirLister()->items()); + KFileItemList items; + KDirLister* dirLister = m_dolphinModel->dirLister(); + const KUrl::List dirs = dirLister->directories(); + foreach (KUrl url, dirs) { + items << dirLister->itemsForDir(url); + } + foreach (KFileItem item, items) { if (isCutItem(item)) { const QModelIndex index = m_dolphinModel->indexForItem(item);