diff --git a/libnotificationmanager/job_p.h b/libnotificationmanager/job_p.h --- a/libnotificationmanager/job_p.h +++ b/libnotificationmanager/job_p.h @@ -97,6 +97,8 @@ static QSharedPointer createPlacesModel(); + static QUrl localFileOrUrl(const QString &urlString); + QString prettyDestUrl() const; void updateHasDetails(); diff --git a/libnotificationmanager/job_p.cpp b/libnotificationmanager/job_p.cpp --- a/libnotificationmanager/job_p.cpp +++ b/libnotificationmanager/job_p.cpp @@ -73,6 +73,17 @@ return s_instance.toStrongRef(); } +QUrl JobPrivate::localFileOrUrl(const QString &urlString) +{ + if (urlString.startsWith(QLatin1Char('/'))) { + return QUrl::fromLocalFile(urlString); + } else if (urlString.contains(QLatin1String(":/"))) { + return QUrl(urlString); + } + + return QUrl(); +} + // Tries to return a more user-friendly displayed destination // - if it is a place, show the name, e.g. "Downloads" // - if it is inside home, abbreviate that to tilde ~/foo @@ -82,7 +93,7 @@ QUrl url = m_destUrl; // In case of a single file and no destUrl, try using the second label (most likely "Destination")... if (!url.isValid() && m_totalFiles == 1) { - url = QUrl::fromUserInput(m_descriptionValue2, QString(), QUrl::AssumeLocalFile).adjusted(QUrl::RemoveFilename); + url = localFileOrUrl(m_descriptionValue2).adjusted(QUrl::RemoveFilename); } if (!url.isValid()) { @@ -193,9 +204,9 @@ QUrl JobPrivate::descriptionUrl() const { - QUrl url = QUrl::fromUserInput(m_descriptionValue2, QString(), QUrl::AssumeLocalFile); + QUrl url = localFileOrUrl(m_descriptionValue2); if (!url.isValid()) { - url = QUrl::fromUserInput(m_descriptionValue1, QString(), QUrl::AssumeLocalFile); + url = localFileOrUrl(m_descriptionValue1); } return url; }