From 98bbaec69e8312b8869ed33f8aeac7709983feb0 Mon Sep 17 00:00:00 2001 From: azv Date: Fri, 15 Dec 2017 14:20:55 +0300 Subject: [PATCH] Issue #2371: Fatal error when undo/redo delete folder --- src/XGUI/XGUI_DataModel.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/XGUI/XGUI_DataModel.cpp b/src/XGUI/XGUI_DataModel.cpp index baf49e20b..b4ee3b011 100644 --- a/src/XGUI/XGUI_DataModel.cpp +++ b/src/XGUI/XGUI_DataModel.cpp @@ -376,8 +376,11 @@ ObjectPtr XGUI_DataModel::object(const QModelIndex& theIndex) const { if (theIndex.internalId() == 0) // this is a folder return ObjectPtr(); - ModelAPI_Object* aObj = - dynamic_cast((ModelAPI_Entity*)theIndex.internalPointer()); + ModelAPI_Object* aObj = 0; + try { + aObj = dynamic_cast((ModelAPI_Entity*)theIndex.internalPointer()); + } catch(...) {} + if (!aObj) return ObjectPtr(); if (getSubDocument(aObj)) // the selected index is a folder of sub-document @@ -760,9 +763,12 @@ QModelIndex XGUI_DataModel::parent(const QModelIndex& theIndex) const ObjectPtr aObj = object(theIndex); if (!aObj.get()) { // It can be a step of a field - ModelAPI_ResultField::ModelAPI_FieldStep* aStep = - dynamic_cast - ((ModelAPI_Entity*)theIndex.internalPointer()); + ModelAPI_ResultField::ModelAPI_FieldStep* aStep = 0; + try { + aStep = dynamic_cast + ((ModelAPI_Entity*)theIndex.internalPointer()); + } catch(...) {} + if (aStep) { ModelAPI_ResultField* aField = aStep->field(); DocumentPtr aDoc = aSession->activeDocument(); -- 2.39.2