Merge pull request #17767 from wwmayer/issue_17764

Core: Avoid cyclic dependencies when dragging an object into a group
This commit is contained in:
Chris Hennes
2024-11-22 12:11:15 -05:00
committed by GitHub

View File

@@ -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<App::GroupExtension>();
auto extobj = getExtendedViewProvider()->getObject();
auto group = extobj->getExtensionByType<App::GroupExtension>();
//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) {