From 76bf971cb9545793d56bc7805622a4d5d4871711 Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@digia.com>
Date: Tue, 29 Jan 2013 12:58:30 +0100
Subject: [PATCH] QmlDesigner.PropertyEditor: fix resource urls

When checking for existence we have to convert the url back.

Change-Id: I74536ca88d95b0013239d5ba63db99568e41ab00
Reviewed-by: Thomas Hartmann <Thomas.Hartmann@digia.com>
---
 .../components/propertyeditor/propertyeditor.cpp   | 14 ++++++++++++--
 .../components/propertyeditor/propertyeditor.h     |  1 +
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
index 1feb76c64df..74825d684dd 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.cpp
@@ -754,14 +754,14 @@ void PropertyEditor::resetView()
         hierarchy << m_selectedNode.metaInfo().superClasses();
 
         foreach (const NodeMetaInfo &info, hierarchy) {
-            if (QFileInfo(qmlSpecificsFile.toLocalFile()).exists())
+            if (QFileInfo(fileFromUrl(qmlSpecificsFile)).exists())
                 break;
             qmlSpecificsFile = fileToUrl(locateQmlFile(info, fixTypeNameForPanes(info.typeName()) + "Specifics.qml"));
             diffClassName = info.typeName();
         }
     }
 
-    if (!QFileInfo(qmlSpecificsFile.toLocalFile()).exists())
+    if (!QFileInfo(fileFromUrl(qmlSpecificsFile)).exists())
         diffClassName = specificsClassName;
 
     QString specificQmlData;
@@ -1050,6 +1050,16 @@ QUrl PropertyEditor::fileToUrl(const QString &filePath) const {
     return fileUrl;
 }
 
+QString PropertyEditor::fileFromUrl(const QUrl &url) const
+{
+    if (url.scheme() == QLatin1String("qrc")) {
+        const QString &path = url.path();
+        return QLatin1String(":") + path;
+    }
+
+    return url.toLocalFile();
+}
+
 QUrl PropertyEditor::qmlForNode(const ModelNode &modelNode, QString &className) const
 {
     if (modelNode.isValid()) {
diff --git a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
index 50968c0e856..8e30ed28e35 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
+++ b/src/plugins/qmldesigner/components/propertyeditor/propertyeditor.h
@@ -128,6 +128,7 @@ private slots:
 private: //functions
     QString qmlFileName(const NodeMetaInfo &nodeInfo) const;
     QUrl fileToUrl(const QString &filePath) const;
+    QString fileFromUrl(const QUrl &url) const;
     QUrl qmlForNode(const ModelNode &modelNode, QString &className) const;
     QString locateQmlFile(const NodeMetaInfo &info, const QString &relativePath) const;
     void select(const ModelNode& node);
-- 
GitLab