From daeaa2b7e39f2ed94a91cf0a4f6acbdfffbbfa8f Mon Sep 17 00:00:00 2001 From: wandererfan Date: Thu, 28 Dec 2023 09:40:41 -0500 Subject: [PATCH] [TD]fix fail when dropping onto corrupt object --- .../Gui/ViewProviderDrawingViewExtension.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Mod/TechDraw/Gui/ViewProviderDrawingViewExtension.cpp b/src/Mod/TechDraw/Gui/ViewProviderDrawingViewExtension.cpp index 991ca34d12..18112b968f 100644 --- a/src/Mod/TechDraw/Gui/ViewProviderDrawingViewExtension.cpp +++ b/src/Mod/TechDraw/Gui/ViewProviderDrawingViewExtension.cpp @@ -58,9 +58,24 @@ void ViewProviderDrawingViewExtension::extensionDragObject(App::DocumentObject* //extension to try to drop on us and cause problems bool ViewProviderDrawingViewExtension::extensionCanDropObjects() const { return true; } -//let the page have any drops we receive +//let the page have any drops we receive. bool ViewProviderDrawingViewExtension::extensionCanDropObject(App::DocumentObject* obj) const { + // it can happen that if the tree gets badly corrupted, there can be loose + // objects that have no page or view provider, so we need to check that + // all these objects exist. + auto vpdv = getViewProviderDrawingView(); + if (!vpdv) { + return false; + } + auto vpp = vpdv->getViewProviderPage(); + if (!vpp) { + return false; + } + auto vppEx = vpp->getVPPExtension(); + if (!vppEx) { + return false; + } return getViewProviderDrawingView() ->getViewProviderPage() ->getVPPExtension()