diff options
author | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-04-01 12:34:04 +0200 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@digia.com> | 2014-04-01 14:52:09 +0200 |
commit | 4d836596def67db9e01caee55b54a0557ec26b2a (patch) | |
tree | fc566ec15679eb144f62ac2ba4f75d51235adb1f | |
parent | f0fc3af0a8f8ccdb76cfe6cd4de9dbf44e934fb2 (diff) |
WinRt: detect devices when all prerequisites are loaded
Task-number: QTCREATORBUG-11928
Change-Id: I86ae446e01e3c1c7fe53df886428437f3eda7c18
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
-rw-r--r-- | src/plugins/winrt/winrtdevicefactory.cpp | 33 | ||||
-rw-r--r-- | src/plugins/winrt/winrtdevicefactory.h | 4 | ||||
-rw-r--r-- | src/plugins/winrt/winrtplugin.cpp | 10 |
3 files changed, 32 insertions, 15 deletions
diff --git a/src/plugins/winrt/winrtdevicefactory.cpp b/src/plugins/winrt/winrtdevicefactory.cpp index 8d2490dd55..dbfe6c69ce 100644 --- a/src/plugins/winrt/winrtdevicefactory.cpp +++ b/src/plugins/winrt/winrtdevicefactory.cpp @@ -51,7 +51,17 @@ namespace Internal { WinRtDeviceFactory::WinRtDeviceFactory() : m_process(0) + , m_initialized(false) { + if (allPrerequisitesLoaded()) { + onPrerequisitesLoaded(); + } else { + connect(DeviceManager::instance(), &DeviceManager::devicesLoaded, + this, &WinRtDeviceFactory::onPrerequisitesLoaded, Qt::QueuedConnection); + connect(static_cast<QtVersionManager *>(QtVersionManager::instance()), + &QtVersionManager::qtVersionsLoaded, + this, &WinRtDeviceFactory::onPrerequisitesLoaded, Qt::QueuedConnection); + } } QString WinRtDeviceFactory::displayNameForId(Core::Id type) const @@ -107,13 +117,21 @@ void WinRtDeviceFactory::autoDetect() m_process->start(); } -void WinRtDeviceFactory::onDevicesLoaded() +void WinRtDeviceFactory::onPrerequisitesLoaded() { + if (!allPrerequisitesLoaded() || m_initialized) + return; + + m_initialized = true; + disconnect(DeviceManager::instance(), &DeviceManager::devicesLoaded, + this, &WinRtDeviceFactory::onPrerequisitesLoaded); + QtVersionManager *qtVersionManager + = static_cast<QtVersionManager *>(QtVersionManager::instance()); + disconnect(qtVersionManager, &QtVersionManager::qtVersionsLoaded, + this, &WinRtDeviceFactory::onPrerequisitesLoaded); autoDetect(); - connect(QtSupport::QtVersionManager::instance(), - SIGNAL(qtVersionsChanged(const QList<int>&, const QList<int>&, - const QList<int>&)), - SLOT(autoDetect())); + connect(qtVersionManager, &QtVersionManager::qtVersionsChanged, + this, &WinRtDeviceFactory::autoDetect); } void WinRtDeviceFactory::onProcessError() @@ -138,6 +156,11 @@ void WinRtDeviceFactory::onProcessFinished(int exitCode, QProcess::ExitStatus ex parseRunnerOutput(m_process->readAllStandardOutput()); } +bool WinRtDeviceFactory::allPrerequisitesLoaded() +{ + return QtVersionManager::isLoaded() && DeviceManager::instance()->isLoaded(); +} + QString WinRtDeviceFactory::findRunnerFilePath() const { const QString winRtQtType = QLatin1String(Constants::WINRT_WINRTQT); diff --git a/src/plugins/winrt/winrtdevicefactory.h b/src/plugins/winrt/winrtdevicefactory.h index e91b8bdbfe..5a1150ce1d 100644 --- a/src/plugins/winrt/winrtdevicefactory.h +++ b/src/plugins/winrt/winrtdevicefactory.h @@ -50,17 +50,19 @@ public: public slots: void autoDetect(); - void onDevicesLoaded(); + void onPrerequisitesLoaded(); private slots: void onProcessError(); void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus); private: + static bool allPrerequisitesLoaded(); QString findRunnerFilePath() const; void parseRunnerOutput(const QByteArray &output) const; Utils::QtcProcess *m_process; + bool m_initialized; }; } // Internal diff --git a/src/plugins/winrt/winrtplugin.cpp b/src/plugins/winrt/winrtplugin.cpp index e067f423b6..ac195f898a 100644 --- a/src/plugins/winrt/winrtplugin.cpp +++ b/src/plugins/winrt/winrtplugin.cpp @@ -67,15 +67,7 @@ bool WinRtPlugin::initialize(const QStringList &arguments, QString *errorMessage void WinRtPlugin::extensionsInitialized() { - WinRtDeviceFactory *deviceFactory = new Internal::WinRtDeviceFactory; - addAutoReleasedObject(deviceFactory); - DeviceManager *deviceManager = DeviceManager::instance(); - if (deviceManager->isLoaded()) { - deviceFactory->onDevicesLoaded(); - } else { - connect(deviceManager, &DeviceManager::devicesLoaded, - deviceFactory, &WinRtDeviceFactory::onDevicesLoaded); - } + addAutoReleasedObject(new Internal::WinRtDeviceFactory); } } // namespace Internal |