Debugger: Fix crash on second options opening

Change-Id: I6ca5d860e9c2a82e7032873a0a2c939ab2f4c69f
Task-number: QTCREATORBUG-18189
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
hjk
2017-05-12 14:30:08 +02:00
parent 47198b44e4
commit 69521da36e

View File

@@ -197,8 +197,9 @@ public:
void updateDebugger(const DebuggerItem &item); void updateDebugger(const DebuggerItem &item);
void apply(); void apply();
void cancel(); void cancel();
DebuggerTreeItem *currentTreeItem();
DebuggerTreeItem *m_currentTreeItem = nullptr; QPersistentModelIndex m_currentIndex;
}; };
template <class Predicate> template <class Predicate>
@@ -287,8 +288,13 @@ void DebuggerItemModel::cancel()
void DebuggerItemModel::setCurrentIndex(const QModelIndex &index) void DebuggerItemModel::setCurrentIndex(const QModelIndex &index)
{ {
TreeItem *treeItem = itemForIndex(index); m_currentIndex = index;
m_currentTreeItem = treeItem && treeItem->level() == 2 ? static_cast<DebuggerTreeItem *>(treeItem) : 0; }
DebuggerTreeItem *DebuggerItemModel::currentTreeItem()
{
TreeItem *treeItem = itemForIndex(m_currentIndex);
return treeItem && treeItem->level() == 2 ? static_cast<DebuggerTreeItem *>(treeItem) : nullptr;
} }
DebuggerItemConfigWidget::DebuggerItemConfigWidget() DebuggerItemConfigWidget::DebuggerItemConfigWidget()
@@ -514,10 +520,11 @@ public:
void DebuggerConfigWidget::cloneDebugger() void DebuggerConfigWidget::cloneDebugger()
{ {
if (!d->m_model->m_currentTreeItem) DebuggerTreeItem *treeItem = d->m_model->currentTreeItem();
if (!treeItem)
return; return;
DebuggerItem *item = &d->m_model->m_currentTreeItem->m_item; DebuggerItem *item = &treeItem->m_item;
DebuggerItem newItem; DebuggerItem newItem;
newItem.createId(); newItem.createId();
newItem.setCommand(item->command()); newItem.setCommand(item->command());
@@ -542,9 +549,10 @@ void DebuggerConfigWidget::addDebugger()
void DebuggerConfigWidget::removeDebugger() void DebuggerConfigWidget::removeDebugger()
{ {
QTC_ASSERT(d->m_model->m_currentTreeItem, return); DebuggerTreeItem *treeItem = d->m_model->currentTreeItem();
d->m_model->m_currentTreeItem->m_removed = !d->m_model->m_currentTreeItem->m_removed; QTC_ASSERT(treeItem, return);
d->m_model->m_currentTreeItem->update(); treeItem->m_removed = !treeItem->m_removed;
treeItem->update();
updateButtons(); updateButtons();
} }
@@ -556,7 +564,7 @@ void DebuggerConfigWidget::currentDebuggerChanged(const QModelIndex &newCurrent)
void DebuggerConfigWidget::updateButtons() void DebuggerConfigWidget::updateButtons()
{ {
DebuggerTreeItem *titem = d->m_model->m_currentTreeItem; DebuggerTreeItem *titem = d->m_model->currentTreeItem();
DebuggerItem *item = titem ? &titem->m_item : nullptr; DebuggerItem *item = titem ? &titem->m_item : nullptr;
m_itemConfigWidget->load(item); m_itemConfigWidget->load(item);