diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp index 3493acf2016..2bcf7a7dd98 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.cpp @@ -56,6 +56,8 @@ #include #include #include +#include +#include #include #include @@ -157,10 +159,11 @@ QString S60Manager::platform(const ProjectExplorer::ToolChain *tc) return target.right(target.lastIndexOf(QLatin1Char('-'))); } -void S60Manager::addDevice() +void S60Manager::delayedInitialize() { - ProjectExplorer::IDevice::Ptr dev(new SymbianIDevice); - ProjectExplorer::DeviceManager::instance()->addDevice(dev); + handleQtVersionChanges(); + connect(QtSupport::QtVersionManager::instance(), SIGNAL(qtVersionsChanged(QList,QList,QList)), + this, SLOT(handleQtVersionChanges())); } void S60Manager::symbianDeviceRemoved(const SymbianUtils::SymbianDevice &d) @@ -173,6 +176,35 @@ void S60Manager::symbianDeviceAdded(const SymbianUtils::SymbianDevice &d) handleSymbianDeviceStateChange(d, ProjectExplorer::IDevice::DeviceAvailable); } +void S60Manager::handleQtVersionChanges() +{ + bool symbianQtFound = false; + Core::Id symbianDeviceId; + QList versionList = QtSupport::QtVersionManager::instance()->versions(); + foreach (QtSupport::BaseQtVersion *v, versionList) { + if (v->platformName() != QLatin1String(QtSupport::Constants::SYMBIAN_PLATFORM)) + continue; + + symbianQtFound = true; + break; + } + + ProjectExplorer::DeviceManager *dm = ProjectExplorer::DeviceManager::instance(); + for (int i = 0; i < dm->deviceCount(); ++i) { + ProjectExplorer::IDevice::ConstPtr dev = dm->deviceAt(i); + if (dev->type() != SymbianIDeviceFactory::deviceType()) + continue; + + symbianDeviceId = dev->id(); + break; + } + + if (symbianQtFound && !symbianDeviceId.isValid()) + dm->addDevice(ProjectExplorer::IDevice::Ptr(new SymbianIDevice)); + if (!symbianQtFound && symbianDeviceId.isValid()) + dm->removeDevice(symbianDeviceId); +} + void S60Manager::handleSymbianDeviceStateChange(const SymbianUtils::SymbianDevice &d, ProjectExplorer::IDevice::AvailabilityState s) { ProjectExplorer::DeviceManager *dm = ProjectExplorer::DeviceManager::instance(); diff --git a/src/plugins/qt4projectmanager/qt-s60/s60manager.h b/src/plugins/qt4projectmanager/qt-s60/s60manager.h index b1059cd7eef..ba0c6d79a57 100644 --- a/src/plugins/qt4projectmanager/qt-s60/s60manager.h +++ b/src/plugins/qt4projectmanager/qt-s60/s60manager.h @@ -53,12 +53,14 @@ public: static QString platform(const ProjectExplorer::ToolChain *tc); - void addDevice(); + void delayedInitialize(); private slots: void symbianDeviceRemoved(const SymbianUtils::SymbianDevice &d); void symbianDeviceAdded(const SymbianUtils::SymbianDevice &d); + void handleQtVersionChanges(); + private: void handleSymbianDeviceStateChange(const SymbianUtils::SymbianDevice &d, ProjectExplorer::IDevice::AvailabilityState s); diff --git a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp index f515fc3d056..86231f6ba27 100644 --- a/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp +++ b/src/plugins/qt4projectmanager/qt4projectmanagerplugin.cpp @@ -298,7 +298,7 @@ bool Qt4ProjectManagerPlugin::initialize(const QStringList &arguments, QString * bool Qt4ProjectManagerPlugin::delayedInitialize() { - S60Manager::instance()->addDevice(); + S60Manager::instance()->delayedInitialize(); return true; }