diff options
author | Tobias Hunger <tobias.hunger@qt.io> | 2018-06-29 14:02:22 +0200 |
---|---|---|
committer | Tobias Hunger <tobias.hunger@qt.io> | 2018-07-03 08:33:37 +0000 |
commit | ccfb7c6aa4e655c65be3d895b2d8545258f75d78 (patch) | |
tree | ef6e5ef0c8bd3b75177d6b9ec8d1210c16e8f78d /src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp | |
parent | b3f4282edc336a72270d0b16119c6be7914c7430 (diff) |
CMake: Make handling of default CMakeTool more consistent
Change-Id: Idc2ba2c51122855f0b335f89ca5f916dea7665c5
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp')
-rw-r--r-- | src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp | 51 |
1 files changed, 24 insertions, 27 deletions
diff --git a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp index 4249cd9965..bd8a2c7424 100644 --- a/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp +++ b/src/plugins/cmakeprojectmanager/cmaketoolmanager.cpp @@ -270,9 +270,7 @@ bool CMakeToolManager::registerCMakeTool(CMakeTool *tool) emit CMakeToolManager::m_instance->cmakeAdded(toolId); - //set the first registered cmake tool as default if there is not already one - if (!d->m_defaultCMake.isValid()) - CMakeToolManager::setDefaultCMakeTool(toolId); + ensureDefaultCMakeToolIsValid(); return true; } @@ -282,14 +280,8 @@ void CMakeToolManager::deregisterCMakeTool(const Id &id) int idx = Utils::indexOf(d->m_cmakeTools, Utils::equal(&CMakeTool::id, id)); if (idx >= 0) { CMakeTool *toRemove = d->m_cmakeTools.takeAt(idx); - if (toRemove->id() == d->m_defaultCMake) { - if (d->m_cmakeTools.isEmpty()) - d->m_defaultCMake = Id(); - else - d->m_defaultCMake = d->m_cmakeTools.first()->id(); - emit m_instance->defaultCMakeChanged(); - } + ensureDefaultCMakeToolIsValid(); emit m_instance->cmakeRemoved(id); delete toRemove; @@ -298,28 +290,18 @@ void CMakeToolManager::deregisterCMakeTool(const Id &id) CMakeTool *CMakeToolManager::defaultCMakeTool() { - CMakeTool *tool = findById(d->m_defaultCMake); - if (!tool) { - //if the id is not valid, we set the firstly registered one as default - if (!d->m_cmakeTools.isEmpty()) { - d->m_defaultCMake = d->m_cmakeTools.first()->id(); - emit m_instance->defaultCMakeChanged(); - - return d->m_cmakeTools.first(); - } - } - return tool; + return findById(d->m_defaultCMake); } void CMakeToolManager::setDefaultCMakeTool(const Id &id) { - if (d->m_defaultCMake == id) - return; - - if (findById(id)) { + if (d->m_defaultCMake != id && findById(id)) { d->m_defaultCMake = id; emit m_instance->defaultCMakeChanged(); + return; } + + ensureDefaultCMakeToolIsValid(); } CMakeTool *CMakeToolManager::findByCommand(const FileName &command) @@ -361,8 +343,7 @@ void CMakeToolManager::restoreCMakeTools() } } - if (CMakeToolManager::findById(defaultId)) - d->m_defaultCMake = defaultId; + setDefaultCMakeTool(defaultId); emit m_instance->cmakeToolsLoaded(); } @@ -397,4 +378,20 @@ void CMakeToolManager::saveCMakeTools() d->m_writer->save(data, ICore::mainWindow()); } +void CMakeToolManager::ensureDefaultCMakeToolIsValid() +{ + const Core::Id oldId = d->m_defaultCMake; + if (d->m_cmakeTools.isEmpty()) { + d->m_defaultCMake = Core::Id(); + } else { + if (findById(d->m_defaultCMake)) + return; + d->m_defaultCMake = d->m_cmakeTools.at(0)->id(); + } + + // signaling: + if (oldId != d->m_defaultCMake) + emit m_instance->defaultCMakeChanged(); +} + } // namespace CMakeProjectManager |