diff options
author | Tobias Hunger <tobias.hunger@digia.com> | 2012-12-19 11:35:36 +0100 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@digia.com> | 2012-12-19 16:54:12 +0100 |
commit | c708944af9a572d94c937cda301cfc879d29c7ae (patch) | |
tree | 240ada16998286a5db4fd15f264fef4164584285 /src | |
parent | 75efa76ed062cf68187c19e221677ed4eb205bdc (diff) |
Kit: Only emit signals from KitManager after all kits are restored
Change-Id: Iab5a951a3cec37328b5bcd9d8c3f9c1a31c3d85b
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/projectexplorer/kitmanager.cpp | 37 | ||||
-rw-r--r-- | src/plugins/projectexplorer/kitmanager.h | 2 |
2 files changed, 23 insertions, 16 deletions
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<Kit *> kitsToRegister; QList<Kit *> kitsToValidate; QList<Kit *> 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<Kit *> KitManager::kits(const KitMatcher *m) const { - if (!d->m_initialized) { - d->m_initialized = true; + if (!d->m_initialized) const_cast<KitManager *>(this)->restoreKits(); - } QList<Kit *> 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<KitManager *>(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<Kit *> 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 *> kitInformation() const; |