From 5a5aa4b1786e793f457ad5a88a4e49d7469a92fa Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Tinkl?= <lukas@kde.org>
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<QUrl> KFileWidgetPrivate::tokenize(const QString &line) const
                 urls.append(u);
             }
         } else {
-            urls << QUrl::fromUserInput(line);
+            urls << QUrl::fromLocalFile(line);
         }
 
         return urls;
-- 
2.1.0

