Merge branch 'fix-getFileUrl' into 'master'

DesktopSchemeHelper: Respect file:// protocol

See merge request plasma/plasma-desktop!4174
This commit is contained in:
Błażej Szczygieł 2026-11-03 19:49:56 +00:00
commit ee84d4e3e8
4 changed files with 18 additions and 4 deletions

View file

@ -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"

View file

@ -11,6 +11,8 @@
#include <QStandardPaths>
#include <QUrl>
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:"));
}

View file

@ -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

View file

@ -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()) {