From 5a5aa4b1786e793f457ad5a88a4e49d7469a92fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Tinkl?= Date: Tue, 9 Sep 2014 22:49:27 +0200 Subject: [PATCH 2/2] Fix relative paths being turned into http urls by fromUserInput. Reviewed-By: (well, written by) David Faure. --- src/filewidgets/kfilewidget.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/filewidgets/kfilewidget.cpp b/src/filewidgets/kfilewidget.cpp index 42320e3..58dd92e 100644 --- a/src/filewidgets/kfilewidget.cpp +++ b/src/filewidgets/kfilewidget.cpp @@ -325,6 +325,22 @@ static bool containsProtocolSection(const QString &string) return false; } +// this string-to-url conversion function handles relative paths, full paths and URLs +// without the http-prepending that QUrl::fromUserInput does. +static QUrl urlFromString(const QString& str) +{ + if (QDir::isAbsolutePath(str)) { + return QUrl::fromLocalFile(str); + } + QUrl url(str); + if (url.isRelative()) { + url.clear(); + url.setPath(str); + } + return url; +} + + KFileWidget::KFileWidget(const QUrl &_startDir, QWidget *parent) : QWidget(parent), d(new KFileWidgetPrivate(this)) { @@ -909,7 +925,7 @@ void KFileWidget::slotOk() containsProtocolSection(locationEditCurrentText))) { QString fileName; - QUrl url = QUrl::fromUserInput(locationEditCurrentText); + QUrl url = urlFromString(locationEditCurrentText); if (d->operationMode == Opening) { KIO::StatJob *statJob = KIO::stat(url, KIO::HideProgressInfo); KJobWidgets::setWindow(statJob, this); @@ -1447,7 +1463,7 @@ void KFileWidgetPrivate::_k_urlEntered(const QUrl &url) bool blocked = locationEdit->blockSignals(true); if (keepLocation) { - QUrl currentUrl = QUrl::fromUserInput(filename); + QUrl currentUrl = urlFromString(filename); locationEdit->changeUrl(0, QIcon::fromTheme(KIO::iconNameForUrl(currentUrl)), currentUrl); locationEdit->lineEdit()->setModified(true); } @@ -1494,7 +1510,7 @@ void KFileWidgetPrivate::_k_enterUrl(const QString &url) { // qDebug(); - _k_enterUrl(QUrl::fromUserInput(KUrlCompletion::replacedPath(url, true, true))); + _k_enterUrl(urlFromString(KUrlCompletion::replacedPath(url, true, true))); } bool KFileWidgetPrivate::toOverwrite(const QUrl &url) @@ -1677,7 +1693,7 @@ QList KFileWidgetPrivate::tokenize(const QString &line) const urls.append(u); } } else { - urls << QUrl::fromUserInput(line); + urls << QUrl::fromLocalFile(line); } return urls; -- 2.1.0