diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/dolphinmainwindow.cpp | 21 | ||||
| -rw-r--r-- | src/dolphinview.cpp | 63 | ||||
| -rw-r--r-- | src/dolphinview.h | 9 |
3 files changed, 92 insertions, 1 deletions
diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 6e2517344..e0a0a5633 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -528,11 +528,32 @@ void DolphinMainWindow::undo() void DolphinMainWindow::cut()
{
+ QClipboard* clipboard = QApplication::clipboard();
+ const QMimeData* currentMimeData = clipboard->mimeData();
+ const bool hadCutSelection = KonqMimeData::decodeIsCutSelection(currentMimeData);
+
QMimeData* mimeData = new QMimeData();
const KUrl::List kdeUrls = m_activeView->selectedUrls();
const KUrl::List mostLocalUrls;
KonqMimeData::populateMimeData(mimeData, kdeUrls, mostLocalUrls, true);
QApplication::clipboard()->setMimeData(mimeData);
+
+ if (hadCutSelection) {
+ // If an old cut selection has been applied, the view must
+ // be reloaded to get the original icons of the items without an
+ // applied item effect.
+ m_view[PrimaryIdx]->reload();
+ if (m_view[SecondaryIdx] != 0) {
+ m_view[SecondaryIdx]->reload();
+ }
+ }
+ else {
+ // apply an item effect for the icons of all cut items
+ m_view[PrimaryIdx]->updateCutItems();
+ if (m_view[SecondaryIdx] != 0) {
+ m_view[SecondaryIdx]->updateCutItems();
+ }
+ }
}
void DolphinMainWindow::copy()
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 3927d9c6d..50f56a478 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -23,6 +23,7 @@ #include <assert.h> #include <QApplication> +#include <QClipboard> #include <QDropEvent> #include <QItemSelectionModel> #include <QMouseEvent> @@ -31,10 +32,12 @@ #include <kdirmodel.h> #include <kfileitemdelegate.h> #include <klocale.h> +#include <kiconeffect.h> #include <kio/netaccess.h> #include <kio/renamedialog.h> #include <kio/previewjob.h> #include <kmimetyperesolver.h> +#include <konqmimedata.h> #include <konq_operations.h> #include <kurl.h> @@ -110,6 +113,8 @@ DolphinView::DolphinView(DolphinMainWindow* mainWindow, this, SLOT(updateStatusBar())); connect(m_dirLister, SIGNAL(completed()), this, SLOT(updateItemCount())); + connect(m_dirLister, SIGNAL(completed()), + this, SLOT(updateCutItems())); connect(m_dirLister, SIGNAL(newItems(const KFileItemList&)), this, SLOT(generatePreviews(const KFileItemList&))); connect(m_dirLister, SIGNAL(infoMessage(const QString&)), @@ -724,6 +729,11 @@ void DolphinView::generatePreviews(const KFileItemList& items) connect(job, SIGNAL(gotPreview(const KFileItem*, const QPixmap&)), this, SLOT(showPreview(const KFileItem*, const QPixmap&))); } + + const QMimeData* mimeData = QApplication::clipboard()->mimeData(); + if (KonqMimeData::decodeIsCutSelection(mimeData)) { + QTimer::singleShot(1000, this, SLOT(applyCutEffect())); + } } void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) @@ -731,7 +741,15 @@ void DolphinView::showPreview(const KFileItem* item, const QPixmap& pixmap) Q_ASSERT(item != 0); const QModelIndex idx = m_dirModel->indexForItem(*item); if (idx.isValid() && (idx.column() == 0)) { - m_dirModel->setData(idx, pixmap, Qt::DecorationRole); + const QMimeData* mimeData = QApplication::clipboard()->mimeData(); + if (KonqMimeData::decodeIsCutSelection(mimeData) && isCutItem(*item)) { + KIconEffect iconEffect; + QPixmap cutPixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState); + m_dirModel->setData(idx, cutPixmap, Qt::DecorationRole); + } + else { + m_dirModel->setData(idx, pixmap, Qt::DecorationRole); + } } } @@ -889,6 +907,31 @@ void DolphinView::requestActivation() m_mainWindow->setActiveView(this); } +void DolphinView::updateCutItems() +{ + const QMimeData* mimeData = QApplication::clipboard()->mimeData(); + if (!KonqMimeData::decodeIsCutSelection(mimeData)) { + return; + } + + KFileItemList items(m_dirLister->items()); + KFileItemList::const_iterator it = items.begin(); + const KFileItemList::const_iterator end = items.end(); + while (it != end) { + KFileItem* item = *it; + if (isCutItem(*item)) { + QPixmap pixmap = item->pixmap(0); + KIconEffect iconEffect; + pixmap = iconEffect.apply(pixmap, K3Icon::Desktop, K3Icon::DisabledState); + const QModelIndex idx = m_dirModel->indexForItem(*item); + if (idx.isValid()) { + m_dirModel->setData(idx, pixmap, Qt::DecorationRole); + } + } + ++it; + } +} + void DolphinView::changeNameFilter(const QString& nameFilter) { // The name filter of KDirLister does a 'hard' filtering, which @@ -1052,4 +1095,22 @@ bool DolphinView::isValidNameIndex(const QModelIndex& index) const return index.isValid() && (index.column() == KDirModel::Name); } +bool DolphinView::isCutItem(const KFileItem& item) const +{ + const QMimeData* mimeData = QApplication::clipboard()->mimeData(); + const KUrl::List cutUrls = KUrl::List::fromMimeData(mimeData); + + const KUrl& itemUrl = item.url(); + KUrl::List::const_iterator it = cutUrls.begin(); + const KUrl::List::const_iterator end = cutUrls.end(); + while (it != end){ + if (*it == itemUrl) { + return true; + } + ++it; + } + + return false; +} + #include "dolphinview.moc" diff --git a/src/dolphinview.h b/src/dolphinview.h index 2507e9e8e..5cfd7904d 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -346,6 +346,9 @@ public slots: */ void requestActivation(); + /** Applies an item effect to all cut items of the clipboard. */ + void updateCutItems(); + signals: /** Is emitted if URL of the view has been changed to \a url. */ void urlChanged(const KUrl& url); @@ -522,6 +525,12 @@ private: */ bool isValidNameIndex(const QModelIndex& index) const; + /** + * Returns true, if the item \a item has been cut into + * the clipboard. + */ + bool isCutItem(const KFileItem& item) const; + private: bool m_showProgress; Mode m_mode; |
