diff --git a/src/Gui/ViewProviderGroupExtension.cpp b/src/Gui/ViewProviderGroupExtension.cpp index 310997929e..254a68dbae 100644 --- a/src/Gui/ViewProviderGroupExtension.cpp +++ b/src/Gui/ViewProviderGroupExtension.cpp @@ -72,22 +72,28 @@ bool ViewProviderGroupExtension::extensionCanDropObjects() const { return true; } -bool ViewProviderGroupExtension::extensionCanDropObject(App::DocumentObject* obj) const { - +bool ViewProviderGroupExtension::extensionCanDropObject(App::DocumentObject* obj) const +{ #ifdef FC_DEBUG - Base::Console().Log("Check ViewProviderGroupExtension"); + Base::Console().Log("Check ViewProviderGroupExtension\n"); #endif - auto* group = getExtendedViewProvider()->getObject()->getExtensionByType(); + auto extobj = getExtendedViewProvider()->getObject(); + auto group = extobj->getExtensionByType(); //we cannot drop thing of this group into it again if it does not allow reorder - if (group->hasObject(obj) && !getExtendedViewProvider()->acceptReorderingObjects()) + if (group->hasObject(obj) && !getExtendedViewProvider()->acceptReorderingObjects()) { return false; + } - if (group->allowObject(obj)) - return true; + // Check for possible cyclic dependencies if we allowed to drop the object + const auto& list = obj->getOutList(); + if (std::find(list.begin(), list.end(), extobj) != list.end()) { + Base::Console().Warning("Do not add cyclic dependency to %s\n", extobj->Label.getValue()); + return false; + } - return false; + return group->allowObject(obj); } void ViewProviderGroupExtension::extensionDropObject(App::DocumentObject* obj) {