X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/3186f0428888447a783d014afaaa0b44b68ebaba..e018ecafca79a73f1e9d76c577b9529fc3a7ae03:/src/dolphinviewcontainer.cpp diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 49615d185..1b8791167 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -957,6 +957,22 @@ void DolphinViewContainer::slotStatusBarZoomLevelChanged(int zoomLevel) m_view->setZoomLevel(zoomLevel); } +bool DolphinViewContainer::isTopMostParentFolderWritable(QUrl url) +{ + Q_ASSERT(url.isLocalFile()); + while (url.isValid()) { + url = url.adjusted(QUrl::RemoveFilename | QUrl::StripTrailingSlash); + QFileInfo info(url.toLocalFile()); + if (info.exists()) { + return info.isWritable(); + } + if (info.isSymLink()) { + return false; + } + } + return false; +} + void DolphinViewContainer::slotErrorMessageFromView(const QString &message, const int kioErrorCode) { if (kioErrorCode == KIO::ERR_CANNOT_ENTER_DIRECTORY && m_view->url().scheme() == QStringLiteral("file") @@ -980,7 +996,6 @@ void DolphinViewContainer::slotErrorMessageFromView(const QString &message, cons m_createFolderAction = new QAction(this); m_createFolderAction->setText(i18nc("@action", "Create missing folder")); m_createFolderAction->setIcon(QIcon::fromTheme(QStringLiteral("folder-new"))); - m_createFolderAction->setToolTip(i18nc("@info:tooltip", "Create the folder at this path and open it")); connect(m_createFolderAction, &QAction::triggered, this, [this](bool) { KIO::MkpathJob *job = KIO::mkpath(m_view->url()); KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Mkpath, {}, m_view->url(), job); @@ -994,6 +1009,13 @@ void DolphinViewContainer::slotErrorMessageFromView(const QString &message, cons }); }); } + if (isTopMostParentFolderWritable(m_view->url())) { + m_createFolderAction->setEnabled(true); + m_createFolderAction->setToolTip(i18nc("@info:tooltip", "Create the folder at this path and open it")); + } else { + m_createFolderAction->setEnabled(false); + m_createFolderAction->setToolTip(i18nc("@info:tooltip", "You do not have permission to create the folder")); + } showMessage(message, KMessageWidget::Error, {m_createFolderAction}); return; }