aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-04-01 12:34:04 +0200
committerJoerg Bornemann <joerg.bornemann@digia.com>2014-04-01 14:52:09 +0200
commit4d836596def67db9e01caee55b54a0557ec26b2a (patch)
treefc566ec15679eb144f62ac2ba4f75d51235adb1f
parentf0fc3af0a8f8ccdb76cfe6cd4de9dbf44e934fb2 (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.cpp33
-rw-r--r--src/plugins/winrt/winrtdevicefactory.h4
-rw-r--r--src/plugins/winrt/winrtplugin.cpp10
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