diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index 311947a44be..9f5a4687f9e 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -45,6 +45,10 @@ #include #include +#ifdef Q_OS_WIN32 +#include +#endif + using Core::EditorManager; using Core::ICore; using Core::IEditor; @@ -144,16 +148,18 @@ QString QmlProjectRunConfiguration::viewerArguments() const Utils::QtcProcess::addArg(&args, importPath); } - const QString &s = mainScript(); - if (!s.isEmpty()) + QString s = mainScript(); + if (!s.isEmpty()) { + s = canonicalCapsPath(s); Utils::QtcProcess::addArg(&args, s); + } return args; } QString QmlProjectRunConfiguration::workingDirectory() const { QFileInfo projectFile(qmlTarget()->qmlProject()->file()->fileName()); - return projectFile.absolutePath(); + return canonicalCapsPath(projectFile.absolutePath()); } int QmlProjectRunConfiguration::qtVersionId() const @@ -172,6 +178,32 @@ void QmlProjectRunConfiguration::setQtVersionId(int id) m_configurationWidget.data()->updateQtVersionComboBox(); } +/* QtDeclarative checks explicitly that the capitalization for any URL / path + is exactly like the capitalization on disk. This method is uses the same + native Windows API's to get the exact canonical path. */ +QString QmlProjectRunConfiguration::canonicalCapsPath(const QString &fileName) +{ + QString canonicalPath = QFileInfo(fileName).canonicalFilePath(); + +#if defined(Q_OS_WIN32) + wchar_t *buffer = 0; + do { + long length = ::GetLongPathName((wchar_t*)fileName.utf16(), NULL, 0); + if (!length) + break; + buffer = new wchar_t[length]; + DWORD rv = ::GetLongPathName((wchar_t*)fileName.utf16(), buffer, length); + if (!rv) + break; + canonicalPath = QString((QChar*)buffer); + } while (false); + delete buffer; +#endif + + return canonicalPath; +} + + Qt4ProjectManager::QtVersion *QmlProjectRunConfiguration::qtVersion() const { if (m_qtVersionId == -1) diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h index bd5b13b2741..d5ebdbf6c2f 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h @@ -120,6 +120,8 @@ private: void ctor(); static bool isValidVersion(Qt4ProjectManager::QtVersion *version); void setQtVersionId(int id); + + static QString canonicalCapsPath(const QString &filePath); Utils::Environment baseEnvironment() const; void setUserEnvironmentChanges(const QList &diff);