diff options
| author | Peter Penz <[email protected]> | 2009-05-08 16:44:51 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2009-05-08 16:44:51 +0000 |
| commit | 5f548d210e735b713d847525cb3e62140f9e6f4d (patch) | |
| tree | 8ef16d2f3ea4e1fff579f8f584234701d239a9ce /src/dolphinview.cpp | |
| parent | ffb232fdee7fdc40785c02811610a5fb13b64ff0 (diff) | |
Select copied/moved items automatically if no item is already selected. This gives the user an indication where his pasted items are located and allows invoking operations like "Rename" in an easy way.
BUG: 191723
svn path=/trunk/KDE/kdebase/apps/; revision=965344
Diffstat (limited to 'src/dolphinview.cpp')
| -rw-r--r-- | src/dolphinview.cpp | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index bddd4b5bf..ec6754558 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<QPair<KFileItem,KFileItem>>&)), this, SLOT(slotRefreshItems())); @@ -157,6 +158,10 @@ DolphinView::DolphinView(QWidget* parent, connect(&DolphinNewMenuObserver::instance(), SIGNAL(itemCreated(const KUrl&)), this, SLOT(observeCreatedItem(const KUrl&))); + // when a copy/move-operation has been finished, the pasted items should get selected + connect(KIO::FileUndoManager::self(), SIGNAL(jobRecordingFinished(CommandType)), + this, SLOT(slotJobRecordingFinished(CommandType))); + applyViewProperties(url); m_topLayout->addWidget(itemView()); } @@ -606,7 +611,7 @@ QString DolphinView::statusBarText() const void DolphinView::setUrl(const KUrl& url) { - // remember current item candidate (see restoreCurrentItem()) + // remember current item candidate (see slotDirListerCompleted()) m_currentItemUrl = url; updateView(url, KUrl()); } @@ -1141,6 +1146,15 @@ void DolphinView::restoreSelection() changeSelection(m_selectedItems); } +void DolphinView::slotJobRecordingFinished(CommandType command) +{ + // Assure that the pasted items get selected. This must be done + // asynchronously in slotDirListerCompleted(). + m_selectClipboardItems = ((command == KIO::FileUndoManager::Copy) || + (command == KIO::FileUndoManager::Move)) && + !hasSelection(); +} + void DolphinView::emitContentsMoved() { // only emit the contents moved signal if: @@ -1179,9 +1193,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 +1209,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<QString> 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() |
