diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp index 85fd679ae80..f8492384ff9 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeploystep.cpp @@ -38,6 +38,7 @@ #include "maemoglobal.h" #include "maemopackagecreationstep.h" #include "maemopertargetdeviceconfigurationlistmodel.h" +#include "maemoqemumanager.h" #include "maemoremotemounter.h" #include "maemorunconfiguration.h" #include "maemotoolchain.h" @@ -354,6 +355,18 @@ void MaemoDeployStep::start() } if (m_needsInstall || !m_filesToCopy.isEmpty()) { + if (m_cachedDeviceConfig->type() == MaemoDeviceConfig::Simulator + && !MaemoQemuManager::instance().qemuIsRunning()) { + MaemoQemuManager::instance().startRuntime(); + raiseError(tr("Deployment failed: Qemu was not running. " + "It has now been started up for you, but it will take " + "a bit of time until it is ready.")); + m_needsInstall = false; + m_filesToCopy.clear(); + emit done(); + return; + } + if (m_deployToSysroot) installToSysroot(); else diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp index f641876b633..0ded5626ae1 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.cpp @@ -153,6 +153,11 @@ bool MaemoQemuManager::runtimeForQtVersion(int uniqueId, MaemoQemuRuntime *rt) c return rt->isValid(); } +bool MaemoQemuManager::qemuIsRunning() const +{ + return m_runningQtId != INT_MIN; +} + void MaemoQemuManager::qtVersionsChanged(const QList &uniqueIds) { QtVersionManager *manager = QtVersionManager::instance(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h index 3aa00d85dee..9598b580934 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemoqemumanager.h @@ -68,6 +68,8 @@ public: static MaemoQemuManager& instance(QObject *parent = 0); bool runtimeForQtVersion(int uniqueId, MaemoQemuRuntime *rt) const; + bool qemuIsRunning() const; + Q_SLOT void startRuntime(); signals: void qemuProcessStatus(QemuStatus, const QString &error = QString()); @@ -94,7 +96,6 @@ private slots: void environmentChanged(); // needed to check for qt version void deviceConfigurationChanged(ProjectExplorer::Target *target); - void startRuntime(); void terminateRuntime(); void qemuProcessFinished(); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp index 541191add2e..556b5fb541d 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.cpp @@ -36,6 +36,7 @@ #include "maemodeploystep.h" #include "maemoglobal.h" +#include "maemoqemumanager.h" #include "maemoremotemounter.h" #include "maemoremotemountsmodel.h" #include "maemorunconfiguration.h" @@ -97,11 +98,20 @@ void MaemoSshRunner::start() ASSERT_STATE(QList() << Inactive << StopRequested); if (m_remoteExecutable.isEmpty()) { - emitError(tr("Cannot run: No remote executable set.")); + emitError(tr("Cannot run: No remote executable set."), true); return; } if (!m_devConfig) { - emitError(tr("Cannot run: No device configuration set.")); + emitError(tr("Cannot run: No device configuration set."), true); + return; + } + + if (m_devConfig->type() == MaemoDeviceConfig::Simulator + && !MaemoQemuManager::instance().qemuIsRunning()) { + MaemoQemuManager::instance().startRuntime(); + emitError(tr("Cannot run: Qemu was not running. " + "It has now been started up for you, but it will take " + "a bit of time until it is ready."), true); return; } @@ -317,11 +327,13 @@ void MaemoSshRunner::setState(State newState) m_state = newState; } -void MaemoSshRunner::emitError(const QString &errorMsg) +void MaemoSshRunner::emitError(const QString &errorMsg, bool force) { if (m_state != Inactive) { setState(Inactive); emit error(errorMsg); + } else if (force) { + emit error(errorMsg); } } diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h index 01430d0e4ff..f7b64a29f68 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemosshrunner.h @@ -105,7 +105,7 @@ private: }; void setState(State newState); - void emitError(const QString &errorMsg); + void emitError(const QString &errorMsg, bool force = false); void cleanup(); bool isConnectionUsable() const;