From 80156ef3f57bab877574ad2932fbeca42eee05a0 Mon Sep 17 00:00:00 2001 From: Gleb Kasachou Date: Mon, 28 Jul 2025 18:19:47 +0300 Subject: [PATCH] Add a check before offering to create folder This commit adds a function that checks if a folder can be created at the url entered in the location bar. This prevents offering to create folders in locations where the user does not have write permissions. --- src/dolphinviewcontainer.cpp | 17 ++++++++++++++++- src/dolphinviewcontainer.h | 6 ++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 49615d185..5e8b26293 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -957,6 +957,21 @@ void DolphinViewContainer::slotStatusBarZoomLevelChanged(int zoomLevel) m_view->setZoomLevel(zoomLevel); } +bool DolphinViewContainer::isFolderCreatable(QUrl url) +{ + 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") @@ -975,7 +990,7 @@ void DolphinViewContainer::slotErrorMessageFromView(const QString &message, cons } showMessage(i18nc("@info", "Authorization required to enter this folder."), KMessageWidget::Error, {m_authorizeToEnterFolderAction}); return; - } else if (kioErrorCode == KIO::ERR_DOES_NOT_EXIST && m_view->url().isLocalFile()) { + } else if (kioErrorCode == KIO::ERR_DOES_NOT_EXIST && m_view->url().isLocalFile() && isFolderCreatable(m_view->url())) { if (!m_createFolderAction) { m_createFolderAction = new QAction(this); m_createFolderAction->setText(i18nc("@action", "Create missing folder")); diff --git a/src/dolphinviewcontainer.h b/src/dolphinviewcontainer.h index 419b9f5b1..4acccdd81 100644 --- a/src/dolphinviewcontainer.h +++ b/src/dolphinviewcontainer.h @@ -460,6 +460,12 @@ private: */ QRect preferredSmallStatusBarGeometry(); + /** + * Check if a folder can be created at url. + * This method supports only local URLs. + */ + bool isFolderCreatable(QUrl url); + protected: bool eventFilter(QObject *object, QEvent *event) override; -- 2.47.3