aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2012-12-19 11:35:36 +0100
committerTobias Hunger <tobias.hunger@digia.com>2012-12-19 16:54:12 +0100
commitc708944af9a572d94c937cda301cfc879d29c7ae (patch)
tree240ada16998286a5db4fd15f264fef4164584285 /src
parent75efa76ed062cf68187c19e221677ed4eb205bdc (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.cpp37
-rw-r--r--src/plugins/projectexplorer/kitmanager.h2
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;