diff --git a/src/plugins/projectexplorer/kitmanager.cpp b/src/plugins/projectexplorer/kitmanager.cpp index 7d4a08dad30..e8486709bbb 100644 --- a/src/plugins/projectexplorer/kitmanager.cpp +++ b/src/plugins/projectexplorer/kitmanager.cpp @@ -89,8 +89,7 @@ public: }; KitManagerPrivate::KitManagerPrivate() - : m_defaultKit(0), m_initialized(false), - m_writer(0) + : m_defaultKit(0), m_initialized(false), m_writer(0) { } KitManagerPrivate::~KitManagerPrivate() @@ -131,7 +130,15 @@ KitManager::KitManager(QObject *parent) : void KitManager::restoreKits() { - QTC_ASSERT(!d->m_writer, return); + QTC_ASSERT(!d->m_initialized, return); + static bool initializing = false; + + if (initializing) // kits will call kits() to check their display names, which will trigger another + // call to restoreKits, which ... + return; + + initializing = true; + QList kitsToRegister; QList kitsToValidate; QList kitsToCheck; @@ -203,6 +210,7 @@ void KitManager::restoreKits() setDefaultKit(k); d->m_writer = new Utils::PersistentSettingsWriter(settingsFileName(), QLatin1String("QtCreatorProfiles")); + d->m_initialized = true; } KitManager::~KitManager() @@ -319,10 +327,8 @@ KitManager::KitList KitManager::restoreKits(const Utils::FileName &fileName) QList KitManager::kits(const KitMatcher *m) const { - if (!d->m_initialized) { - d->m_initialized = true; + if (!d->m_initialized) const_cast(this)->restoreKits(); - } QList result; foreach (Kit *k, d->m_kitList) { @@ -350,12 +356,10 @@ Kit *KitManager::find(const KitMatcher *m) const return matched.isEmpty() ? 0 : matched.first(); } -Kit *KitManager::defaultKit() +Kit *KitManager::defaultKit() const { - if (!d->m_initialized) { - d->m_initialized = true; - restoreKits(); - } + if (!d->m_initialized) + const_cast(this)->restoreKits(); return d->m_defaultKit; } @@ -377,7 +381,7 @@ void KitManager::notifyAboutUpdate(ProjectExplorer::Kit *k) { if (!k) return; - if (kits().contains(k)) + if (kits().contains(k) && d->m_initialized) emit kitUpdated(k); else emit unmanagedKitUpdated(k); @@ -394,7 +398,8 @@ bool KitManager::registerKit(ProjectExplorer::Kit *k) // make sure we have all the information in our kits: addKit(k); - emit kitAdded(k); + if (d->m_initialized) + emit kitAdded(k); return true; } @@ -414,7 +419,8 @@ void KitManager::deregisterKit(Kit *k) } setDefaultKit(newDefault); } - emit kitRemoved(k); + if (d->m_initialized) + emit kitRemoved(k); delete k; } @@ -425,7 +431,8 @@ void KitManager::setDefaultKit(Kit *k) if (k && !kits().contains(k)) return; d->m_defaultKit = k; - emit defaultkitChanged(); + if (d->m_initialized) + emit defaultkitChanged(); } void KitManager::validateKits() diff --git a/src/plugins/projectexplorer/kitmanager.h b/src/plugins/projectexplorer/kitmanager.h index 88bbcbd6a57..fb52aefb17e 100644 --- a/src/plugins/projectexplorer/kitmanager.h +++ b/src/plugins/projectexplorer/kitmanager.h @@ -110,7 +110,7 @@ public: QList kits(const KitMatcher *m = 0) const; Kit *find(const Core::Id &id) const; Kit *find(const KitMatcher *m) const; - Kit *defaultKit(); + Kit *defaultKit() const; QList kitInformation() const;