From 326eb5e3438d91f81dc03546679519c5b91b7bc5 Mon Sep 17 00:00:00 2001 From: Lukas Matena Date: Wed, 4 Sep 2019 15:15:35 +0200 Subject: [PATCH] GUI_ObjectList.cpp: Fixed a crash when deleting instances. Deleting second-but-last instance deletes the whole Instances node, we must select object node in that case. --- src/slic3r/GUI/GUI_ObjectList.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index 0b89939b6..20760e2bc 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -2500,15 +2500,18 @@ void ObjectList::remove() auto delete_item = [this](wxDataViewItem item) { wxDataViewItem parent = m_objects_model->GetParent(item); - if (m_objects_model->GetItemType(item) & itObject) + ItemType type = m_objects_model->GetItemType(item); + if (type & itObject) delete_from_model_and_list(itObject, m_objects_model->GetIdByItem(item), -1); else { - if (m_objects_model->GetItemType(item) & itLayer) { + if (type & (itLayer | itInstance)) { + // In case there is just one layer or two instances and we delete it, del_subobject_item will + // also remove the parent item. Selection should therefore pass to the top parent (object). wxDataViewItemArray children; - if (m_objects_model->GetChildren(parent, children) == 1) + if (m_objects_model->GetChildren(parent, children) == (type & itLayer ? 1 : 2)) parent = m_objects_model->GetTopParent(item); } - + del_subobject_item(item); }