X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/8d95c06df13717fe1e8dfd0d28dc0b8357e32064..30cb4c1ef254b10f7f42ece4d8be01eec775294b:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 023a73800..0b04d0afa 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -95,10 +96,6 @@ DolphinView::DolphinView(QWidget* parent, m_controller = new DolphinController(this); m_controller->setUrl(url); - // Receiver of the DolphinView signal 'urlChanged()' don't need - // to care whether the internal controller changed the URL already or whether - // the controller just requested an URL change and will be updated later. - // In both cases the URL has been changed: connect(m_controller, SIGNAL(urlChanged(const KUrl&)), this, SIGNAL(urlChanged(const KUrl&))); connect(m_controller, SIGNAL(requestUrlChange(const KUrl&)), @@ -298,6 +295,10 @@ void DolphinView::clearSelection() KFileItemList DolphinView::selectedItems() const { + if (isColumnViewActive()) { + return m_columnView->selectedItems(); + } + const QAbstractItemView* view = itemView(); // Our view has a selection, we will map them back to the DolphinModel @@ -328,12 +329,6 @@ KUrl::List DolphinView::selectedUrls() const return urls; } -KFileItem DolphinView::fileItem(const QModelIndex& index) const -{ - const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index); - return m_dolphinModel->itemForIndex(dolphinModelIndex); -} - void DolphinView::setContentsPosition(int x, int y) { QAbstractItemView* view = itemView(); @@ -445,6 +440,7 @@ void DolphinView::updateView(const KUrl& url, const KUrl& rootUrl) return; } + m_iconManager->cancelPreviews(); m_controller->setUrl(url); // emits urlChanged, which we forward if (!rootUrl.isEmpty() && rootUrl.isParentOf(url)) { @@ -776,10 +772,14 @@ void DolphinView::emitSelectionChangedSignal() void DolphinView::openContextMenu(const QPoint& pos) { KFileItem item; - - const QModelIndex index = itemView()->indexAt(pos); - if (index.isValid() && (index.column() == DolphinModel::Name)) { - item = fileItem(index); + if (isColumnViewActive()) { + item = m_columnView->itemAt(pos); + } else { + const QModelIndex index = itemView()->indexAt(pos); + if (index.isValid() && (index.column() == DolphinModel::Name)) { + const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index); + item = m_dolphinModel->itemForIndex(dolphinModelIndex); + } } if (m_toolTipManager != 0) { @@ -796,24 +796,18 @@ void DolphinView::dropUrls(const KUrl::List& urls, const KFileItem& destItem) { Q_ASSERT(!urls.isEmpty()); - const KUrl& destination = !destItem.isNull() && destItem.isDir() ? - destItem.url() : destPath; + const KUrl destination = !destItem.isNull() && destItem.isDir() ? + destItem.url() : destPath; const KUrl sourceDir = KUrl(urls.first().directory()); if (sourceDir != destination) { - dropUrls(urls, destination); + DolphinDropController dropController(this); + // forward doingOperation signal up to the mainwindow + connect(&dropController, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)), + this, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType))); + dropController.dropUrls(urls, destination); } } -void DolphinView::dropUrls(const KUrl::List& urls, - const KUrl& destination) -{ - DolphinDropController dropController(this); - // forward doingOperation signal up to the mainwindow - connect(&dropController, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType)), - this, SIGNAL(doingOperation(KIO::FileUndoManager::CommandType))); - dropController.dropUrls(urls, destination); -} - void DolphinView::updateSorting(DolphinView::Sorting sorting) { ViewProperties props(viewPropertiesUrl()); @@ -905,7 +899,10 @@ QPair DolphinView::pasteInfo() const KUrl::List urls = KUrl::List::fromMimeData(mimeData); if (!urls.isEmpty()) { - ret.first = true; + // disable the paste action if no writing is supported + KFileItem item(KFileItem::Unknown, KFileItem::Unknown, url()); + ret.first = KonqFileItemCapabilities(KFileItemList() << item).supportsWriting(); + if (urls.count() == 1) { const KFileItem item(KFileItem::Unknown, KFileItem::Unknown, urls.first(), true); ret.second = item.isDir() ? i18nc("@action:inmenu", "Paste One Folder") : @@ -1125,7 +1122,6 @@ void DolphinView::createView() view->setSelectionMode(QAbstractItemView::ExtendedSelection); - new KMimeTypeResolver(view, m_dolphinModel); m_iconManager = new IconManager(view, m_proxyModel); m_iconManager->setShowPreview(m_showPreview); @@ -1147,6 +1143,12 @@ void DolphinView::deleteView() { QAbstractItemView* view = itemView(); if (view != 0) { + // It's important to set the keyboard focus to the parent + // before deleting the view: Otherwise when having a split + // view the other view will get the focus and will request + // an activation (see DolphinView::eventFilter()). + setFocus(); + m_topLayout->removeWidget(view); view->close(); view->deleteLater();