diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp index 4869e0d238f..54b2be99894 100644 --- a/src/libs/utils/treemodel.cpp +++ b/src/libs/utils/treemodel.cpp @@ -1027,23 +1027,24 @@ void TreeModel::clear() \note The item is not destroyed, ownership is effectively passed to the caller. */ -void TreeModel::takeItem(TreeItem *item) +TreeItem *TreeModel::takeItem(TreeItem *item) { #if USE_MODEL_TEST (void) new ModelTest(this, this); #endif - QTC_ASSERT(item, return); + QTC_ASSERT(item, return item); TreeItem *parent = item->parent(); - QTC_ASSERT(parent, return); + QTC_ASSERT(parent, return item); int pos = parent->m_children.indexOf(item); - QTC_ASSERT(pos != -1, return); + QTC_ASSERT(pos != -1, return item); QModelIndex idx = indexForItem(parent); beginRemoveRows(idx, pos, pos); item->m_parent = 0; parent->m_children.removeAt(pos); endRemoveRows(); + return item; } // diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h index 9be4dc805a3..6cd3dc9adf7 100644 --- a/src/libs/utils/treemodel.h +++ b/src/libs/utils/treemodel.h @@ -291,7 +291,7 @@ public: return Utils::findOrDefault(itemsAtLevel(level, start), f); } - void takeItem(TreeItem *item); // item is not destroyed. + TreeItem *takeItem(TreeItem *item); // item is not destroyed. signals: void requestExpansion(QModelIndex); diff --git a/src/plugins/baremetal/gdbserverproviderssettingspage.cpp b/src/plugins/baremetal/gdbserverproviderssettingspage.cpp index 7757bd7a91a..84708e8356d 100644 --- a/src/plugins/baremetal/gdbserverproviderssettingspage.cpp +++ b/src/plugins/baremetal/gdbserverproviderssettingspage.cpp @@ -265,8 +265,7 @@ void GdbServerProviderModel::removeProvider(GdbServerProvider *provider) } n = findNode(rootItem()->children(), provider); - takeItem(n); - delete n; + delete takeItem(n); emit providerStateChanged(); } diff --git a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp index 3436b87e5dc..35808e404cf 100644 --- a/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp +++ b/src/plugins/cmakeprojectmanager/cmakesettingspage.cpp @@ -237,10 +237,8 @@ void CMakeToolItemModel::removeCMakeTool(const Core::Id &id) CMakeToolTreeItem *treeItem = cmakeToolItem(id); QTC_ASSERT(treeItem, return); - takeItem(treeItem); + delete takeItem(treeItem); m_removedItems.append(id); - - delete treeItem; } void CMakeToolItemModel::apply() diff --git a/src/plugins/debugger/breakhandler.cpp b/src/plugins/debugger/breakhandler.cpp index 7c9d7b1d62e..969b011a9c5 100644 --- a/src/plugins/debugger/breakhandler.cpp +++ b/src/plugins/debugger/breakhandler.cpp @@ -412,8 +412,7 @@ void BreakHandler::deletionHelper(BreakpointModelId id) { Breakpoint b = breakpointById(id); QTC_ASSERT(b, return); - takeItem(b.b); - delete b.b; + delete takeItem(b.b); } Breakpoint BreakHandler::findWatchpoint(const BreakpointParameters ¶ms) const @@ -1235,8 +1234,7 @@ void BreakHandler::changeLineNumberFromMarkerHelper(BreakpointModelId id) Breakpoint b = breakpointById(id); QTC_ASSERT(b, return); BreakpointParameters params = b.parameters(); - takeItem(b.b); - delete b.b; + delete takeItem(b.b); appendBreakpoint(params); } diff --git a/src/plugins/debugger/debuggeroptionspage.cpp b/src/plugins/debugger/debuggeroptionspage.cpp index 00198db40ed..1715cc9cbe6 100644 --- a/src/plugins/debugger/debuggeroptionspage.cpp +++ b/src/plugins/debugger/debuggeroptionspage.cpp @@ -165,8 +165,7 @@ void DebuggerItemModel::removeCurrentDebugger() QVariant id = m_currentTreeItem->m_item.id(); DebuggerTreeItem *treeItem = m_currentTreeItem; m_currentTreeItem = 0; - takeItem(treeItem); - delete treeItem; + delete takeItem(treeItem); m_removedItems.append(id); } diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 3c57479d157..4dbfdc30d38 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -1251,8 +1251,7 @@ void WatchHandler::removeItemByIName(const QByteArray &iname) theWatcherNames.remove(item->exp); saveWatchers(); } - m_model->takeItem(item); - delete item; + delete m_model->takeItem(item); updateWatchersWindow(); } diff --git a/src/plugins/projectexplorer/kitmodel.cpp b/src/plugins/projectexplorer/kitmodel.cpp index fd24304194e..cd676c70fc0 100644 --- a/src/plugins/projectexplorer/kitmodel.cpp +++ b/src/plugins/projectexplorer/kitmodel.cpp @@ -359,8 +359,7 @@ void KitModel::removeKit(Kit *k) if (node == m_defaultNode) setDefaultNode(findItemAtLevel(2, [node](KitNode *kn) { return kn != node; })); - takeItem(node); - delete node; + delete takeItem(node); validateKitNames(); emit kitStateChanged(); diff --git a/src/plugins/projectexplorer/toolchainoptionspage.cpp b/src/plugins/projectexplorer/toolchainoptionspage.cpp index 6482acebdb4..54fabc78668 100644 --- a/src/plugins/projectexplorer/toolchainoptionspage.cpp +++ b/src/plugins/projectexplorer/toolchainoptionspage.cpp @@ -259,8 +259,7 @@ void ToolChainOptionsWidget::removeToolChain(ToolChain *tc) TreeItem *parent = m_model.rootItem()->child(tc->isAutoDetected() ? 0 : 1); foreach (ToolChainTreeItem *item, m_model.itemsAtLevel(1, parent)) { if (item->toolChain == tc) { - m_model.takeItem(item); - delete item; + delete m_model.takeItem(item); break; } }