X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/3d4e6938f57fcf010b4fda7255384098327eb67d..817f3952e2bed820ea3b50dfdfe91ccb99dcb748:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index e6966affb..4ff9ab0e4 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -18,6 +18,7 @@ ***************************************************************************/ #include "dolphinviewcontainer.h" +#include #include #include @@ -34,8 +35,11 @@ #include #include #include +#include #include +#include #include +#include #include #include @@ -70,7 +74,7 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, m_proxyModel(0) { hide(); - setFocusPolicy(Qt::StrongFocus); + m_topLayout = new QVBoxLayout(this); m_topLayout->setSpacing(0); m_topLayout->setMargin(0); @@ -83,11 +87,12 @@ DolphinViewContainer::DolphinViewContainer(DolphinMainWindow* mainWindow, const GeneralSettings* settings = DolphinSettings::instance().generalSettings(); m_urlNavigator->setUrlEditable(settings->editableUrl()); + m_urlNavigator->setShowFullPath(settings->showFullPath()); m_urlNavigator->setHomeUrl(settings->homeUrl()); m_dirLister = new DolphinDirLister(); m_dirLister->setAutoUpdate(true); - m_dirLister->setMainWindow(this); + m_dirLister->setMainWindow(window()); m_dirLister->setDelayedMimeTypes(true); m_dolphinModel = new DolphinModel(this); @@ -166,9 +171,14 @@ DolphinViewContainer::~DolphinViewContainer() m_dirLister = 0; // deleted by m_dolphinModel } -void DolphinViewContainer::setUrl(const KUrl& url) +void DolphinViewContainer::setUrl(const KUrl& newUrl) { - m_urlNavigator->setUrl(url); + m_urlNavigator->setUrl(newUrl); + + // Temporary disable the 'File'->'Create New...' menu until + // the write permissions can be checked in a fast way at + // DolphinViewContainer::slotDirListerCompleted(). + m_mainWindow->newMenu()->menu()->setEnabled(false); } const KUrl& DolphinViewContainer::url() const @@ -198,12 +208,6 @@ bool DolphinViewContainer::isUrlEditable() const return m_urlNavigator->isUrlEditable(); } -KFileItem DolphinViewContainer::fileItem(const QModelIndex& index) const -{ - const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index); - return m_dolphinModel->itemForIndex(dolphinModelIndex); -} - void DolphinViewContainer::updateProgress(int percent) { if (!m_showProgress) { @@ -233,8 +237,19 @@ void DolphinViewContainer::slotDirListerCompleted() } updateStatusBar(); - QTimer::singleShot(100, this, SLOT(restoreContentsPos())); + + // Enable the 'File'->'Create New...' menu only if the directory + // supports writing. + KMenu* createNew = m_mainWindow->newMenu()->menu(); + KFileItem item = m_dirLister->rootItem(); + if (item.isNull()) { + // it is unclear whether writing is supported + createNew->setEnabled(true); + } else { + KonqFileItemCapabilities capabilities(KFileItemList() << item); + createNew->setEnabled(capabilities.supportsWriting()); + } } void DolphinViewContainer::showItemInfo(const KFileItem& item) @@ -392,9 +407,7 @@ void DolphinViewContainer::saveRootUrl(const KUrl& url) void DolphinViewContainer::slotItemTriggered(const KFileItem& item) { - // Prefer the local path over the URL. - bool isLocal; - KUrl url = item.mostLocalUrl(isLocal); + KUrl url = item.targetUrl(); if (item.isDir()) { m_view->setUrl(url); @@ -402,25 +415,16 @@ void DolphinViewContainer::slotItemTriggered(const KFileItem& item) } const GeneralSettings* settings = DolphinSettings::instance().generalSettings(); - const bool browseThroughArchives = settings->browseThroughArchives() && - item.isFile() && url.isLocalFile(); - if (browseThroughArchives) { - KMimeType::Ptr mime = item.mimeTypePtr(); - - // Don't use mime->is("application/zip"), as this would - // also browse through Open Office files: - if (mime->name() == "application/zip") { - url.setProtocol("zip"); - m_view->setUrl(url); - return; - } - - if (mime->is("application/x-tar") || - mime->is("application/x-tarz") || - mime->is("application/x-bzip-compressed-tar") || - mime->is("application/x-compressed-tar") || - mime->is("application/x-tzo")) { - url.setProtocol("tar"); + const bool browseThroughArchives = settings->browseThroughArchives(); + if (browseThroughArchives && item.isFile() && url.isLocalFile()) { + // Generic mechanism for redirecting to tar:// when clicking on a tar file, + // zip:// when clicking on a zip file, etc. + // The .protocol file specifies the mimetype that the kioslave handles. + // Note that we don't use mimetype inheritance since we don't want to + // open OpenDocument files as zip folders... + const QString protocol = KProtocolManager::protocolForArchiveMimetype(item.mimetype()); + if (!protocol.isEmpty()) { + url.setProtocol(protocol); m_view->setUrl(url); return; }