X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/d4287eb8e36ead543eb595bfcaa217fa0edd2654..629ec98952bcf38bc99f2b11bc37bdc2ec7aabcc:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 5a0f00bee..783131c32 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -84,9 +85,10 @@ DolphinView::DolphinView(QWidget* parent, m_dirLister(dirLister), m_proxyModel(proxyModel), m_iconManager(0), - m_toolTipManager(0) + m_toolTipManager(0), + m_rootUrl(), + m_currentItemUrl() { - setFocusPolicy(Qt::StrongFocus); m_topLayout = new QVBoxLayout(this); m_topLayout->setSpacing(0); m_topLayout->setMargin(0); @@ -94,14 +96,10 @@ 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&)), - this, SIGNAL(urlChanged(const KUrl&))); + this, SLOT(slotRequestUrlChange(const KUrl&))); connect(m_controller, SIGNAL(requestContextMenu(const QPoint&)), this, SLOT(openContextMenu(const QPoint&))); @@ -124,6 +122,11 @@ DolphinView::DolphinView(QWidget* parent, connect(m_controller, SIGNAL(viewportEntered()), this, SLOT(clearHoverInformation())); + connect(m_dirLister, SIGNAL(redirection(KUrl, KUrl)), + this, SLOT(slotRedirection(KUrl, KUrl))); + connect(m_dirLister, SIGNAL(completed()), + this, SLOT(restoreCurrentItem())); + applyViewProperties(url); m_topLayout->addWidget(itemView()); } @@ -149,7 +152,6 @@ void DolphinView::setActive(bool active) } m_active = active; - m_selectionModel->clearSelection(); QColor color = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); if (active) { @@ -170,6 +172,7 @@ void DolphinView::setActive(bool active) update(); if (active) { + itemView()->setFocus(); emit activated(); } @@ -480,6 +483,8 @@ void DolphinView::calculateItemCount(int& fileCount, int& folderCount) void DolphinView::setUrl(const KUrl& url) { + // remember current item candidate (see restoreCurrentItem()) + m_currentItemUrl = url; updateView(url, KUrl()); } @@ -749,7 +754,7 @@ void DolphinView::triggerItem(const KFileItem& item) return; } - // TODO: the m_isContextMenuOpen check is a workaround for Qt-issue xxxxxx + // TODO: the m_isContextMenuOpen check is a workaround for Qt-issue 207192 if (item.isNull() || m_isContextMenuOpen) { return; } @@ -778,7 +783,7 @@ void DolphinView::openContextMenu(const QPoint& pos) m_toolTipManager->hideTip(); } - m_isContextMenuOpen = true; // TODO: workaround for Qt-issue xxxxxx + m_isContextMenuOpen = true; // TODO: workaround for Qt-issue 207192 emit requestContextMenu(item, url()); m_isContextMenuOpen = false; } @@ -897,7 +902,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") : @@ -956,6 +964,21 @@ void DolphinView::slotDeleteFileFinished(KJob* job) } } + +void DolphinView::restoreCurrentItem() +{ + const QModelIndex dirIndex = m_dolphinModel->indexForUrl(m_currentItemUrl); + if (dirIndex.isValid()) { + const QModelIndex proxyIndex = m_proxyModel->mapFromSource(dirIndex); + QAbstractItemView* view = itemView(); + const bool clearSelection = !hasSelection(); + view->setCurrentIndex(proxyIndex); + if (clearSelection) { + view->clearSelection(); + } + } +} + void DolphinView::loadDirectory(const KUrl& url, bool reload) { if (!url.isValid()) { @@ -1102,7 +1125,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); @@ -1182,4 +1204,17 @@ void DolphinView::pasteToUrl(const KUrl& url) } } +void DolphinView::slotRequestUrlChange(const KUrl& url) +{ + emit requestUrlChange(url); + m_controller->setUrl(url); +} + +void DolphinView::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl) +{ + if (oldUrl == m_controller->url()) { + m_controller->setUrl(newUrl); + } +} + #include "dolphinview.moc"