From 0e669ace195966fe698df0e071e6a4c89c0c320c Mon Sep 17 00:00:00 2001 From: El Mehdi Fekari Date: Tue, 27 Aug 2013 15:17:10 +0200 Subject: [PATCH] Qnx: Fix device connection issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BlackBerry device connections need the Qnx environments to be set first to find the path to the conenct.jar package. The device connection at startup needs to wait for the Qnx setting to be loaded. Change-Id: I89ad41a65da951f9f9c7a702346f8d4bb428d1cd Reviewed-by: Tobias Nätterlund Reviewed-by: Nicolas Arnaud-Cormos --- .../qnx/blackberryconfigurationmanager.cpp | 2 ++ .../qnx/blackberryconfigurationmanager.h | 3 +++ .../qnx/blackberrydeviceconnectionmanager.cpp | 25 +++++++++++++++++++ .../qnx/blackberrydeviceconnectionmanager.h | 4 +++ 4 files changed, 34 insertions(+) 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