diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp index 0ea53fa3696baa4f9d29a49b50b621e7ee1a567c..1442ee7ac25642cacac545edd8b65d1eb956b817 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.cpp @@ -47,7 +47,10 @@ MaemoDeviceEnvReader::MaemoDeviceEnvReader(QObject *parent, MaemoRunConfiguratio : QObject(parent) , m_stop(false) , m_devConfig(config->deviceConfig()) + , m_runConfig(config) { + connect(config, SIGNAL(deviceConfigurationChanged(ProjectExplorer::Target*)), + this, SLOT(handleCurrentDeviceConfigChanged())); } MaemoDeviceEnvReader::~MaemoDeviceEnvReader() @@ -59,11 +62,11 @@ void MaemoDeviceEnvReader::start() m_stop = false; if (m_connection) disconnect(m_connection.data(), 0, this, 0); - + const bool reuse = m_connection && m_connection->state() == Core::SshConnection::Connected && m_connection->connectionParameters() == m_devConfig.server; - + if (!reuse) m_connection = Core::SshConnection::create(); @@ -71,7 +74,7 @@ void MaemoDeviceEnvReader::start() SLOT(executeRemoteCall())); connect(m_connection.data(), SIGNAL(error(SshError)), this, SLOT(handleConnectionFailure())); - + if (reuse) executeRemoteCall(); else @@ -89,20 +92,13 @@ void MaemoDeviceEnvReader::stop() } } -void MaemoDeviceEnvReader::setEnvironment() -{ - if (m_remoteOutput.isEmpty()) - return; - m_env = Utils::Environment(m_remoteOutput.split(QLatin1Char('\n'), - QString::SkipEmptyParts)); -} - void MaemoDeviceEnvReader::executeRemoteCall() { if (m_stop) return; - const QByteArray remoteCall = MaemoGlobal::remoteSourceProfilesCommand().toUtf8() + "; env"; + const QByteArray remoteCall = MaemoGlobal::remoteSourceProfilesCommand() + .toUtf8() + "; env"; m_remoteProcess = m_connection->createRemoteProcess(remoteCall); connect(m_remoteProcess.data(), SIGNAL(closed(int)), this, @@ -123,6 +119,14 @@ void MaemoDeviceEnvReader::handleConnectionFailure() emit finished(); } +void MaemoDeviceEnvReader::handleCurrentDeviceConfigChanged() +{ + m_devConfig = m_runConfig->deviceConfig(); + + m_env.clear(); + emit finished(); +} + void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode) { Q_ASSERT(exitCode == Core::SshRemoteProcess::FailedToStart @@ -132,8 +136,12 @@ void MaemoDeviceEnvReader::remoteProcessFinished(int exitCode) if (m_stop) return; + m_env.clear(); if (exitCode == Core::SshRemoteProcess::ExitedNormally) { - setEnvironment(); + if (!m_remoteOutput.isEmpty()) { + m_env = Utils::Environment(m_remoteOutput.split(QLatin1Char('\n'), + QString::SkipEmptyParts)); + } } else { emit error(tr("Error running remote process: %1") .arg(m_remoteProcess->errorString())); diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h index 3d53e93ba0ffcbd9061e0c6dc01330717165e75a..e5ad89e4635bce92895f9f04a0949bd9ef244eaa 100644 --- a/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h +++ b/src/plugins/qt4projectmanager/qt-maemo/maemodeviceenvreader.h @@ -67,12 +67,10 @@ signals: void finished(); void error(const QString &error); -private: - void setEnvironment(); - private slots: void executeRemoteCall(); void handleConnectionFailure(); + void handleCurrentDeviceConfigChanged(); void remoteProcessFinished(int exitCode); void remoteOutput(const QByteArray &data); @@ -83,6 +81,7 @@ private: QString m_remoteOutput; Utils::Environment m_env; MaemoDeviceConfig m_devConfig; + MaemoRunConfiguration *m_runConfig; QSharedPointer<Core::SshConnection> m_connection; QSharedPointer<Core::SshRemoteProcess> m_remoteProcess; };