diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index 0cf210c5df228fcc3bfdb18b88f9bf2c654dc136..4f1107289406a224089dde5b21005504a21ba324 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -31,6 +31,7 @@ #include "qmlprojectfile.h" #include "qmlprojectmanagerconstants.h" #include "fileformat/qmlprojectitem.h" +#include "qmlprojectrunconfiguration.h" #include <coreplugin/icore.h> #include <coreplugin/messagemanager.h> @@ -255,6 +256,10 @@ bool QmlProject::fromMap(const QVariantMap &map) } refresh(Everything); + // FIXME workaround to guarantee that run/debug actions are enabled if a valid file exists + QmlProjectRunConfiguration *runConfig = static_cast<QmlProjectRunConfiguration*>(activeTarget()->activeRunConfiguration()); + runConfig->changeCurrentFile(0); + return true; } diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp index e69060fb69b49c907c4e9fc1bfd6f02ac095eeab..dd729a33b60eadcc1e607721bfdbf84207a7a36b 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.cpp @@ -54,6 +54,7 @@ QmlProjectRunConfiguration::QmlProjectRunConfiguration(Internal::QmlProjectTarge ProjectExplorer::RunConfiguration(parent, QLatin1String(Constants::QML_RC_ID)), m_debugServerAddress("127.0.0.1"), m_debugServerPort(Constants::QML_DEFAULT_DEBUG_SERVER_PORT), + m_projectTarget(parent), m_usingCurrentFile(false), m_isEnabled(false) { @@ -294,6 +295,20 @@ void QmlProjectRunConfiguration::changeCurrentFile(Core::IEditor *editor) m_currentFileFilename = editor->file()->fileName(); if (Core::ICore::instance()->mimeDatabase()->findByFile(mainScript()).matchesType(QLatin1String("application/x-qml"))) enable = true; + } else { + // find a qml file with lowercase filename. This is slow but only done in initialization/other border cases. + foreach(const QString& filename, m_projectTarget->qmlProject()->files()) { + const QFileInfo fi(filename); + + if (!filename.isEmpty() && fi.baseName()[0].isLower() + && Core::ICore::instance()->mimeDatabase()->findByFile(fi).matchesType(QLatin1String("application/x-qml"))) + { + m_currentFileFilename = filename; + enable = true; + break; + } + + } } setEnabled(enable); diff --git a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h index 5fcd2fc4a178c2680aa28b818b851b6d1689269c..9bf631d05d23c204bed9853022a029b7eb852ec1 100644 --- a/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h +++ b/src/plugins/qmlprojectmanager/qmlprojectrunconfiguration.h @@ -72,8 +72,11 @@ public: QVariantMap toMap() const; -private slots: +public slots: void changeCurrentFile(Core::IEditor*); + +private slots: + QString mainScript() const; void setMainScript(const QString &scriptFile); @@ -102,6 +105,8 @@ private: QString m_debugServerAddress; uint m_debugServerPort; + Internal::QmlProjectTarget *m_projectTarget; + bool m_usingCurrentFile; bool m_isEnabled;