From e3eb35b76164ee5e636c37deaf7368933c2600fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C5=82a=C5=BCej=20Szczygie=C5=82?= Date: Mon, 2 Nov 2026 23:28:08 +0100 Subject: [PATCH] DesktopSchemeHelper: Respect file:// protocol --- .../plugins/folder/autotests/desktopschemehelpertest.cpp | 9 +++++++++ .../desktop/plugins/folder/desktopschemehelper.cpp | 9 +++++++-- .../desktop/plugins/folder/desktopschemehelper.h | 2 +- containments/desktop/plugins/folder/foldermodel.cpp | 2 +- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/containments/desktop/plugins/folder/autotests/desktopschemehelpertest.cpp b/containments/desktop/plugins/folder/autotests/desktopschemehelpertest.cpp index d071c139a3..1abb48bab8 100644 --- a/containments/desktop/plugins/folder/autotests/desktopschemehelpertest.cpp +++ b/containments/desktop/plugins/folder/autotests/desktopschemehelpertest.cpp @@ -13,6 +13,8 @@ QTEST_MAIN(DesktopSchemeHelperTest) +using namespace Qt::StringLiterals; + void DesktopSchemeHelperTest::returnsExpectedValues() { DesktopSchemeHelper h; @@ -58,6 +60,13 @@ void DesktopSchemeHelperTest::returnsExpectedValues() // LabelGenerator expects a leading slash QCOMPARE(DesktopSchemeHelper::getFileUrl(QStringLiteral("desktop:Productivity/")), childOfDesktop); + + // file:// scheme + constexpr auto fileScheme = u"file://"_sv; + QCOMPARE(DesktopSchemeHelper::getFileUrl(fileScheme + desktopWithoutTrailingSlash), desktopWithoutTrailingSlash); + QCOMPARE(DesktopSchemeHelper::getFileUrl(fileScheme + desktopWithTrailingSlash), desktopWithTrailingSlash); + QCOMPARE(DesktopSchemeHelper::getFileUrl(fileScheme + childOfDesktop), childOfDesktop); + QCOMPARE(DesktopSchemeHelper::getFileUrl(fileScheme + parentOfDesktop), parentOfDesktop); } #include "moc_desktopschemehelpertest.cpp" diff --git a/containments/desktop/plugins/folder/desktopschemehelper.cpp b/containments/desktop/plugins/folder/desktopschemehelper.cpp index 5e6c10495a..2dbebd5ec3 100644 --- a/containments/desktop/plugins/folder/desktopschemehelper.cpp +++ b/containments/desktop/plugins/folder/desktopschemehelper.cpp @@ -11,6 +11,8 @@ #include #include +using namespace Qt::StringLiterals; + DesktopSchemeHelper::DesktopSchemeHelper(QObject *parent) : QObject(parent) { @@ -59,10 +61,13 @@ QString DesktopSchemeHelper::getDesktopUrl(const QString &absoluteUrlString) } } -QString DesktopSchemeHelper::getFileUrl(const QString &UrlRelativeToDesktopString) +QString DesktopSchemeHelper::getFileUrl(const QString &folderViewUrl) { + if (constexpr auto fileScheme = u"file://"_sv; folderViewUrl.startsWith(fileScheme)) { + return folderViewUrl.mid(fileScheme.size()); + } QString absoluteDesktopString(QStandardPaths::standardLocations(QStandardPaths::DesktopLocation).at(0)); - QString absoluteFileUrl(UrlRelativeToDesktopString); + QString absoluteFileUrl(folderViewUrl); if (absoluteFileUrl.startsWith(QStringLiteral("desktop:/"))) { absoluteFileUrl.replace(QStringLiteral("desktop:/"), QStringLiteral("desktop:")); } diff --git a/containments/desktop/plugins/folder/desktopschemehelper.h b/containments/desktop/plugins/folder/desktopschemehelper.h index a69f78b8e2..d1c7b8a850 100644 --- a/containments/desktop/plugins/folder/desktopschemehelper.h +++ b/containments/desktop/plugins/folder/desktopschemehelper.h @@ -23,7 +23,7 @@ public: ~DesktopSchemeHelper() override; Q_INVOKABLE static QString getDesktopUrl(const QString &absoluteUrlString); - Q_INVOKABLE static QString getFileUrl(const QString &UrlRelativeToDesktopString); + Q_INVOKABLE static QString getFileUrl(const QString &folderViewUrl); }; #endif diff --git a/containments/desktop/plugins/folder/foldermodel.cpp b/containments/desktop/plugins/folder/foldermodel.cpp index df5dfbc10e..0dea7ee59f 100644 --- a/containments/desktop/plugins/folder/foldermodel.cpp +++ b/containments/desktop/plugins/folder/foldermodel.cpp @@ -456,7 +456,7 @@ void FolderModel::setUrl(const QString &url) m_dirWatch = new KDirWatch(this); connect(m_dirWatch, &KDirWatch::created, this, &FolderModel::iconNameChanged); connect(m_dirWatch, &KDirWatch::dirty, this, &FolderModel::iconNameChanged); - m_dirWatch->addFile(DesktopSchemeHelper::getFileUrl(resolvedNewUrl.toString()).remove(QStringLiteral("file://")) + QStringLiteral("/.directory")); + m_dirWatch->addFile(DesktopSchemeHelper::getFileUrl(resolvedNewUrl.toString()) + QStringLiteral("/.directory")); } if (dragging()) {