Update project names in file system navigation pane

When the project reports a change in the display name we need to update
the drop down in the file system navigation pane as well.

Task-number: QTCREATORBUG-18972
Change-Id: Icfc0e6b2185f147bfc36589d8aea13a0966e8793
Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
Eike Ziller
2017-09-26 10:41:57 +02:00
parent f292a5e45b
commit f5f4ebff73

View File

@@ -118,6 +118,11 @@ private:
static SessionManager *m_instance = nullptr; static SessionManager *m_instance = nullptr;
static SessionManagerPrivate *d = nullptr; static SessionManagerPrivate *d = nullptr;
static QString projectFolderId(Project *pro)
{
return "P." + pro->displayName() + "." + pro->projectFilePath().toString();
}
SessionManager::SessionManager(QObject *parent) : QObject(parent) SessionManager::SessionManager(QObject *parent) : QObject(parent)
{ {
m_instance = this; m_instance = this;
@@ -386,12 +391,14 @@ void SessionManager::addProject(Project *pro)
m_instance, [pro]() { m_instance->projectDisplayNameChanged(pro); }); m_instance, [pro]() { m_instance->projectDisplayNameChanged(pro); });
emit m_instance->projectAdded(pro); emit m_instance->projectAdded(pro);
const auto updateFolderNavigation = [pro] {
FolderNavigationWidgetFactory::insertRootDirectory( FolderNavigationWidgetFactory::insertRootDirectory(
{"P." + pro->displayName() + "." + pro->projectFilePath().toString(), {projectFolderId(pro), pro->displayName(), pro->projectFilePath().parentDir()});
pro->displayName(), };
pro->projectFilePath().parentDir()}); updateFolderNavigation();
configureEditors(pro); configureEditors(pro);
connect(pro, &Project::fileListChanged, [pro](){ configureEditors(pro); }); connect(pro, &Project::fileListChanged, [pro](){ configureEditors(pro); });
connect(pro, &Project::displayNameChanged, pro, updateFolderNavigation);
} }
void SessionManager::removeProject(Project *project) void SessionManager::removeProject(Project *project)
@@ -744,8 +751,7 @@ void SessionManager::removeProjects(QList<Project *> remove)
m_instance, &SessionManager::clearProjectFileCache); m_instance, &SessionManager::clearProjectFileCache);
d->m_projectFileCache.remove(pro); d->m_projectFileCache.remove(pro);
emit m_instance->projectRemoved(pro); emit m_instance->projectRemoved(pro);
FolderNavigationWidgetFactory::removeRootDirectory("P." + pro->displayName() + "." FolderNavigationWidgetFactory::removeRootDirectory(projectFolderId(pro));
+ pro->projectFilePath().toString());
delete pro; delete pro;
} }