diff --git a/src/plugins/qnx/blackberryconfigurationmanager.cpp b/src/plugins/qnx/blackberryconfigurationmanager.cpp index daa46be9917..e3a8981b726 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.cpp +++ b/src/plugins/qnx/blackberryconfigurationmanager.cpp @@ -328,6 +328,8 @@ void BlackBerryConfigurationManager::loadSettings() loadAutoDetectedConfigurations(); loadManualConfigurations(); loadCertificates(); + + emit settingsLoaded(); } void BlackBerryConfigurationManager::clearConfigurationSettings(BlackBerryConfiguration *config) diff --git a/src/plugins/qnx/blackberryconfigurationmanager.h b/src/plugins/qnx/blackberryconfigurationmanager.h index d170436875d..d953f182aa0 100644 --- a/src/plugins/qnx/blackberryconfigurationmanager.h +++ b/src/plugins/qnx/blackberryconfigurationmanager.h @@ -75,6 +75,9 @@ public slots: void loadSettings(); void saveSettings(); +signals: + void settingsLoaded(); + private: BlackBerryConfigurationManager(QObject *parent = 0); static BlackBerryConfigurationManager *m_instance; diff --git a/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp b/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp index 43551556786..339d9e834f2 100644 --- a/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp +++ b/src/plugins/qnx/blackberrydeviceconnectionmanager.cpp @@ -33,6 +33,7 @@ #include "blackberrydeviceconfiguration.h" #include "blackberrydeviceconnection.h" +#include "blackberryconfigurationmanager.h" #include "qnxconstants.h" #include @@ -110,6 +111,16 @@ void BlackBerryDeviceConnectionManager::connectDevice(Core::Id deviceId) if (device.isNull()) return; + // BlackBerry Device connection needs the Qnx environments to be set + // in order to find the Connect.jar package. + // Let's delay the device connections at startup till the Qnx settings are loaded. + if (BlackBerryConfigurationManager::instance().configurations().isEmpty()) { + m_pendingDeviceConnections << device; + connect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()), + this, SLOT(processPendingDeviceConnections()), Qt::UniqueConnection); + return; + } + connectDevice(device); } @@ -292,6 +303,20 @@ void BlackBerryDeviceConnectionManager::handleProcessOutput(const QString &outpu emit connectionOutput(deviceId, output); } +void BlackBerryDeviceConnectionManager::processPendingDeviceConnections() +{ + if (m_pendingDeviceConnections.isEmpty() + || BlackBerryConfigurationManager::instance().configurations().isEmpty()) + return; + + foreach (ProjectExplorer::IDevice::ConstPtr device, m_pendingDeviceConnections) + connectDevice(device); + + m_pendingDeviceConnections.clear(); + disconnect(&BlackBerryConfigurationManager::instance(), SIGNAL(settingsLoaded()), + this, SLOT(processPendingDeviceConnections())); +} + BlackBerryDeviceConnection *BlackBerryDeviceConnectionManager::connectionForHost(const QString &host) const { QList connections = m_connections.uniqueKeys(); diff --git a/src/plugins/qnx/blackberrydeviceconnectionmanager.h b/src/plugins/qnx/blackberrydeviceconnectionmanager.h index ac2935062e0..8d41e220b00 100644 --- a/src/plugins/qnx/blackberrydeviceconnectionmanager.h +++ b/src/plugins/qnx/blackberrydeviceconnectionmanager.h @@ -83,6 +83,8 @@ private slots: void handleProcessOutput(const QString &output); + void processPendingDeviceConnections(); + private: explicit BlackBerryDeviceConnectionManager(); @@ -97,6 +99,8 @@ private: static BlackBerryDeviceConnectionManager *m_instance; QMultiMap m_connections; + + QList m_pendingDeviceConnections; }; } // namespace Internal