┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/dolphinview.cpp
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2009-05-08 16:44:51 +0000
committerPeter Penz <[email protected]>2009-05-08 16:44:51 +0000
commit5f548d210e735b713d847525cb3e62140f9e6f4d (patch)
tree8ef16d2f3ea4e1fff579f8f584234701d239a9ce /src/dolphinview.cpp
parentffb232fdee7fdc40785c02811610a5fb13b64ff0 (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.cpp46
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()