From cbb053068ccc6399dc7a392df615cda46264cf8d Mon Sep 17 00:00:00 2001 From: Tobias Hunger <tobias.hunger@digia.com> Date: Mon, 31 Mar 2014 12:20:39 +0200 Subject: [PATCH] QtVersionManager: Only load Qt versions after the toolchains are available The mingw Qt versions need to know the mingw toolchains to run qmake since that may link to a library provided by mingw. This patch delays loading of the Qt versions till after the Tool Chains are available by explicitly listening to the toolChainsLoaded signal of the Toolchain Manager. I do not see how else we can enforce the proper ordering with the plugin initialization scheme we have. Task-number: QTCREATORBUG-11898 Change-Id: I5a93c2b2b32c658695017295652242a5aaa6ee60 Reviewed-by: Daniel Teske <daniel.teske@digia.com> Reviewed-by: Tobias Hunger <tobias.hunger@digia.com> --- src/plugins/qtsupport/qtsupportplugin.cpp | 4 ++-- src/plugins/qtsupport/qtversionmanager.cpp | 13 ++++++++++++- src/plugins/qtsupport/qtversionmanager.h | 3 ++- 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/plugins/qtsupport/qtsupportplugin.cpp b/src/plugins/qtsupport/qtsupportplugin.cpp index d40449199af..0fb831fcd20 100644 --- a/src/plugins/qtsupport/qtsupportplugin.cpp +++ b/src/plugins/qtsupport/qtsupportplugin.cpp @@ -96,6 +96,8 @@ bool QtSupportPlugin::initialize(const QStringList &arguments, QString *errorMes ProjectExplorer::KitManager::registerKitInformation(new QtKitInformation); + QtVersionManager::initialized(); + return true; } @@ -108,8 +110,6 @@ void QtSupportPlugin::extensionsInitialized() " You probably want %1 instead.").arg(QString::fromLatin1(kHostBins))); connect(VariableManager::instance(), SIGNAL(variableUpdateRequested(QByteArray)), this, SLOT(updateVariable(QByteArray))); - - QtVersionManager::extensionsInitialized(); } bool QtSupportPlugin::delayedInitialize() diff --git a/src/plugins/qtsupport/qtversionmanager.cpp b/src/plugins/qtsupport/qtversionmanager.cpp index 37e2cd36993..a0081e4e034 100644 --- a/src/plugins/qtsupport/qtversionmanager.cpp +++ b/src/plugins/qtsupport/qtversionmanager.cpp @@ -40,6 +40,8 @@ #include <extensionsystem/pluginmanager.h> +#include <projectexplorer/toolchainmanager.h> + #include <utils/buildablehelperlibrary.h> #include <utils/filesystemwatcher.h> #include <utils/hostosinfo.h> @@ -159,8 +161,11 @@ QtVersionManager::QtVersionManager() connect(m_fileWatcherTimer, SIGNAL(timeout()), SLOT(updateFromInstaller())); } -void QtVersionManager::extensionsInitialized() +void QtVersionManager::triggerQtVersionRestore() { + disconnect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsLoaded()), + this, SLOT(triggerQtVersionRestore())); + bool success = restoreQtVersions(); m_instance->updateFromInstaller(false); if (!success) { @@ -202,6 +207,12 @@ QtVersionManager::~QtVersionManager() m_versions.clear(); } +void QtVersionManager::initialized() +{ + connect(ProjectExplorer::ToolChainManager::instance(), SIGNAL(toolChainsLoaded()), + QtVersionManager::instance(), SLOT(triggerQtVersionRestore())); +} + QObject *QtVersionManager::instance() { return m_instance; diff --git a/src/plugins/qtsupport/qtversionmanager.h b/src/plugins/qtsupport/qtversionmanager.h index c4b2fda07c5..8f8bf538e41 100644 --- a/src/plugins/qtsupport/qtversionmanager.h +++ b/src/plugins/qtsupport/qtversionmanager.h @@ -45,7 +45,7 @@ public: static QObject *instance(); QtVersionManager(); ~QtVersionManager(); - static void extensionsInitialized(); + static void initialized(); static bool delayedInitialize(); static bool isLoaded(); @@ -83,6 +83,7 @@ public slots: private slots: void updateFromInstaller(bool emitSignal = true); + void triggerQtVersionRestore(); private: // Used by QtOptionsPage -- GitLab