X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/ffb232fdee7fdc40785c02811610a5fb13b64ff0..883e2cb0637cf198b2bb5227bd6b13fe26e64e6e:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index bddd4b5bf..e947508f0 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -90,6 +90,7 @@ DolphinView::DolphinView(QWidget* parent, m_isContextMenuOpen(false), m_ignoreViewProperties(false), m_assureVisibleCurrentIndex(false), + m_selectClipboardItems(false), m_mode(DolphinView::IconsView), m_topLayout(0), m_controller(0), @@ -147,7 +148,7 @@ DolphinView::DolphinView(QWidget* parent, connect(m_dirLister, SIGNAL(redirection(KUrl, KUrl)), this, SIGNAL(redirection(KUrl, KUrl))); connect(m_dirLister, SIGNAL(completed()), - this, SLOT(restoreCurrentItem())); + this, SLOT(slotDirListerCompleted())); connect(m_dirLister, SIGNAL(refreshItems(const QList>&)), this, SLOT(slotRefreshItems())); @@ -606,7 +607,8 @@ QString DolphinView::statusBarText() const void DolphinView::setUrl(const KUrl& url) { - // remember current item candidate (see restoreCurrentItem()) + // remember current item candidate (see slotDirListerCompleted()) + m_selectClipboardItems = false; m_currentItemUrl = url; updateView(url, KUrl()); } @@ -1179,9 +1181,10 @@ void DolphinView::slotRequestUrlChange(const KUrl& url) m_controller->setUrl(url); } -void DolphinView::restoreCurrentItem() +void DolphinView::slotDirListerCompleted() { if (!m_currentItemUrl.isEmpty()) { + // assure that the current item remains visible const QModelIndex dirIndex = m_dolphinModel->indexForUrl(m_currentItemUrl); if (dirIndex.isValid()) { const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex); @@ -1194,6 +1197,31 @@ void DolphinView::restoreCurrentItem() } m_currentItemUrl.clear(); } + + if (m_selectClipboardItems) { + m_selectClipboardItems = false; + + // select all items that have been pasted from the clipboard to + // the current directory + const QMimeData* mimeData = QApplication::clipboard()->mimeData(); + const KUrl::List copiedUrls = KUrl::List::fromMimeData(mimeData); + + QSet fileNames; + foreach (const KUrl& url, copiedUrls) { + fileNames.insert(url.fileName()); + } + + QItemSelectionModel* selectionModel = itemView()->selectionModel(); + const int rowCount = m_proxyModel->rowCount(); + for (int row = 0; row < rowCount; ++row) { + const QModelIndex proxyIndex = m_proxyModel->index(row, 0); + const QModelIndex dirIndex = m_proxyModel->mapToSource(proxyIndex); + const KUrl url = m_dolphinModel->itemForIndex(dirIndex).url(); + if (fileNames.contains(url.fileName())) { + selectionModel->select(proxyIndex, QItemSelectionModel::Select); + } + } + } } void DolphinView::slotRefreshItems() @@ -1472,6 +1500,7 @@ QAbstractItemView* DolphinView::itemView() const void DolphinView::pasteToUrl(const KUrl& url) { + m_selectClipboardItems = true; KonqOperations::doPaste(this, url); }